PostgreSQL:無法執行 repmgr 複製數據庫
我正在使用 PostgreSQL 熱備用執行測試,其中有 1 個主伺服器,正好有 1 個從伺服器。
我正在使用本指南中的說明:http: //www.howtoforge.com/how-to-set-up-a-postgresql-9.0-hot-standby-streaming-replication-server-with-repmgr-on-opensuse -11.4
我正在使用 PostgreSQL 版本 9.1、repmgr 1.1.0 和 Ubuntu 10.04 LTS。
我按照我執行的指南中的步驟 6 進行操作
repmgr -D /var/lib/postgresql/9.1/main -d pgbench -p 5432 -R postgres --verbose standby clone pgmaster
在 pgslave 上。
然後我做了一個
/etc/init.d/postgresql start
在它上面,腳本(似乎)成功完成。
但是,執行 psql 會引發錯誤:
psql: FATAL: 數據庫系統正在啟動
歡迎任何有關進一步進行的幫助。
我四處搜尋,發現問題是由於沒有在備用伺服器上啟用 hot_standby。我為上述文章寫了一個更正、更新和簡化的版本,作為將來個人參考的 odt。這是完整的文本(使用 openoffice.org 從 odt 轉換為 html),適用於那些有興趣使用 repmgr 設置數據庫的單個只讀複製的人:
使用 PostgreSQL 的單從流複製
簡介
本指南旨在快速幫助您使用數據庫配置 PostgreSQL 9.1 伺服器,並將其複製到可用於只讀查詢的從屬伺服器。這裡不涉及故障轉移的概念,slave 只會擁有 master 數據的只讀副本。
1. 所需工具
- 一個穩定的 GNU/Linux 發行版(推薦作業系統:CentOS 6.2 x86-64)
- PostgreSQL 9.1 – 您可以從這里安裝:http: //yum.postgresql.org/(還要確保安裝了以下軟體包或其等效網路)
- PostgreSQL
- postgresql 客戶端
- postgresql 貢獻
- postgresql 伺服器
- postgresql 伺服器開發
- 2 個工作站——一個執行主數據庫的主機和一個執行複制的只讀數據庫的從屬(為了本文件的目的,它們各自的 IP 地址已替換為pgmaster和pgslave,因此在 /etc/hosts 中進行這些更改兩台機器,如果您想逐字遵循以下說明)
2. 安裝檢查和密碼創建
- 在兩個系統上執行*/etc/init.d/postgresql start*以檢查 PostgreSQL 是否正常執行。
- 在兩個系統上執行*/etc/init.d/postgresql stop*以停止 PostgreSQL。在完成一些與配置相關的任務之前,我們不會使用 PostgreSQL。
- 在兩個系統上為使用者postgres設置密碼。這個使用者預設沒有密碼,但是我們需要一個密碼來幫助在 pgmaster 和 pgslave 之間創建一個 SSH 隧道。
- 在兩個系統上執行sudo passwd postgres並為兩個系統輸入一個新的 Unix 密碼。
3. SSH隧道創建
- 在pgmaster上執行以下操作:
- 使用 postgres
- ssh-keygen -t rsa(在每個提示符下按輸入鍵)
- ssh-copy-id -i ~/ssh/id_rsa.pub pgslave(需要輸入pgslave的postgres密碼)
- ssh pgslave看看能不能不用密碼登錄
- 在pgslave上重複上述步驟
- 使用 postgres
- sh-keygen -t rsa
- ssh-copy-id -i ~/ssh/id_rsa.pubaster
- ssh pgmaster看看是否可以不用密碼登錄
- 確保在完成檢查連接後從遠端電腦註銷
4. 在 pgmaster 上編輯 postgresql.conf 您需要 在您的機器pgmaster上**/etc/postgresql/內的配置目錄中的postgresql.conf文件中進行以下更改:
- 聽地址 = ‘’*
- wal_level = hot_standby
- checkpoint_segments=30
- 存檔模式=開啟
- archive_command=‘cd .’
- max_wal_senders=2
- wal_keep_segments=5000
5. 在 pgslave 上編輯 postgresql.conf 您需要 在機器pgslave上**/etc/postgresql/ 內的配置目錄中的文件postgresql.conf中進行以下更改:
- hot_standby=on
6. 在 pgmastger 上編輯 pg_hba.conf 您需要 在機器pgmaster上**/etc/postgresql/ 內的配置目錄中的文件pg_hba.conf中進行以下更改:
- 託管所有所有 192.168.5.0/24 信任
- 主機複製所有 192.168.5.0/24 信任
7. 將 PostgreSQL bin 文件夾添加到 PATH 我們將在這裡使用一堆漂亮的 postgresql 實用程序,所以讓我們設置 PATH 變數,以便它知道在哪裡可以找到它們
- 執行定位 pgbench
- 輸出將類似於*/usr/lib/postgresql/9.1/bin/pgbench*
- 排除最終單詞 pgbench,複製上面的路徑並將其添加到您的路徑變數中。
- 執行納米 ~/.bashrc
- 添加行export PATH+=:/usr/lib/postgresql/9.1/bin/(或定位命令顯示的任何位置)
- 關閉文件並保存更改
- 您可能需要註銷並登錄(或打開新的 shell)才能使更改生效。
8. 用虛擬數據載入 pgmaster 的 PostgreSQL 伺服器
在pgmaster上首先啟動 PostgreSQL 伺服器:/etc/init.d/postgresql start
我們創建一個測試數據庫並使用以下命令載入一些虛擬數據:
使用 postgres
createdb pgbench
pgbench -i -s 10 pgbench
或者自己打開數據庫pgbench,創建一個範例表並將範例數據插入其中。
9. 擦除 pgslave 的數據並檢查 pgmaster 的連接性
- 我們將擦除 pgslave 的數據目錄,因此在該機器上執行以下操作:
- 首先停止 PostgreSQL 伺服器*/etc/init.d/postgresql stop*
- 移動到 PostgreSQL 預設數據目錄文件夾:cd /var/lib/pgsql/data(或到您安裝的預設數據目錄)
- *使用rm -rf **完全清空目錄
- 現在執行psql -h pgmaster -d pgbench看看是否可以通過pgslave訪問**pgmaster上的數據庫。
10.安裝repmgr 儘管單從複製相當簡單,但我們使用了一個名為repmgr的工具來幫助使該過程更加簡單。以下是您的安裝方法:
- 從http://projects.2ndquadrant.it/sites/default/files/repmgr-1.1.0.tar.gz獲取 repmgr 原始碼 並將其複製到*/tmp*進行安裝。
- 安裝以下軟體包以確保可以編譯 repmgr:
- 製作
- 海合會
- postgresql 開發
- libxslt-開發
- pam-開發
- libopenssl-開發
- krb5-開發
- 提取下載的存檔並進入原始碼文件夾。
- 使用make USE_PGXS=1編譯
- 使用make USE_PGXS=1 install 安裝
- 執行以下兩條命令檢查repmgr是否安裝正確:
- repmgr –版本
- repmgrd –版本
11. 使用 repmgr 將 pgmaster 複製到 pgslave
- 執行su postgres並以pgslave上的**postgres使用者身份登錄
- 執行這個來複製數據庫:repmgr -D /var/lib/pgsql/data -d pgbench -p 5432 -R postgres –verbose standby clone pgmaster
- 注意 -D 參數*/var/lib/pgsql/data應該替換為pgslave上數據文件夾的適當位置*
- 另請注意,5432是 PostgreSQL 執行的預設埠。
- 當命令完成執行時(如果您使用 pgbench 插入隨機數據,則需要幾秒鐘才能完成)您可以使用*/etc/init.d/postgresql start在 pgslave 上啟動 PostgreSQL*
12. 測試流複製 恭喜!您已成功配置pgslave 以通過流複製複製pgmaster的數據庫。請注意,由於處於持續恢復模式,pgslave只能用於執行只讀查詢,不能進行插入或修改。
- 在pgmaster上的**sample_table中插入一些值。
- 執行 select * from sample_table; 連接到 pgbench 數據庫後,在 pgslave 的 psql 提示符上。
- 如果一切正常,您應該能夠在 pgslave 的輸出中查看新添加的元組。
結論 我們剛剛學習瞭如何快速配置 PostgreSQL 數據庫以充當另一個數據庫的只讀鏡像。請注意,如果從伺服器離線,它將自動從主伺服器恢復數據並很快更新。流複製是在數據庫級別的,因此您需要為每個需要通過流複製複製的新數據庫執行第 11 部分中的命令。