PostgreSQLを論理レプリケーションにした

PostgreSQLの冗長構成をPgpool-IIのアイソレーションスナップショットで実装していたが、データに不整合が生じたようで、一部のクエリ(UPDATEなど)が失敗するようになってしまった。

不整合が生じた時の対処として、replicaのノードをrecoveryしてしまえば解消するだろうと軽く考えていたが、上手くいかなかった。 recoveryは問題なく成功したが、recovery後も失敗するクエリは変わらず失敗してしまっていた。 テーブルごとの行数を比較する限りは問題なさそうなのだが...

構築・運用の労力と得られる恩恵がいまひとつ釣り合っていないように感じてしまい、もとの要件であるfailoverのためにPgpool-IIを維持するモチベーションが低下してしまったので、要件を緩和(failoverでなく手動切り替えを許容)することにした。

メジャーバージョンの差異には対応できるようにしたいので、PostgreSQLの論理レプリケーションを試す。 また、これまでDBサーバは独立して構築していたが、PostgreSQLの構成変更に伴い各Appサーバへ統合することにした。

公式ドキュメントの第31章 論理レプリケーションを参考に、PublisherとSubscriberの設定をするだけで案外さっくりできた。 障害時には名前解決の変更により切り替えを行う想定。 切り替え含め雑に試した範囲では問題なさそうなので、何かしら新たな問題が生じるまで論理レプリケーションで様子見する。

links

social