PostgreSQLでのレプリケーションスロット設定
PostgreSQLでのレプリケーションスロット設定
スレイブが増えて、レプリケーションに失敗するスレイブがでてきた。タイトルの対応を実施。
どんなエラーが
こんなエラーがスレイブがわのログにでます。
<[2020-02-26 08:45:10.864 JST] 12118[2]> FATAL: WAL ストリームからデータを受信できませんでした: ERROR: 要求さ れた WAL セグメント 0000000100000369XXXXXXXX はすでに削除されています cp: `/var/lib/pgsql/wal/0000000100000369XXXXXXXX' を stat できません: そのようなファイルやディレクトリはありません <[2020-02-26 08:45:15.872 JST] 12123[1]> LOG: プライマリのタイムライン1の 369/1B000000からでWALストリーミングを始めます <[2020-02-26 08:45:15.872 JST] 12123[2]> FATAL: WAL ストリームからデータを受信できませんでした: ERROR: 要求さ れた WAL セグメント 0000000100000369XXXXXXXX はすでに削除されています
削除されていますってwalはちゃんと存在しています。
マスタ側のpostgresql.confを編集
以下の一行を追加。
max_replication_slots = 10
存在するスレイブサーバ以上の数字を指定する。
でもってpostgresql再起動。
マニュアルどおりに設定。
なんでselectで設定できるんだ?よくわからないけど、マニュアルどおりに。
postgres=# select * from pg_create_physical_replication_slot('repl_slot'); slot_name | xlog_position -----------+--------------- repl_slot | (1 行) postgres=# select * from pg_replication_slots ; slot_name | plugin | slot_type | datoid | database | active | active_pid | xmin | catalog_xmin | restart_lsn | co nfirmed_flush_lsn -----------+--------+-----------+--------+----------+--------+------------+------+--------------+-------------+--- ------------------ repl_slot | | physical | | | f | | | | | (1 行)
スレイブの方にもちょっと設定
recovery.confに一行追加。
primary_slot_name = 'repl_slot'