LoginSignup
0
0

More than 3 years have passed since last update.

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

Posted at

※ブログからの移植です。(2019/11/27投稿)

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

PG-REXとは

  • postgresqlでクラスタ構成を組むときに使う補助アプリケーションです。
  • クラスタ管理するpacemaker/corosyncに加えDB回りの補助をしてくれます。

  • pacemaker応援キャラクターが地味に豪華な件。入門動画(1話のみ)もある

  • postgresqlの同期レプリケーション使用、障害時に自動フェールオーバー

  • ※AWSとかのマネージドサービスだとサードパーティのクラスタツールを使わない選択ができます。

参考になる情報

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

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のクラスタ構成もどんとこいです(震え声)
クラウドのマネージドサービスだと考えなくてもよいのがいいところですよね。(walの仕組みとかは知っておいて損じゃないと思います。)
postgresqlのバージョンが上がり、レプリケーションの仕組みが簡素になったことで、PG-REXもシンプルになってきたようです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0