Qiitaに移植しました
https://qiita.com/myu_mx/items/95031efb67df98a018cf
業務でPG-REX(var11)を触ったので、自分用のtipsをまとめます。
エラーメッセージは記憶で書いてるので、若干異なる可能性があります。
PG-REXとは
- postgresqlでクラスタ構成を組むときに使う補助アプリケーションです。
- クラスタ管理するpacemaker/corosyncに加えDB回りの補助をしてくれます。
- pacemaker応援キャラクターが地味に豪華な件。入門動画(1話のみ)もある
- postgresqlの同期レプリケーション使用、障害時に自動フェールオーバー
- ※AWSだと、「Amazon Aurora DB クラスター(MySQL系)」ありサードパーティのクラスタツールを使わない選択もできそうです。
参考になる情報
大体この辺を見れば仕組みや使い方が分かります。
- 公式ドキュメント(v9.5だけど..)11.0の最新版はパッケージ内にあるかも?
- PG-REXで学ぶPacemaker運用の実例
- Pacemaker + PostgreSQL レプリケーション構成(PG-REX)のフェイルオーバー高速化
- PostgreSQLとPacemakerによる高可用ソリューション PG-REX 9.6 の構築
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が進むのであれば)少し時間を置く ※大体検証時でDBに動きが無いときが多いと思いますが。
- psqlにてcheckpoint;を実行
- やってもダメな時もあったのが微妙なところ…
- pgbenchを実行
- testテーブルにデータをinsertしまくる(邪道感)
- 参考PostgreSQL WALログの仕組みとタイミングを理解したい
おわりに。
これでDBのクラスタ構成もどんとこいです(震え声)
postgresqlのバージョンが上がり、レプリケーションの仕組みが簡素になったことで、PG-REXもシンプルになってきたようです。
なんだかんだでtips的なのを書くのは初めてですが、これを機に(個人ブログだし雑に)アウトプットしていきたいと思います。