mysqldを停止した後のzabbixのプロセスについて

お世話になります。ご質問お願いいたします。

下記環境にてzabbix冗長構成を構築中です。

Apache 2.4.6
mysql 8.0
zabbix 4.4
CentOS 7.7
DRBD version: 9.0.16-1
PCS 0.9.167
Corosync 2.4.3
Pacemaker 1.1.20-5.el7_7.1

apache, mysql 8.0, zabbix 4.4, DRBD については、Pacemakerでリソース制御しております。

今回お聞きしたい事としてはターミナルより systemctl stop zabbix-server した場合、zabbixは正常に停止しますが
mysql 8.0が先に停止した場合、zabbixが正常に停止せずPacemakerでリソースのフェイルオーバーができません。

(障害のケースとしてPacemakerでリソース制御をしている環境下においてmysql 8.0が停止するケースも想定しているため)

ただし、他のミドルウェア(zabbix or apache)を停止した場合は全てのミドルウェアが正常に停止し、リソースのフェイルオーバーが可能です。

zabbixの環境が正常に稼働している状態で、mysql 8.0単体をsystemctlより停止した場合、下記の様に複数のプロセスがterminatedになりzabbixが正常に停止できず、Pacemaker上でリソース制御が不可能となっております。
----------------------------------------------------------------------------------
zabbix 115949 1 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
zabbix 115950 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: configuration syncer [connecting to the database]
zabbix 115951 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: housekeeper [startup idle for 30 minutes]
zabbix 115952 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: timer #1 [updated 0 hosts, suppressed 0 events in 0.004509 sec, processing maintenances]
zabbix 115953 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: http poller #1 [got 0 values in 0.000993 sec, getting values]
zabbix 115954 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: discoverer #1 [processed 0 rules in 0.000872 sec, performing discovery]
zabbix 115955 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: history syncer #1 [processed 0 values, 0 triggers in 0.000036 sec, syncing history]
zabbix 115956 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: history syncer #2 [processed 0 values, 0 triggers in 0.000077 sec, syncing history]
zabbix 115957 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: history syncer #3 [processed 0 values, 0 triggers in 0.000039 sec, syncing history]
zabbix 115958 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: history syncer #4 [processed 0 values, 0 triggers in 0.000037 sec, syncing history]
zabbix 115959 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: escalator #1 [processed 0 escalations in 0.001296 sec, processing escalations]
zabbix 115960 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: proxy poller #1 [terminated]
zabbix 115961 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: self-monitoring #1 [terminated]
zabbix 115962 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: task manager [processing tasks]
zabbix 115963 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: poller #1 [terminated]
zabbix 115964 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: poller #2 [terminated]
zabbix 115965 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: poller #3 [terminated]
zabbix 115966 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: poller #4 [terminated]
zabbix 115967 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: poller #5 [terminated]
zabbix 115968 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: unreachable poller #1 [got 0 values in 0.000033 sec, getting values]
zabbix 115969 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: trapper #1 [terminated]
zabbix 115970 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: trapper #2 [terminated]
zabbix 115971 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: trapper #3 [terminated]
zabbix 115972 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: trapper #4 [terminated]
zabbix 115973 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: trapper #5 [terminated]
zabbix 115974 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: icmp pinger #1 [terminated]
zabbix 115975 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: alert manager #1 [terminated]
zabbix 115976 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: alerter #1 started
zabbix 115977 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: alerter #2 started
zabbix 115978 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: alerter #3 started
zabbix 115979 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: preprocessing manager #1 [terminated]
zabbix 115980 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: preprocessing worker #1 started
zabbix 115981 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: preprocessing worker #2 started
zabbix 115982 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: preprocessing worker #3 started
zabbix 115983 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: lld manager #1 [terminated]
zabbix 115984 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: lld worker #1 started
zabbix 115985 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: lld worker #2 started
zabbix 115986 115949 0 10:09 ? 00:00:00 /usr/sbin/zabbix_server: alert syncer [queuing alerts]
----------------------------------------------------------------------------------

