【Zabbix】Zabbixサーバの構築_03_Pacemakerのインストール

PostgreSQL

はじめに

前回はPostgreSQLを設定しました。DBを起動すればストーミングレプリケーションによる冗長構成が出来ていますが、障害発生時に自動で切り替わりません。ZabbixのDBがダウンすることは監視サーバの停止を意味するので、許容される可能性は少ないでしょう。片方がダウンしてもサービスを継続できるように、PacemakerでVIPを持たせます。勝手な思いで恐縮ですが、個人的にPacamakerでPostgreSQLを起動させるために四苦八苦した経験があります。特に後半に自身がはまったところを書いたので、読んでいただいた方に何かしらのヒントをお伝えられれば幸いです。

構成図

ホスト名:zabbix-ap01
IP:172.16.1.101
構成:AlmaLinux 9、Zabbix6.0

ホスト名:zabbix-ap02
IP:172.16.1.102
構成:AlmaLinux 9、Zabbix6.0

ホスト名:zabbix-db01
IP:172.16.1.104
構成:AlmaLinux 9、PostgreSQL 13

ホスト名:zabbix-db02
IP:172.16.1.105
構成:AlmaLinux 9、PostgreSQL 13

パッケージインストール

実施するサーバ:zabbix-db01、zabbix-db02

以下のコマンドでリポジトリを確認します。

以下のコマンドでpacemaker をインストールします。

インストールが無事に完了した後、ログ設定を先に済ませておきましょう。ログは予め作成していたディレクトリを指定しておきます。

クラスター用のユーザを作成します。

pcsサービスを起動し、ついでに自動起動設定も行います。

注意

AlmaLinuxでインストールする場合はこれで良いですが、RHELでPacemakerを使う場合は、以下のコマンドになります。ha用のライセンス購入も必要になりますので、導入する場合は事前に見積もっておく必要があります。

Pacemaker設定

実施するサーバ:zabbix-db01

ここから先は片方のDBでのみ実施していきます。まず、Pacemaker用のホストを認証します。このとき、先ほど作成したクラスター用のユーザで認証を行います。

クラスター作成

認証完了後、以下のコマンドでクラスターをスタートさせます。zabbixdbClusterという名前で起動させていますが、名前は自由です。また、名前解決が出来る場合はaddrを省略できるらしいですが、私は入れてます。何回か検証してうまくいった結果を本記事としていますので、ご了承ください。

pcsコマンドを用いた設定

ここからはpcsコマンドによる設定を入れていきます。

最初はPacemakerの初期設定みたいなものを入れていきます。

次に、CIB(クラスター情報ベース)というファイルに設定を投入していきます。このCIBにPacamaker設定を入れ込み、最後にCIBをプッシュして反映させるイメージです。今回は、cluster-confという名前のファイルに入れることにしています。

以後のコマンドには「pcs -f cluster-conf」がつきます。先ほどの説明の通り、「cluster-conf」に書き込んでいることを示しています。

まず、以下コマンドを投入します。
このコマンドはPacemakerのノードと172.16.1.1との疎通性を監視するための設定を入れています。172.16.1.1は今回構築するDBのゲートウェイです。つまり、DBとゲートウェイ間の疎通性を見ることになります。

vip用の設定をCIBに投入します。ip=”172.16.1.103″とあるように、VIPにしたいIPはここで指定します。

PostgreSQL、すなわちDB用の設定を入れます。ところどころPostgreSQLの設定値があると思いますので、環境に応じて変更してください。

作成したリソースの制約設定を投入します。

CIB情報をプッシュします。プッシュすることで設定が反映されます。

Pacemakerの起動とDBについて

次のコマンドでクラスターの状態を確認できます。–fullをつけると、詳細情報を取得できます。

上記はdb02が主系としてDBが起動していて、db01はストーミングレプリケーションで同期がとれていることを示しています。db02がなぜ主系?という疑問があるかと思いますが、今回検証した際の結果をあえてそのまま載せています。
どうやら起動のタイミングを誤ったか何かでPacemakerの判定がずれてしまったようです。気を付けていてもPacemakerの中で主副がずれることがあり、実際に検証でもそうなってしまったので、この結果を載せることにしました。

こうなった場合は、db02を手動で停止させて入れ替えてあげましょう。入れ替える場合はDBを停止させて、DBを再度主系からコピーするお決まりの手順を実施します。このあたりの手順もどこかで紹介できればと思います。(知っている人にとっては簡単な手順のせいか、ナレッジは少ない気がします)

この状態で主系のIPを確認すると、172.16.1.103のIPを持っていることを確認できます。これで、無事にVIPを持たせることができました。是非片方を停止させて、VIPが移るところを観察してみてください。

その他

あとは上記で説明されていない部分について、補足しておきます。

①DBは手動で起動しない

お気づきかもしれませんが、pg_ctl コマンドで起動していないのに、いつの間にかDBが起動していましたね。PacemakerでPostgreSQLを管理する場合、Pacemakerの起動と同時にDB起動をPacamakerが実行されます。この事実は構築経験者にとっては当たり前のような部分はあるものの、初めて触る人にとっては最初に知っておきたいことかと思います。当り前のこととして扱われているようで、ネット上の情報ではあまり説明してくれないです。

②postgresql.auto.confにご用心

postgresql.auto.confって何よ?という方は別途調べてください。
PostgreSQLの構築・検証を初めてする場合、Pacemakerの前にPostgreSQL自体の構築や検証をするかと思います。そうすると、「PostgreSQL ストーミングレプリケーション」で構築方法を調べますね。それは別に問題ないです(理解が足りない部分は、是非とも検証してください!)ただ、主系を構築した後、副系はpg_basebackupコマンドで複製してそのままレプリケーションに組み込んじゃう訳ですが、よくこんなコマンドが紹介されています。

何が悪いかというと、この「-R」です。これがpostgresql.auto.confに設定情報を書き込んでくれるわけです。
例としてはこんな感じです。

このおかげでDBを手動起動させた際には問題なくレプリケーションしてくれますが、このpostgresql.auto.confがある状態だと、PacemakerのDB起動時に同期されずに失敗します。「PostgreSQLを手動起動時は成功するのに…なぜ」という感じで、原因が分からず苦労しました。
正解はPacemakerで起動させた際に、DBに自動作成されるrecobery.confにあります。以下の通りになります。上との違いは、「host=172.16.1.XXX」の部分です。Pacemakerで起動するときは、VIPを指定するんですね。結論としては、「-R」オプションはつけないことが正解で、Pacemaker起動時に自動作成されることを信じてあげる必要があります。

このことに気が付かなかったせいでけっこうはまりました。おかげでPacemakerのログもずいぶん読むことになって理解を深められましたが…気が付くまで生きた心地がしなかったですね。同じはまり方をしている方の手助けになれば幸いです。

長くなりましたが、次回はZabbixの設定です。


タイトルとURLをコピーしました