Zabbixのアップグレード
Zabbixのバージョン表記と互換性
Zabbixのバージョンははバージョン表記のうちZ.Y.ZのZ.Yまでがメジャーバージョン、Zがマイナーバージョンを表します。1.6、1.8などがメジャーバージョン、1.8.5、1.8.10の3つ目の数字がマイナーバージョンです。
Zabbixサーバはエージェントに対して下方互換性を持つように開発されています。そのためZabbixサーバをアップグレードするために、各監視対象にインストールされているエージェントをアップグレードする必要はありません。実運用にあたり、先にZabbixサーバのみをアッップグレードしておき、後から随時エージェントをアップグレードしていくことができます。
ただし、エージェントのバージョンに依存する監視機能については、エージェントのアップグレードを行わないと新機能に対応することはできません。(例えば、1.8から追加されたログ監視用のlogrtキーを利用するためにはZabbixサーバ、エージェントともに1.8以上を利用する必要があります。)
マイナーバージョン間のアップグレード
1.8 -> 1.8.10のようにマイナーバージョン間のアップグレードの場合はバイナリを置き換えるのみでアップグレードが完了します。ZABBIX-JPのyumリポジトリを利用している場合は以下の手順でアップグレードを行ってください。
- Zabbixサーバ、エージェントを停止
# service zabbix-server stop # service zabbix-agent stop
# yum update zabbix
# service zabbix-server start # service zabbix-agent start
メジャーバージョン間のアップグレード(Zabbix 1.6 -> 1.8)
メジャーバージョン間のアップグレードにはデータベースのスキーマ変更が必要です。スキーマ変更用のSQLファイルはRPMやソースコードに付属するため簡単に行えますが、事前にデータベースのバックアップを取得したり、SQL適用の手順が必要なためマイナーバージョン間のアップグレードより手間がかかります。アップグレードに際しては事前の検証などを行われることを推奨します。
Zabbixサーバ、エージェントを停止
動いているZabbixを止めます。
# service zabbix-server stop # service zabbix-agent stop
データベースのバックアップを取得
念のために以下のコマンドでzabbixデータベース全体のバックアップを取得しておきます。長期間のデータが保存されている場合、この処理には時間がかかることがあります。以下はMySQLを使用している場合です。
# mysqldump --opt --no-autocommit -uroot -p -B zabbixのデータベース名 > zabbix.dump
yumリポジトリを1.8に切り替える
以下のようにコマンドを実行し、利用するリポジトリを1.6から1.8に切り替えます
# alternatives --config zabbix-jp-release 4 プログラムがあり 'zabbix-jp-release' を提供します。 選択 コマンド ----------------------------------------------- 1 /usr/share/zabbix-jp-release/zabbix-jp-1.1.repo 2 /usr/share/zabbix-jp-release/zabbix-jp-1.4.repo *+ 3 /usr/share/zabbix-jp-release/zabbix-jp-1.6.repo 4 /usr/share/zabbix-jp-release/zabbix-jp-1.8.repo Enter を押して現在の選択 [+] を保持するか、選択番号を入力します: 4 <-- 4を入力して1.8のリポジトリを選択
RPMのアップグレード
以下のコマンドを実行しRPMをアップグレードします。
# yum clean all # yum update zabbix
データベースのスキーマを変更
/usr/share/doc/zabbix-server-1.8.10/dbpatches/1.8/使用しているDBに移動し、patch.sqlを実行します。以下はMySQLを使用している場合です。
mysql -uアカウント -p zabbixのデータベース名 < patch.sql
パッチの実行時にエラーが出た場合、取得しておいたデータベースのバックアップを戻してから再度試してみてください。ページ末尾の「アップグレード時にエラーが出た場合」もご参考ください。
設定ファイルの修正
ZABBIX 1.6とZabbix 1.8では設定ファイルの表記が異なっています。動作に最低限必要な設定は変わっていませんので前のバージョンの設定ファイルを見ながら新しい設定ファイルします。以下は最低限の設定が必要です。(MySQLを使用していた場合)
- zabbix_server.conf
LogFile=ログファイルの出力先 PidFile=PIDファイルの出力先 DBName=データベース名 DBUser=データベースの接続アカウント DBPassword=データベースの接続パスワード ListenIP=ZabbixサーバのIPアドレス
PidFile=PIDファイルの出力先 LogFile=ログファイルの出力先 Server=ZabbixサーバのIPアドレス Hostname=(フロントエンドに登録する)ホスト名 ListenIP=ZabbixエージェントのIPアドレス
アップグレード時にエラーが出た場合
いくつかのバージョンの組み合わせでエラーが出ることが確認されています。エラーが発生した場合は以下の情報も参考にしてください。
1.6系を1.8.3以前の1.8系に移行する場合
以下のSQLを実行します。
alter table dhosts drop index dhosts_1; alter table dservices drop index dservices_1; alter table httptest drop index httptest_2; alter table httptest drop index httptest_3; alter table history_log drop index history_log_2; alter table history_text drop index history_text_2; alter table actions drop index actions_1; alter table escalations drop index escalations_2; alter table graphs_items drop index graphs_items_1; alter table graphs_items drop index graphs_items_2; alter table services drop index services_1;
パッチ実行時に「Duplicate key name 'actions_1'」がでた場合
※:2011/06/26時点では1.6.8->1.8.3、1.6.9->1.8.5でエラーの発生が確認されています。
[xxxxxxxx]# cat patch.sql | mysql -uXXXX -pXXXX zabbix ERROR 1061 (42000) at line 1: Duplicate key name 'actions_1'
対策:パッチ実施前に下記の実行が必要です。
MySQLの場合
alter table dhosts drop index dhosts_1; alter table dservices drop index dservices_1; alter table httptest drop index httptest_2; alter table httptest drop index httptest_3; alter table history_log drop index history_log_2; alter table history_text drop index history_text_2; alter table actions drop index actions_1; alter table escalations drop index escalations_2; alter table graphs_items drop index graphs_items_1; alter table graphs_items drop index graphs_items_2; alter table services drop index services_1;
Oracleの場合
drop index dhosts_1; drop index dservices_1; drop index httptest_2; drop index httptest_3; drop index history_log_2; drop index history_text_2; drop index actions_1; drop index escalations_2; drop index graphs_items_1; drop index graphs_items_2; drop index services_1;