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
    
  • 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アドレス
    
  • zabbix_agentd.conf
  •  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;