RDBMSのレプリケーションなど、なんとか調べてギリギリ理解して組んで、その後新規レプリケーションを組むか障害が発生したとき、また一から調べている気がするので、動く環境として記録していくことにしました。
これはなに
今のところ、PostgreSQLの ストリーミングレプリケーションの構築->フェイルオーバー->再レプリケーション
までをひと通りMakefileにまとめたものです。
2019年10月時点では、非同期と同期のストリーミングレプリケーションを1種類づつ作っています。
コードでまとめることで良かったこと
何度も試せる
まず何度も試せるのが良いです。設定変更の検証などもすぐです。
私は今回試行錯誤した結果、2桁はレプリケーションを組んだので、レプリケーションがあまり怖くなくなりました。
設定に多くのパターンがあることがわかった
実際に手を動かすと頭に入ってくるということだと思います。知らないことが多すぎた。
レプリケーションの種類でも2種類(ストリーミング、ロジカル)、ストリーミングレプリケーションのほうだけでも、同期非同期、トランザクションにも数種類、マスタ昇格の方法、スタンバイ方法、リカバリ方法、etc...
興味があるところだけ作ってみましたが、再現可能なコードになっているので他の設定も試しやすいです。
CIが利用できる
CIを利用して、複数の環境で検証することが楽になります。
その結果、PostgreSQLのバージョンをまたいで同じ設定が使えるかどうかなどがわかります。
`FATAL: using recovery command file "recovery.conf" is not supported`
— k1LoW (@k1LoW) 2019年10月12日
なるほどPostgreSQL12
とりあえず、PostgreSQL12ではrecovery.confを使ったリカバリはサポートされていなさそうだということを知りました。
他の人に共有できる
再現可能なコードで残っているため他の人に共有がしやすいです。
なんなら(作っている範囲であれば)ハンズオンも簡単です。
有識者から指摘を受けられる可能性がでてくる
コードなので、設定も想定運用も全てコードで見えます。
そうするともしかしたらインターネット上の有識者から「pg_rewindを使ったほうがいい」「そのパラメーターは少し間違っている。こっちのほうがいい。なぜなら〜」などの指摘をもらえる可能性があります。
これからしたいこと
このリポジトリは完全に自分の練習の成果を残すもので、これからもいじっていく予定です。永遠のWIP。
Dockerの環境でできる範囲でですが、いろいろなパターンも試してみたいと思っています。
また、今後現場でも体験するであろうPostgreSQLのバージョンアップなどもコードで残していきたいと思います。