zabbix_server.logではmysqldを先に停止しているので、下記のログが出力されるのは正常なのですが、問題はzabbix_serverが停止しない事にあります。
----------------------------------------------------------------------------------
120438:20191011:100743.383 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
120438:20191011:100743.384 database is down: reconnecting in 10 seconds
120438:20191011:100753.384 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
120438:20191011:100753.384 database is down: reconnecting in 10 seconds
120438:20191011:100803.384 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
120438:20191011:100803.384 database is down: reconnecting in 10 seconds
120438:20191011:100813.385 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
120438:20191011:100813.385 database is down: reconnecting in 10 seconds
120438:20191011:100823.385 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
120438:20191011:100823.385 database is down: reconnecting in 10 seconds
120438:20191011:100833.386 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
120438:20191011:100833.386 database is down: reconnecting in 10 seconds
120438:20191011:100843.386 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
120438:20191011:100843.386 database is down: reconnecting in 10 seconds
120438:20191011:100853.386 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
----------------------------------------------------------------------------------

https://www.support.nec.co.jp/View.aspx?id=3010101860
上記の記事を参考に、いくつかのKillModeを試してみましたが、いずれもだめでした。

おそらく、Pacemakerでリソース制御しているかに関わらず、mysql 8.0をzabbixより先に停止した場合はこのような症状が発生するかと思いますが、
この症状を回避する方法(mysqlを先に停止した場合でも、systemctl stop zabbix-serverで停止できる状態)はありますでしょうか?

よろしくお願いいたします。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー TNK の写真

確か、データベースのアップグレード処理に時間がかかった時に中
断されてしまわないよう、systemdの設定ファイルでタイムアウト
を無制限にするような記述を追加していたと思います。

今回の場合、その設定が影響して処理を待ち続ける状態になってい
るのだと思われます。

どの程度の時間でタイムアウトにするかですが、通常の運用時であ
れば、Zabbixサーバーのサービス停止時にキャッシュからデータベ
ースへの同期が終了するまでは待つようにしておくことが必要とな
ると思いますので、それ以上の時間をzabbix-serverサービス用の
systemdの設定ファイル内に記述するようにしてみてはいかがでし
ょうか?

CentOS 7.7上にZabbix 4.4.0をパッケージを使用してインストール
されているのであれば、設定ファイルは、

 /usr/lib/systemd/system/zabbix-server.service

で、タイムアウトの設定は、Serviceブロックの最後の行の、

 TimeoutSec=0

の部分です。
これを、

 TimeoutSec=120s

とすれば、2分で強制的に終了させるようになるはずです。
設定ファイル変更後は、

 # systemctl daemon-reload

を実行することもお忘れなく。

以下のチケットでも話題になっていますが、現時点では修正はされ
ていません。
ZBX-15602 : SystemD TimeoutSec=infinity can be bad
https://support.zabbix.com/browse/ZBX-15602
ZBX-16078 : Zabbix hangs at shutdown
https://support.zabbix.com/browse/ZBX-16078

ユーザー myyam の写真

お世話になります。

ご回答ありがとうございます。

いただきました設定でフェイルオーバーする事を確認できました。
ありがとうございます。大変助かりました。

ユーザー myyam の写真

>どの程度の時間でタイムアウトにするかですが、通常の運用時であれば、Zabbixサーバーのサービス停止時にキャッシュからデータベースへの同期が終了するまでは待つようにしておくことが必要となると思います

こちらについては、一般的にはどれくらい設定しておけば問題ないでしょうか?
(リソースのフェイルオーバーなので、なるべく早くフェイルオーバーしたいところなのですが)

ユーザー TNK の写真

「一般的」というものはありません。
使用されている環境のキャッシュサイズやデータベースの処理能力
など環境に依存します。

継続して稼働させた後に、Zabbixサーバーを停止する際にかかる時
間をログファイルなども確認して複数回確認してみてはいかがでし
ょうか?

ユーザー myyam の写真

了解いたしました。

ありがとうございます。トライしてみます。