pcp_detach_nodeとpcp_attach_node

PostgreSQLをpgpoolのスナップショットアイソレーションモードで構築しているが、PostgreSQLの設定変更を適用するために再起動が必要な時ってどうしたらいいんだろう。

  1. クラスタからノードを切り離す
  2. 切り離したノードの設定を変更する
  3. リカバリ機能を使ってノードをクラスタに戻す

だと思っていたが、リカバリ機能だとクラスタのmasterになっているノードの設定を持ってきてしまい、変更した設定が元に戻ってしまう。ような気がする。

どうしたものかと考えていたところ、pcp_detach_nodeで切り離したノードは場合によってはpcp_attach_nodeで戻すことができるよとドキュメント(pcp_detach_node)に記載があったので試してみることに。 手順としては、

  1. pcp_detach_nodeでノードを切り離す
  2. 切り離したノードの設定を変更して再起動する
  3. pcp_attach_nodeでノードをクラスタに戻す

とすることで問題なく設定を変更することができた。 ただし、今回はDBを使用しているアプリケーションが全て止まっていてかつ最悪壊れても再構築でいいやという前提があってできた対応なので、今後同じ対応で解決するとは限らないことは覚えておく。

links

social