PostgreSQLをpgpoolのスナップショットアイソレーションモードで構築しているが、PostgreSQLの設定変更を適用するために再起動が必要な時ってどうしたらいいんだろう。
- クラスタからノードを切り離す
- 切り離したノードの設定を変更する
- リカバリ機能を使ってノードをクラスタに戻す
だと思っていたが、リカバリ機能だとクラスタのmasterになっているノードの設定を持ってきてしまい、変更した設定が元に戻ってしまう。ような気がする。
どうしたものかと考えていたところ、pcp_detach_node
で切り離したノードは場合によってはpcp_attach_node
で戻すことができるよとドキュメント(pcp_detach_node)に記載があったので試してみることに。
手順としては、
pcp_detach_node
でノードを切り離す- 切り離したノードの設定を変更して再起動する
pcp_attach_node
でノードをクラスタに戻す
とすることで問題なく設定を変更することができた。 ただし、今回はDBを使用しているアプリケーションが全て止まっていてかつ最悪壊れても再構築でいいやという前提があってできた対応なので、今後同じ対応で解決するとは限らないことは覚えておく。