簡體   English   中英

如何在postgres中設置同步流復制?

[英]How to set up synchronous streaming replication in postgres?

我正在嘗試使用Postgres 9.1設置同步復制,但我無法讓它工作。 我能夠配置流復制,但不能同步。 我希望我沒有錯過任何明顯的東西。 我仔細閱讀了管理指南中第17,18,14,25,26和29節的許多部分。

我正在運行ubuntu 12.04,我的主postgresql.conf在所有其他標准設置中都有這些:

listen_addresses = '*'              # what IP address(es) to listen on;
wal_level = archive                 # minimal, archive, or hot_standby
archive_mode = on                   # allows archiving to be done
archive_command = 'test ! -f /data/pgWalArchive/%f && cp %p /data/pgWalArchive/%f'
wal_keep_segments = 100             # in logfile segments, 16MB each; 0 disables ??? What should this be ???? 
max_wal_senders = 3                 # max number of walsender processes

除了標准的東西之外,我的pg_hba.conf還有這個:

host    all             all             XX.6.35.0/24            md5
host    replication     postgres        XX.6.35.0/24            md5

我的主數據庫只有一個序列,所以它很小。 我成功地在主服務器上創建了主服務器的備份並將其恢復:

sudo -u postgres pg_basebackup -D ~/backup -F tar -x -z -l ~/backup/base1 -v -h XX.6.35.51 -U postgres

我還將WAL存檔文件復制到備用數據庫。 我的standby recovery.conf文件包含:

restore_command = '/usr/lib/postgresql/9.1/bin/pg_standby /data/pgWalArchive %f %p %r'
archive_cleanup_command = '/usr/lib/postgresql/9.1/bin/pg_archivecleanup /data/pgWalArchive %r'
standby_mode = on
primary_conninfo = 'host=XX.6.35.51 port=5432' # e.g. 'host=masterIpAddressOrName port=5432'

兩台服務器都啟動沒有問題,日志似乎沒問題。 我的待機有這個:

2012-06-08 10:23:51 MDT LOG:  shutting down
2012-06-08 10:23:51 MDT LOG:  database system is shut down
2012-06-08 10:23:53 MDT LOG:  database system was shut down in recovery at 2012-06-08 10:23:51 MDT
2012-06-08 10:23:53 MDT LOG:  entering standby mode
2012-06-08 10:23:53 MDT LOG:  consistent recovery state reached at 0/1D000078
2012-06-08 10:23:53 MDT LOG:  record with zero length at 0/1D000078
2012-06-08 10:23:53 MDT LOG:  streaming replication successfully connected to primary
2012-06-08 10:23:53 MDT LOG:  incomplete startup packet
2012-06-08 10:23:54 MDT FATAL:  the database system is starting up
2012-06-08 10:23:54 MDT FATAL:  the database system is starting up
2012-06-08 10:23:55 MDT FATAL:  the database system is starting up
2012-06-08 10:23:55 MDT FATAL:  the database system is starting up
2012-06-08 10:23:56 MDT FATAL:  the database system is starting up
2012-06-08 10:23:56 MDT FATAL:  the database system is starting up
2012-06-08 10:23:57 MDT FATAL:  the database system is starting up
2012-06-08 10:23:57 MDT FATAL:  the database system is starting up
2012-06-08 10:23:58 MDT FATAL:  the database system is starting up
2012-06-08 10:23:58 MDT FATAL:  the database system is starting up
2012-06-08 10:23:59 MDT FATAL:  the database system is starting up
2012-06-08 10:23:59 MDT LOG:  incomplete startup packet
2012-06-08 10:24:40 MDT LOG:  redo starts at 0/1D000078

問題是,當我向主人發出聲明時,他們會永遠掛起。 我錯過了什么嗎?

當兩年前9.0出現時,我是第一個將流式復制(AKA“二進制復制”)投入生產的人,但由於Postgres的復制功能處於不穩定狀態,因此跳過9.1。 現在,截至9月的第二周左右,9.2已經出局了 - 你想知道它!

使用9.2,簡化了復制並大大改進了!

現在你可以有復制級聯! 以前,您必須讓主服務器直接為所有從服務器服務。 現在你可以通過流式傳輸到一個從屬設備來卸載主設備,然后讓那個從設備流到你想要的任意數量! 這使您可以將第一級從站設置為潛在的熱備用系統,以便在主站發生故障時接管。

配置這個的整個策略已經改進,我找到了你的問題,因為我自己正在尋找快速設置指南類型的東西,因為我已經知道所有的基礎知識。 但是,您可以在這里開始使用新的9.2內容:

Postgres 9.2高可用性,負載平衡和復制

與此同時,至少有一家供應商已經推出了一些東西來幫助凡人們充分利用這一點:科學工具宣布其“雙模式”已被添加到他們的PolyglotSQL產品中。 PolyglotSQL允許應用程序對大多數SQL數據庫進行操作,並忽略方言差異。 同樣,“雙模式”功能允許您擁有一個只讀連接和另一個寫入連接,而無需重新編寫應用程序(!!),因此您可以利用Postgres同步復制,卸載主服務器所有寫入,並將負載放在您配置的任何讀者上。

我強烈建議你轉到Postgres v 9.2。

來不及回答,但這里是占地步步過程中做流復制PostgreSQL的一個偉大的視頻教程。 這真的很有幫助。

我沒有看到有關synchronous_standby_names的任何內容 - 您需要告訴它主服務器將等待哪些服務器。

http://www.postgresql.org/docs/9.1/static/warm-standby.html#SYNCHRONOUS-REPLICATION

http://www.postgresql.org/docs/9.1/static/runtime-config-replication.html#GUC-SYNCHRONOUS-STANDBY-NAMES

哦 - 如果要在從屬服務器上運行查詢,請不要忘記調整wal_level設置。

我有類似的問題, - 對於Postgres 9.3,我必須hot_standby = on我的備用數據庫服務器的postgresql.conf文件中添加hot_standby = on ,然后我的備用服務器才能接受讀取查詢/客戶端。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM