PG-REXが上手く起動しないときの解決策

業務でPG-REX(var11)を触ったので、自分用のtipsをまとめます。
エラーメッセージは記憶で書いてるので、若干異なる可能性があります。

PG-REXとは

  • postgresqlでクラスタ構成を組むときに使う補助アプリケーションです。
  • クラスタ管理するpacemaker/corosyncに加えDB回りの補助をしてくれます。
  • postgresqlの同期レプリケーション使用、障害時に自動フェールオーバー
  • ※AWSだと、「Amazon Aurora DB クラスター(MySQL系)」ありサードパーティのクラスタツールを使わない選択もできそうです。

参考になる情報

大体この辺を見れば仕組みや使い方が分かります。

PG-REXが起動しない!

Step1:masterが起動しない

正常パターン ※root権限での実行が必要です。

# pg-rex_master_start root@192.168.2.2's password: パスワードが入力されました 1. Pacemaker および Corosync が停止していることを確認 ...[OK] 2. 稼働中の Master が存在していないことを確認 ...[OK] 3. 起動禁止フラグの存在を確認 ...[OK] 4. /var/lib/pacemaker/cib 配下の cib ファイルを削除 ...[OK] 5. Pacemaker 起動 ...[OK] 6. crm ファイルの反映 ...[OK] 7. Master の起動確認 ...[OK] ノード(pgrex01)が Master として起動しました
# crm_mon -fA にてmasterサーバがonlineと表示されること

slaveとの接続は大丈夫か?

1. Pacemaker および Corosync が停止していることを確認 ...[OK] 2. 稼働中の Master が存在していないことを確認 ...[NG]相手ノードのSSH接続に失敗
  • rootアカウントで直接SSH接続ができるか?
  • 設定ファイル「IPアドレスやホスト名回り」を再確認
    • インポートするcrmファイル
    • /etc/corosync/corosync.confなど

postgresqlのみで起動するか?

7. Master の起動確認 ...[NG]600秒経ちましたがPostgreSQL が起動していません

待った挙句失敗という悲しいパターンです。

大体postgresqlを起動すると失敗する

# su - postgresql postgres$ pg_ctl start サーバの起動完了を待っています.... : サーバ起動失敗

上記のよう起動失敗となります。PG-REXの問題ではなくpostgresqlの問題となります。
postgresql.logなどを確認しましょう。
※初期設定では、PGDATA/pg_log/以下に「postgresql-%Y-%m-%d_%H%M%S.log」のファイル名でログファイルが生成されます。

下記のようになれば、解決できる可能性は高いです。

# su - postgresql postgres$ pg_ctl start サーバの起動完了を待っています.... :(略) 完了 サーバ起動完了 postgres$ pg_ctl stop サーバ停止処理の完了を待っています....完了 サーバは停止しました

Step2:slaveが起動しない

なんだかんだmasterは上手く起動しやすいです。はまるのがslaveです。

postgresqlのみで起動するか?

これはmasterと同じです。

masterのwalが進んでいるか?

4. /var/lib/pacemaker/cib 配下の cib ファイルを削除 ...[NG]slaveのwalアーカイビングがmasterより進んでいます (receive-walが...だったような気もする...)

最初これでかなりはまったのですが、結論を言うとmasterのDBに動きが無いとこうなる可能性があります。
余談ですがDBバックアップのbarmanもDBに動きが無いと上手くいかないケースがあります

対策:DBを進める(walファイルを作成)

おわりに。

これでDBのクラスタ構成もどんとこいです(震え声)
postgresqlのバージョンが上がり、レプリケーションの仕組みが簡素になったことで、PG-REXもシンプルになってきたようです。
なんだかんだでtips的なのを書くのは初めてですが、これを機に(個人ブログだし雑に)アウトプットしていきたいと思います。