本ページは広告が含まれています。気になる広告をクリック頂けますと、サーバ運営費になります(^^
手順
プライマリを停止
スタンバイをプライマリーに昇格
コマンド
プライマリを停止
#systemctl stop postgresql-15
スタンバイのアクセス制御変更
postgresql.auto.conf の primary_conninfo をコメントアウトしないといけないらしいが、手書きで変更するなと書いてある
# cat postgresql.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.
primary_conninfo = 'user=replication password=testpass channel_binding=prefer host=192.168.0.1 port=5481 sslmode=prefer sslcompression=0 sslsni=1 ssl_min_protocol_version=TLSv1.2 gssencmode=prefer krbsrvname=postgres target_session_attrs=any'
スタンバイを再起動
systemctl restart postgresql-15
スタンバイをプライマリに昇格
/usr/psql-15/bin/pg_ctl -D /var/lib/postgresql/15/main promote
動作確認 新プライマリにデータが書き込みできるか?
ストリーミングレプリケーション稼働状況確認
ログを確認してみます
スタンバイサーバ、WALの書込みが完了しているのが分かります。
2023-10-01 16:13:48.798 JST [560939] LOG: リカバリ再開ポイントは22/25218918です
2023-10-01 16:13:48.798 JST [560939] 詳細: 最後に完了したトランザクションはログ時刻 2023-10-01 16:10:37.722404+09 の
ものです
pg_admn でマスターサーバへデータ書き込み
wal_writer は200msごとに実行されているはず
#wal_writer_delay = 200ms # 1-10000 milliseconds
検証
マスターサーバに書き込み
6:18:29 に書き込み
6:18:53 チェックポイントWAL書き込み
2023-10-02 06:18:29.087 JST [1058118] postgres@jp_bak1 文: INSERT INTO dtest.tm_err (
no, log_name, dt_write, note) VALUES (
'2'::integer, 'test2'::text, 'now()'::timestamp without time zone, 'テスト書き込み2'::text)
returning no;
2023-10-02 06:18:53.250 JST [759604] LOG: チェックポイント開始: time
2023-10-02 06:18:53.468 JST [759604] LOG: チェックポイント完了: 3個のバッファを出力 (0.0%); 0個のWALファイルを追加、0個を削除、0個を再利用; 書き出し=0.216秒, 同期=0.001秒, 全体=0.219秒; 同期したファイル=3, 最長=0.001秒,
平均=0.001秒; 距離=0 kB, 予測=794 kB
スタンバイサーバ
6:19:06 WAL読込完了
2023-10-02 06:19:06.202 JST [560939] LOG: リスタートポイント開始: time
2023-10-02 06:19:06.912 JST [560939] LOG: リスタートポイント完了: 8個のバッファを出力 (0.0%); 0個のWALファイルを追加
、0個を削除、0個を再利用; 書き出し=0.703秒, 同期=0.003秒, 全体=0.711秒; 同期したファイル=5, 最長=0.003秒, 平均=0.001秒; 距離=0 kB, 予測=794 kB
2023-10-02 06:19:06.912 JST [560939] LOG: リカバリ再開ポイントは22/25218E08です
2023-10-02 06:19:06.912 JST [560939] 詳細: 最後に完了したトランザクションはログ時刻 2023-10-02 06:18:47.076607+09 の
ものです
およそ13秒でスタンバイサーバに反映されているのが分かります。
スタンバイサーバには書き込みができない事を確認
復旧試験
スタンバイサーバにて
Debianでは
# /usr/lib/postgresql/15/bin/pg_ctl -D /var/lib/postgresql/15/main/ promote
pg_ctl: rootでは実行できません
サーバープロセスの所有者となる(非特権)ユーザーとして("su"などを使用して)
ログインしてください。
# su postgres
$ /usr/lib/postgresql/15/bin/pg_ctl -D /var/lib/postgresql/15/main/ promote
サーバーの昇格を待っています....完了
サーバーは昇格しました
※postgresユーザで実行しないとできなかった。
スタンバイサーバのログ
2023-10-02 06:28:39.523 JST [560941] LOG: 昇格要求を受信しました
2023-10-02 06:28:39.523 JST [560942] FATAL: 管理者コマンドにより WAL 受信プロセスを終了しています
2023-10-02 06:28:39.524 JST [560941] LOG: 22/25218EF0のレコードの後方リンクE33B91BC/EF92BCEFが不正です
2023-10-02 06:28:39.525 JST [560941] LOG: REDOが22/25218EB8で終了しました、システム使用状況: CPU: ユーザー: 7.01秒、
システム: 9.44秒、経過時間: 1428990.42秒
2023-10-02 06:28:39.525 JST [560941] LOG: 最後に完了したトランザクションのログ時刻は2023-10-02 06:18:47.076607+09でした
2023-10-02 06:28:39.536 JST [560941] LOG: 新しいタイムラインIDを選択: 2
2023-10-02 06:28:39.600 JST [560941] LOG: アーカイブリカバリが完了しました
2023-10-02 06:28:39.604 JST [560939] LOG: チェックポイント開始: force
2023-10-02 06:28:39.609 JST [560937] LOG: データベースシステムの接続受け付け準備が整いました
2023-10-02 06:28:39.715 JST [560939] LOG: チェックポイント完了: 3個のバッファを出力 (0.0%); 0個のWALファイルを追加、0個を削除、0個を再利用; 書き出し=0.104秒, 同期=0.002秒, 全体=0.111秒; 同期したファイル=3, 最長=0.002秒, 平均=0.001秒;
距離=0 kB, 予測=715 kB
昇格したスタンバイサーバにデータ書き込みできる事を確認