新規のサーバでやること
・一旦データベース初期設定して、整えとく。停止状態。
・データは消しちゃう(rm -fr /var/lib/postgresql/14/main みたいな)
・元サーバのpgtune.confなど、パラメータをある程度一致させとく(コネクション数とか元と違うと蹴られたり)
・もちろんpg_hba.confなどセキュリティ設定は済ませておく
・とりあえずpsqlコマンドでreplication_userで繋がるか事前にテスト
・pg_basebackupで一気に持ってくる
・起動
・レプリケーションできてることを確認する
・(元のサーバに新規書き込みするのやめて、転送しきったら元DB止める)
・promoteする(昇格してこっちが本体になる)
・新規DBサーバへの読み書きを開始する
pg_basebackupはこんな感じ。
# sudo -u postgres pg_basebackup -h xxx.xxx.xxx.xxx -p 5432 -D /var/lib/postgresql/14/main/ -U replication_user -R -P --checkpoint=fast -X stream -v && pg_ctlcluster 14 main start
xxx.xxx.xxx.xxxは元サーバのIPアドレス。ポートも指定してるけど、5432ならいらないかな。
rootになって、pg_basebackupから、完了後のstartまで一気にやる。これはUbuntu / Debian系ね。
@AureoleArk ダウンタイムゼロまで持っていくと格好いいよね! 切り替わったことだれも気付かないw
@AureoleArk Mastodonはドキュメントに案内があってpgbouncer使ってる人が多いんだけど、
こいつもpauseして接続先切り替えてresumeするようにすると具合がいい。
Mastodonのプロセスからコネクション維持されててちょっと応答が遅延したぐらいにしか見えないので、擬似的にダウンタイムゼロにみえる。
@noellabo@fedibird.com なるほどすぎる
@noellabo@fedibird.com 動かしたままpg_basebackupして、ストリーミングレプリケーションを構築しながらpgpool-IIを使うなどがよさそう