OSアップデートしたら壊れたZabbix

この記事を読む およそ時間 < 1

まじかよ!!

昨日CentOSのOSアップデートしたら、勢いよくZabbixがBAD requestを返すようになったぜorg

簡単な内部構成図

Zは、Zabbix Aは、Apache NXは、Nginx RPは、ReverseProxy Jは、Jenkins

数字は、内部はそのPortで通信させて、NginxでReverseProxyでFront側を制御している。そして、ドメインベースのSSL証明書を入れてFront側は完全にSSLで443通信させている。

何はともあれ調査

yum logを確認して何がアップデートがかかったかを確認する。その上でZabbixログ確認とsyslogみたり、MariaDBプロセスが上がっているとか、DBにログインしたりして状況を把握する。

状況

今回ログからMariaDBがアップデートされていることは確認したので、今度はプロセスが上がっているかを確認したら、問題無くprocessはあがっていてDBにログインも出来たので、DB自体が壊れた訳ではなさそうです。ただ、ログを見る限りどうも、MariaDBとZabbixが同時にアップデートされた模様。

Zabbixログを確認すると、Zabbixパッケージのアップデートが終わって、DBをアップデートしてる最中に構造が壊れてそこで止まってるようだ。DBにログインしてみるとテーブルが激しく破損している。

原因

状況証拠をもとに考えると、yum updateでZabbixがアップデートしてauto起動でreloadしてDBテーブルをアップデートしてる最中に、MariaDBアップデートは走りアップデート途中でMariaDBプロセスがダウンしたため、もはや動作環境としては破損した状況に陥った。

復旧

もう、とっとと復旧しましょう。今Zabbixが動いてるサーバは1日1回スナップショットをOSまるってとっているので、スナップショットからインスタンスを作成する。

スナップショットを取った時は、もちろん破損してないので何も無く起動してくる。そこからDBdumpを作成し、そのデータをローカル経由で今回壊れたサーバの/tmp位において、DBdumpをインポートする。

DBdump : mysqldump –single-transaction -u zabbix -p qqqqaaaavvv > /tmp/zabbix.db.sql

DBDump import : mysql -u zabbix -p qqqqaaaavvv < /tmp/zabbix.db.sql

その上でZabbixを起動してやると、DBアップデートが走るので正常に完了で動き出す。しかし、まだBADrequestを返す。

こちらで使っているZabbixは、内部を別ポートでフロントをnginxでリバプロ接続している。フロント側が443で通信している関係で、apacheアップデートしたときに、何故かSSLで起動して来て既にnginxが443を掴んでいたので、apacheが上がらずBADrequestを返していたようです。ssl.confをリネームして再起動して問題なく画面出るようになりました。

教訓

yum updateでリストをみて、ZabbixとMariaDBがアップデートが重なる時は、一端Zabbixを除外してアップデートしてから、後でZabbixをアップデートするようにしよう。もしくは、Zabbixを落としてからアップデートを行うと共にアップデート前に、DBdumpをとっておこう。OSごとスナップショットを取って復旧できるようにしておこう。

やれやれ 2時間位かかりましたw疲れますね。

Related posts