PostgreSQLの運用練習の成果をコードで残していっている

RDBMSレプリケーションなど、なんとか調べてギリギリ理解して組んで、その後新規レプリケーションを組むか障害が発生したとき、また一から調べている気がするので、動く環境として記録していくことにしました。

github.com

これはなに

今のところ、PostgreSQLストリーミングレプリケーションの構築->フェイルオーバー->再レプリケーション までをひと通りMakefileにまとめたものです。

2019年10月時点では、非同期と同期のストリーミングレプリケーションを1種類づつ作っています。

コードでまとめることで良かったこと

何度も試せる

まず何度も試せるのが良いです。設定変更の検証などもすぐです。

私は今回試行錯誤した結果、2桁はレプリケーションを組んだので、レプリケーションがあまり怖くなくなりました。

設定に多くのパターンがあることがわかった

実際に手を動かすと頭に入ってくるということだと思います。知らないことが多すぎた。

レプリケーションの種類でも2種類(ストリーミング、ロジカル)、ストリーミングレプリケーションのほうだけでも、同期非同期、トランザクションにも数種類、マスタ昇格の方法、スタンバイ方法、リカバリ方法、etc...

興味があるところだけ作ってみましたが、再現可能なコードになっているので他の設定も試しやすいです。

CIが利用できる

CIを利用して、複数の環境で検証することが楽になります。

その結果、PostgreSQLのバージョンをまたいで同じ設定が使えるかどうかなどがわかります。

とりあえず、PostgreSQL12ではrecovery.confを使ったリカバリはサポートされていなさそうだということを知りました。

他の人に共有できる

再現可能なコードで残っているため他の人に共有がしやすいです。

なんなら(作っている範囲であれば)ハンズオンも簡単です。

有識者から指摘を受けられる可能性がでてくる

コードなので、設定も想定運用も全てコードで見えます。

そうするともしかしたらインターネット上の有識者から「pg_rewindを使ったほうがいい」「そのパラメーターは少し間違っている。こっちのほうがいい。なぜなら〜」などの指摘をもらえる可能性があります。

これからしたいこと

このリポジトリは完全に自分の練習の成果を残すもので、これからもいじっていく予定です。永遠のWIP。

Dockerの環境でできる範囲でですが、いろいろなパターンも試してみたいと思っています。

また、今後現場でも体験するであろうPostgreSQLのバージョンアップなどもコードで残していきたいと思います。