はじめに
前回までの記事で構築までの一連の手順を記載しました。あとは起動するだけですが、サービスの起動の順番を間違えると正常にサービス起動が出来ません。今回構築したZabbixはすべて手動起動を想定しているので、構成を理解していない人が触ると、トラブルにつながることでしょう。
本記事で紹介したZabbixサーバの構成での起動手順を紹介したいと思います。起動した後は、正常に停止する方法も紹介したいと思います。
※本手順にはどのサーバで実施するか記載していませんが、本番稼働用の手順書を作る場合は記載しておくと良いでしょう。
構成図

ホスト名: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
起動手順
起動の順序は以下の通りです。
1. DBの起動
2. Zabbix関連サービスの起動
3. Keepalivedサービスの起動
それぞれのサービス起動手順を確認します。それぞれのサービス起動時に正常に起動していないと、後続の起動に影響があるので、その都度サービスの起動状況の確認も行います。
DBの起動
DBを起動する場合、Pacemakerのサービスを起動します。直接DBの起動させないよう注意します。
レプリケーションされているか不明な場合、主系からコピーしてから起動させます。本手順では主系から副系にコピーする手順から記載しています。
主系DBの起動確認
主系DBを手動で起動します。当たり前ですが、この時点で起動しなければ、Pacemakerで起動しても失敗します。失敗時に切り分けしやすくするためにも、事前に確認することをおすすめします。
# su - postgres
$ pg_ctl start
done
server started
副系DBへのデータコピー
次に副系にDBをコピーします。すでに同期されている場合は不要ですが、障害発生時から復旧する場合などにはこの手順が必要となります。なお、予め$PGDATAのファイルは削除している必要があるので、実施前に削除しておきましょう。rootユーザで実行しないように注意してください。$PGDATAの所有者がrootになっている場合、DBの起動に失敗します。
# su - postgres
$ pg_basebackup -D /var/lib/pgsql/13/data -h 172.16.1.104
PacemakerでDBを起動させるため、問題なく副系がコピーされた後に、主系のDBを停止させておきます。
$ pg_ctl stop
waiting for server to shut down.... done
server stopped
なお、このときに副系DBの起動確認は行いません。Pacemakerで起動させてVIPを持たせるため、あくまでも手動で実施するのは「主系のDB起動確認」と「副系へのデータコピー」にとどめます。
PacemakerによるDBの起動
DBのコピーが完了したあと、PacemakerでDBを起動させます。先に起動させた方が主系となるため、起動の順番は運用方針に従って起動させてください。
$ exit
logout
# pcs cluster start
Starting Cluster...
DBの正常性確認
主系を起動した後、副系を起動する前に正常性確認をしておきましょう。主系DBが起動していない状況で副系のみが問題なく起動した場合、主副が逆になります。ポリシーに合わせるために主副を入れ替える必要が出た場合は、余計な作業が出来てしまうので、まずは主系のみで問題なく起動しているかを確認します。
# pcs status --full
Cluster name: zabbixdbCluster
Status of pacemakerd: 'Pacemaker is running' (last updated 2024-06-03 14:21:10 +09:00)
Cluster Summary:
* Stack: corosync
* Current DC: zabbix-db01 (1) (version 2.1.5-9.el9_2-a3f44794f94) - partition WITHOUT quorum
* Last updated: Mon Jun 3 14:21:11 2024
* Last change: Mon Jun 3 07:16:14 2024 by root via crm_attribute on zabbix-db01
* 2 nodes configured
* 5 resource instances configured
Node List:
* Node zabbix-db01 (1): online, feature set 3.16.2
* Node zabbix-db02 (2): OFFLINE
Full List of Resources:
* vip-master (ocf:heartbeat:IPaddr2): Started zabbix-db01
* Clone Set: pingChk-clone [pingChk]:
* pingChk (ocf:pacemaker:ping): Started zabbix-db01
* pingChk (ocf:pacemaker:ping): Stopped
* Clone Set: prmPostgresql-clone [prmPostgresql] (promotable):
* prmPostgresql (ocf:heartbeat:pgsql): Promoted zabbix-db01
* prmPostgresql (ocf:heartbeat:pgsql): Stopped
Node Attributes:
* Node: zabbix-db01 (1):
* master-prmPostgresql : 1000
* pingattr : 1
* prmPostgresql-data-status : LATEST
* prmPostgresql-master-baseline : 00000000480000A0
* prmPostgresql-status : PRI
Migration Summary:
Tickets:
PCSD Status:
zabbix-db01: Online
zabbix-db02: Online
確認箇所は「Node Attributes」の部分で、「-INFINITY」や「DISCONNECT」値が出てしまっている場合は正常に稼働していない状況です。
問題なく起動できていることを確認したら、副系も同様に起動します。両方とも起動できた場合、以下のような結果になります。
# pcs status --full
Cluster name: zabbixdbCluster
Status of pacemakerd: 'Pacemaker is running' (last updated 2024-06-03 14:39:00 +09:00)
Cluster Summary:
* Stack: corosync
* Current DC: zabbix-db01 (1) (version 2.1.5-9.el9_2-a3f44794f94) - partition with quorum
* Last updated: Mon Jun 3 14:39:00 2024
* Last change: Mon Jun 3 14:38:53 2024 by root via crm_attribute on zabbix-db01
* 2 nodes configured
* 5 resource instances configured
Node List:
* Node zabbix-db01 (1): online, feature set 3.16.2
* Node zabbix-db02 (2): online, feature set 3.16.2
Full List of Resources:
* vip-master (ocf:heartbeat:IPaddr2): Started zabbix-db01
* Clone Set: pingChk-clone [pingChk]:
* pingChk (ocf:pacemaker:ping): Started zabbix-db01
* pingChk (ocf:pacemaker:ping): Started zabbix-db02
* Clone Set: prmPostgresql-clone [prmPostgresql] (promotable):
* prmPostgresql (ocf:heartbeat:pgsql): Promoted zabbix-db01
* prmPostgresql (ocf:heartbeat:pgsql): Unpromoted zabbix-db02
Node Attributes:
* Node: zabbix-db01 (1):
* master-prmPostgresql : 1000
* pingattr : 1
* prmPostgresql-data-status : LATEST
* prmPostgresql-master-baseline : 000000004C000060
* prmPostgresql-status : PRI
* Node: zabbix-db02 (2):
* master-prmPostgresql : 100
* pingattr : 1
* prmPostgresql-data-status : STREAMING|SYNC
* prmPostgresql-status : HS:sync
Migration Summary:
Tickets:
PCSD Status:
zabbix-db01: Online
zabbix-db02: Online
Daemon Status:
corosync: active/disabled
pacemaker: active/disabled
pcsd: active/enabled
実は本記事を書くために検証環境のDBを起動させた際も、エラーが出て起動できなかったため、ログを追いました。PacemakerかPostgreSQLのログのいずれかにヒントがあると思うので、エラーの際はログを追って解決してみてください。
IP確認
VIPが想定通りに付与されているか確認してみましょう。主系に「172.16.1.103」が付与されています。
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:18:75:9d brd ff:ff:ff:ff:ff:ff
altname enp11s0
inet 172.16.1.104/24 brd 172.16.1.255 scope global noprefixroute ens192
valid_lft forever preferred_lft forever
inet 172.16.1.103/24 brd 172.16.1.255 scope global secondary ens192
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe18:759d/64 scope link noprefixroute
valid_lft forever preferred_lft forever
Zabbix関連サービスの起動
Zabbix関連と書いたのは、Zabbixサーバ以外にもhttpd、php-fpmといったサービスの起動も必要です。
正直DB起動まで問題なくできれば、これ以降のZabbix関連のサービス確認は割と容易にできるかと思います。
Zabbixサーバ、httpd、php-fpm、Zabbixエージェントサービスの起動
以下のコマンドでサービスを起動します。
# systemctl start zabbix-server.service zabbix-agent.service httpd.service php-fpm.service
各サービスの状態確認
以下のコマンドを実行して、アクティブになっていることを確認します。以下はzabbix-server.serviceの確認です。
# systemctl status zabbix-server.service
● zabbix-server.service - Zabbix Server
Loaded: loaded (/usr/lib/systemd/system/zabbix-server.service; disabled; preset: disabled)
Active: active (running) since Tue 2024-06-04 09:56:28 JST; 6min ago
Process: 2887 ExecStart=/usr/sbin/zabbix_server -c $CONFFILE (code=exited, status=0/SUCCESS)
Main PID: 2900 (zabbix_server)
Tasks: 102 (limit: 11124)
Memory: 107.2M
CPU: 1.233s
CGroup: /system.slice/zabbix-server.service
tq2900 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
tq2916 "/usr/sbin/zabbix_server: ha manager"
…
問題なく主系を起動出来たら、副系も起動します。
Zabbix HA の状態確認
先に起動した方がHAのActiveになっています。以下のコマンドで確認します。ap01がactiveになっていることを確認できます。
# zabbix_server -R ha_status
Failover delay: 60 seconds
Cluster status:
# ID Name Address Status Last Access
1. clmdf5vzx00012y0eomes62y2 zabbix-ap01 172.16.1.101:10051 active 0s
2. clmdg2uxt0001lp0fuu3da1zm zabbix-ap02 172.16.1.102:10051 standby 1s
Keepalivedの起動
最後にKeepalivedサービスを起動します。こちらも起動に順に応じて主副が決定されます。
以下のコマンドで起動します。
# systemctl start keepalived.service
以下のコマンドで起動状態を確認し、アクティブになっているか確認します。
# systemctl status keepalived.service
● keepalived.service - LVS and VRRP High Availability Monitor
Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; preset: disabled)
Active: active (running) since Tue 2024-06-04 10:04:23 JST; 14s ago
Main PID: 3427 (keepalived)
Tasks: 2 (limit: 11124)
Memory: 6.9M
CPU: 9ms
CGroup: /system.slice/keepalived.service
tq3427 /usr/sbin/keepalived --dont-fork -D
mq3428 /usr/sbin/keepalived --dont-fork -D
IPも確認しておきましょう。以下は主系で実行した結果です。「172.16.1.100」が付与されています。
# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:0c:29:47:7e:f6 brd ff:ff:ff:ff:ff:ff
altname enp11s0
inet 172.16.1.101/24 brd 172.16.1.255 scope global noprefixroute ens192
valid_lft forever preferred_lft forever
inet 172.16.1.100/32 scope global ens192
valid_lft forever preferred_lft forever
inet6 fe80::20c:29ff:fe47:7ef6/64 scope link noprefixroute
valid_lft forever preferred_lft forever
問題なく起動出来たら、副系でも起動します。
これで起動は完了です。ブラウザでZabbixのGUI画面にアクセスできると思います。
停止手順
サービスを停止する手順は以下の通りです。
1. Keepalivedの停止
2. Zabbix関連サービスの停止
3. DBの停止
停止は起動とは逆の順序で、副系を停止後に主系も停止します。当然と言えばそれまでですが、手動起動のシステムを構築した場合は明確にしておきましょう。運用担当者が停止手順を間違えて、起動時にトラブルになることは避けたいところです。
Keepalivedの停止
以下のコマンドで停止します。※副系から先に停止します。
# systemctl stop keepalived.service
起動時と同じコマンドで停止できているか確認します。
# systemctl status keepalived.service
○ keepalived.service - LVS and VRRP High Availability Monitor
Loaded: loaded (/usr/lib/systemd/system/keepalived.service; disabled; preset: disabled)
Active: inactive (dead)
Zabbix関連サービスの停止
以下のコマンドで停止します。副系を停止後、主系を停止します。
# systemctl stop zabbix-server.service zabbix-agent.service httpd.service php-fpm.service
同様に、サービスの状態を確認します。
# systemctl status zabbix-server.service
○ zabbix-server.service - Zabbix Server
Loaded: loaded (/usr/lib/systemd/system/zabbix-server.service; disabled; preset: disabled)
Active: inactive (dead)
DBの停止
副系のDBを停止します。以下のコマンドを実行します。
# pcs cluster stop
Stopping Cluster (pacemaker)...
Stopping Cluster (corosync)...
停止後、ステータスを確認します。
# pcs cluster status
Error: cluster is not currently running on this node
問題なく停止できた後、主系のDBを停止させます。
主系停止時は「–force」オプションを付与します。
# pcs cluster stop --force
Stopping Cluster (pacemaker)...
Stopping Cluster (corosync)...
以上が起動から停止までの手順です。
同じ構成で構築されていることは少ないかもしれませんが、部分的に活用できる場面があれば幸いです。

