Postgresql

PostgreSQL:無法執行 repmgr 複製數據庫

  • June 5, 2014

我正在使用 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. 所需工具

  1. 一個穩定的 GNU/Linux 發行版(推薦作業系統:CentOS 6.2 x86-64
  2. PostgreSQL 9.1 – 您可以從這里安裝:http: //yum.postgresql.org/(還要確保安裝了以下軟體包或其等效網路)
  3. PostgreSQL
  4. postgresql 客戶端
  5. postgresql 貢獻
  6. postgresql 伺服器
  7. postgresql 伺服器開發
  8. 2 個工作站——一個執行主數據庫的主機和一個執行複制的只讀數據庫的從屬(為了本文件的目的,它們各自的 IP 地址已替換為pgmasterpgslave,因此在 /etc/hosts 中進行這些更改兩台機器,如果您想逐字遵循以下說明)

2. 安裝檢查和密碼創建

  1. 在兩個系統上執行*/etc/init.d/postgresql start*以檢查 PostgreSQL 是否正常執行。
  2. 在兩個系統上執行*/etc/init.d/postgresql stop*以停止 PostgreSQL。在完成一些與配置相關的任務之前,我們不會使用 PostgreSQL。
  3. 在兩個系統上為使用者postgres設置密碼。這個使用者預設沒有密碼,但是我們需要一個密碼來幫助在 pgmaster 和 pgslave 之間創建一個 SSH 隧道。
  4. 在兩個系統上執行sudo passwd postgres並為兩個系統輸入一個新的 Unix 密碼。

3. SSH隧道創建

  1. pgmaster上執行以下操作:
  2. 使用 postgres
  3. ssh-keygen -t rsa(在每個提示符下按輸入鍵)
  4. ssh-copy-id -i ~/ssh/id_rsa.pub pgslave(需要輸入pgslave的postgres密碼)
  5. ssh pgslave看看能不能不用密碼登錄
  6. 在pgslave上重複上述步驟
  7. 使用 postgres
  8. sh-keygen -t rsa
  9. ssh-copy-id -i ~/ssh/id_rsa.pubaster
  10. ssh pgmaster看看是否可以不用密碼登錄
  11. 確保在完成檢查連接後從遠端電腦註銷

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 變數,以便它知道在哪裡可以找到它們

  1. 執行定位 pgbench
  2. 輸出將類似於*/usr/lib/postgresql/9.1/bin/pgbench*
  3. 排除最終單詞 pgbench,複製上面的路徑並將其添加到您的路徑變數中。
  4. 執行納米 ~/.bashrc
  5. 添加行export PATH+=:/usr/lib/postgresql/9.1/bin/(或定位命令顯示的任何位置)
  6. 關閉文件並保存更改
  7. 您可能需要註銷並登錄(或打開新的 shell)才能使更改生效。

8. 用虛擬數據載入 pgmaster 的 PostgreSQL 伺服器

  1. pgmaster上首先啟動 PostgreSQL 伺服器:/etc/init.d/postgresql start

  2. 我們創建一個測試數據庫並使用以下命令載入一些虛擬數據:

  3. 使用 postgres

  4. createdb pgbench

  5. pgbench -i -s 10 pgbench

  6. 或者自己打開數據庫pgbench,創建一個範例表並將範例數據插入其中。

9. 擦除 pgslave 的數據並檢查 pgmaster 的連接性

  1. 我們將擦除 pgslave 的數據目錄,因此在該機器上執行以下操作:
  2. 首先停止 PostgreSQL 伺服器*/etc/init.d/postgresql stop*
  3. 移動到 PostgreSQL 預設數據目錄文件夾:cd /var/lib/pgsql/data(或到您安裝的預設數據目錄)
  4. *使用rm -rf **完全清空目錄
  5. 現在執行psql -h pgmaster -d pgbench看看是否可以通過pgslave訪問**pgmaster上的數據庫。

10.安裝repmgr 儘管單從複製相當簡單,但我們使用了一個名為repmgr的工具來幫助使該過程更加簡單。以下是您的安裝方法:

  1. 從http://projects.2ndquadrant.it/sites/default/files/repmgr-1.1.0.tar.gz獲取 repmgr 原始碼 並將其複製到*/tmp*進行安裝。
  2. 安裝以下軟體包以確保可以編譯 repmgr:
  3. 製作
  4. 海合會
  5. postgresql 開發
  6. libxslt-開發
  7. pam-開發
  8. libopenssl-開發
  9. krb5-開發
  • 提取下載的存檔並進入原始碼文件夾。
  • 使用make USE_PGXS=1編譯
  • 使用make USE_PGXS=1 install 安裝
  • 執行以下兩條命令檢查repmgr是否安裝正確:
  • repmgr –版本
  • repmgrd –版本

11. 使用 repmgr 將 pgmaster 複製到 pgslave

  1. 執行su postgres並以pgslave上的**postgres使用者身份登錄
  2. 執行這個來複製數據庫:repmgr -D /var/lib/pgsql/data -d pgbench -p 5432 -R postgres –verbose standby clone pgmaster
  3. 注意 -D 參數*/var/lib/pgsql/data應該替換為pgslave上數據文件夾的適當位置*
  4. 另請注意,5432是 PostgreSQL 執行的預設埠。
  5. 當命令完成執行時(如果您使用 pgbench 插入隨機數據,則需要幾秒鐘才能完成)您可以使用*/etc/init.d/postgresql start在 pgslave 上啟動 PostgreSQL*

12. 測試流複製 恭喜!您已成功配置pgslave 以通過流複製複製pgmaster的數據庫。請注意,由於處於持續恢復模式,pgslave只能用於執行只讀查詢不能進行插入或修改

  1. pgmaster上的**sample_table中插入一些值。
  2. 執行 select * from sample_table; 連接到 pgbench 數據庫後,在 pgslave 的 psql 提示符上。
  3. 如果一切正常,您應該能夠在 pgslave 的輸出中查看新添加的元

結論 我們剛剛學習瞭如何快速配置 PostgreSQL 數據庫以充當另一個數據庫的只讀鏡像。請注意,如果從伺服器離線,它將自動從主伺服器恢復數據並很快更新。流複製是在數據庫級別的,因此您需要為每個需要通過流複製複製的新數據庫執行第 11 部分中的命令。

引用自:https://dba.stackexchange.com/questions/15055