web-dev-qa-db-ja.com

Postgres 9.4、レプリケーションスロット、フェイルオーバーマスターが機能しない

このマニュアルでpostgresのマスターノードとスレーブノードをインストールしました:

マスター(10.0.0.1)で

Sudo -u postgres initdb -D /data/postgres/main

Postgresql.confを変更します。

listen_addresses = '*'
wal_level = hot_standby
max_wal_senders = 2
logging_collector = on
max_wal_senders = 5

Pg_hba.confにレプリケーションのレコードを追加します。

Host replication replica 10.0.0.2/32 md5

次にpostgresを起動します

service postgresql start

複製ユーザーを作成します。

CREATE USER replica WITH REPLICATION ENCRYPTED PASSWORD '123456';

そしてレプリケーションスロットを追加します:

SELECT pg_create_physical_replication_slot('standby_slot');

スレーブ(10.0.0.2)で

pg_basebackup -h 10.0.0.1 -U replica -D /db/postgres/main -X s -P

Postgresql.confで状態をスタンバイに変更します。

hot_standby = on

Recovery.confを追加します。

standby_mode = 'on'
primary_conninfo = 'Host=10.0.0.1 port=5432 user=replica password=123456'
primary_slot_name = 'standby_slot'
trigger_file = 'trigger'

スタンバイを開始します。

service postgresql start

したがって、レプリケーションは正常に機能しています。データベースを作成すると、マスターとスレーブの両方に表示されます。

スレーブがダウンしてから開始すると、すべての変更がそこに反映されます。それもすべて大丈夫です。

しかし、マスターがダウンしている場合は問題があります。停止したら、スレーブでトリガーファイルを作成します。次に、スレーブに別のデータベースを作成します。これが現在プライマリです。その後、マスターを開始し、ファイルを自動的に削除し、recovery.confの名前を自動的にrecovery.doneに変更します。 OK。しかし、スレーブ(新しいプライマリ)からマスター(古いプライマリ)への変更を同期する方法は?

次の4つの手順を実行する必要があることがわかりました。

マスター:

Postgresを停止します。

service postgresql stop

スレーブで:

バックアップモードをオンにします。

SELECT pg_backup_start('backup', true);

次に、新しいデータをスレーブからマスターにrsyncします。

次に、バックアップモードをオフにします。

SELECT pg_backup_stop();

最後のステップの後、メッセージが表示されます

NOTICE: WAL archiving is not enabled; you must ensure that all required WAL segments are copied through other means to complete the backup

そして、私がマスターを開始すると、ログメッセージで開始されません:

FATAL: could not locate required checkpoint record

マスターで新しいデータを取得して再びプライマリにする方法がわかりません。

したがって、将来的には、バランスとフェイルオーバーのためにpgpool2をインストールする予定ですが、このメカニズムがどのように機能するかわからないため、テストインストールは機能しませんでした。

5

言われているように、単に古いマスターに戻ることはできません here

スタンバイへのフェイルオーバーが発生すると、稼働中のサーバーは1つだけになります。これは縮退状態と呼ばれます。以前のスタンバイは現在プライマリですが、以前のプライマリはダウンしており、ダウンしたままになる可能性があります。通常の操作に戻るには、スタンバイサーバーを、元のプライマリシステムが起動したとき、または3番目の、場合によっては新しいシステムに再作成する必要があります。

このためには、recovery.conf古いマスター。これは、現在のものとほとんど同じである必要があります。接続のみが他の場所を指している必要があります。

4
dezso