RDSがフェイルオーバした場合のZabbixの動作について
■前提
Zabbix: zabbix_server (Zabbix) 3.0.5
DB:MySQL 5.6.23
DBとして使用しているAWSのRDSがフェイルオーバした時にZabbixがRDSに再接続しない事象が発生しました。
ネット上のネタを参考にRDSがフェイルオーバーしたときに出力するメッセージ「database is down」をswatchで監視させ、
swatchがZabbixを再起動させるようにしました。
■事象
RDSがフェイルオーバした時に、「database is down」が出力せず、Zabbixが再起動しなかったため、15分程度だんまり状態になってしまいました。
だんまり状態について調査したら、各監視対象ホストの値がリアルタイムで取得できず、Zabbixの以下複数プロセスが100%busy状態になっていました。
また、フェイルオーバしたときに発行していたと思われるselect文がのきなみ失敗となっておりました。
(各プロセス100%busy:alerter、confiruration syncer、discoverer、escalator、history syncer、http poller、timer、trapper)
■質問
1.RDSがフェイルオーバした時に、swatchを使わずにZabbixまたはMysqlのタイムアウト設定やソース修正でだんまり状態になることを回避できないでしょうか。
2.Zabbix3.0.5のリリースノートに「ZBX-10753」がありましたが、これはDBがフェイルオーバした時にZabbixが毎度再接続をしてくれるという内容ではないでしょうか。
3.Zabbixが「database is downを出力しない時があることを回避できないでしょうか。
長文になり申し訳ありませんがご教示お願いいたします。
■事象発生時のZabbix.ログ
28682:20161109:141857.226 [Z3005] query failed: [2013] Lost connection to MySQL server during query [select escalationid,actionid,triggerid,eventid,r_eventid,nextcheck,esc_step,status,itemid from escalations where triggerid is not null order by actionid,triggerid,itemid,escalationid]
28682:20161109:141857.227 slow query: 931.212928 sec, "select escalationid,actionid,triggerid,eventid,r_eventid,nextcheck,esc_step,status,itemid from escalations where triggerid is not null order by actionid,triggerid,itemid,escalationid"
28679:20161109:141857.738 [Z3005] query failed: [2013] Lost connection to MySQL server during query [begin;]
28679:20161109:141857.739 slow query: 931.174103 sec, "begin;"
28676:20161109:141901.322 [Z3005] query failed: [2013] Lost connection to MySQL server during query [select h.hostid,h.host,h.name,t.httptestid,t.name,t.variables,t.headers,t.agent,t.authentication,t.http_user,t.http_password,t.http_proxy,t.retries,t.ssl_cert_file,t.ssl_key_file,t.ssl_key_password,t.verify_peer,t.verify_host from httptest t,hosts h where t.hostid=h.hostid and t.nextcheck<=1478667810 and mod(t.httptestid,1)=0 and t.status=0 and h.proxy_hostid is null and h.status=0 and (h.maintenance_status=0 or h.maintenance_type=0)]
28676:20161109:141901.323 slow query: 930.989655 sec, "select h.hostid,h.host,h.name,t.httptestid,t.name,t.variables,t.headers,t.agent,t.authentication,t.http_user,t.http_password,t.http_proxy,t.retries,t.ssl_cert_file,t.ssl_key_file,t.ssl_key_password,t.verify_peer,t.verify_host from httptest t,hosts h where t.hostid=h.hostid and t.nextcheck<=1478667810 and mod(t.httptestid,1)=0 and t.status=0 and h.proxy_hostid is null and h.status=0 and (h.maintenance_status=0 or h.maintenance_type=0)"
28680:20161109:141901.834 [Z3005] query failed: [2013] Lost connection to MySQL server during query [begin;]
28680:20161109:141901.835 slow query: 931.268372 sec, "begin;"
TNK - 投稿数: 4769
一部分だけ回答させて頂きます。
ZBX-10753は、zabbix_serverプロセスの起動時、DBに接続できなか
ったときに接続のリトライをせずに、プロセスを終了してしまう問
題であったかと思います。
https://support.zabbix.com/browse/ZBX-10753
RDSへの再接続との直接的な関係はないでしょう。
もしかしたら、ログの「Lost connection」でも再起動をかけてし
まうことで対応できるかもしれませんが、実際には試していません。
質問者以外の方々で、RDSのフェールオーバー時の問題をご存知で
ない方は、以下のURLにあるQ&Aをご覧ください。
http://www.zabbix.jp/node/3431
条件によっては、Zabbix側から再接続しない場合があるようです。
初心者.com - 投稿数: 8
TNK様ご回答ありがとうございました。
ごちゃごちゃした質問とZBX-10753についてよく理解できておらずすいませんでした。
もう一度整理しました。
■事象
3.0.4:mysqlがダウンしたときに、Zabbix_server.logに「database is down」が出力。
3.0.5:mysqlがダウンしたときに、Zabbix_server.logに「database is down」が出力しないケースが出てきた。
(#15分後にslow query ,query failureが出力)
■困っていること
作り込みとして、「database is down」をもって障害認識の契機としていたが、
15分間Zabbix_server.logに何も検出されないため、障害を認識できず、困っている。
「database is down」が出力したりしなかったりはなぜでしょうか。
ご教示おねがいいたします。