Zabbix3.0を、スクリプトを書かずに簡単にHAクラスター化してみた【Linux】

    GenericARK for Zabbix system archetecture

    皆さん、こんにちは。
    プリセールス(関東担当)の西下です。関西担当の國政と共にお客様を支援させていただいています。

    オープンソースの統合監視ソフト「Zabbix」は、企業規模や業種を問わず広く使われていますが、最近Zabbix自体の可用性を高めるニーズが増えていることをご存知でしょうか?可用性を高める手法と言えばHAクラスターの使用が一般的です。しかしHAクラスターソフトというと「難しい」というイメージが先行するのではないでしょうか?

    当社のHAクラスターソフトのLifeKeeperは、一般的なクラスターソフトで必要となる(少々ハードルの高い)スクリプトの作成を行わずに「簡単に」HAクラスターを構築できます。オンプレミスでの物理環境、仮想環境はもちろん、AWSのようなクラウド環境にも対応しており多くの導入実績があります。今日はこのLifeKeeperのLinux版を使って、Zabbixを簡単に保護する手順についてご紹介します。

    LifeKeeper for Linuxにはオプション製品の「GenericARK for Zabbix」が提供されており、これを使えば、スクリプトの作成無しで、簡単な設定のみでZabbixおよび関連アプリケーションのApacheとMySQLを保護することができます。

    GenericARK for Zabbix system archetecture

    GenericARK for Zabbixは当社のユーザーサイト上にサンプルスクリプトとして公開されており([GenericARK公開]http://lk.sios.com/?page_id=28)、どなたでも無償でダウンロードしてお使いいただけます。また、製品サポートは任意でご購入いただけます。

    なお2017年5月9日現在のGenericARK for Zabbixは、Zabbix v2.2およびv2.4をサポートしていますが、Zabbix3.0は現時点ではサポート対象外となります。
    ※サポート情報については下記ユーザーサイトをご覧ください。
    [[Linux] アプリケーションリカバリーキットのサポートバージョン] http://lk.sios.com/?p=4053

    このような場合はスクリプトを個別に作成することでZabbixの保護は可能です。ただしもっと簡易的に、時間と手間をかけずにZabbixを保護したいというケースもあるでしょう。

    そこで代替策として、LifeKeeper for Linux v9.1から追加されたQSP(Quick Service Protection)という新機能を使って、Zabbix3.0を保護する方法の検証を行いましたのでご紹介します。ApacheとMySQLについてはそれぞれに対応したオプションリカバリキットの「Apache ARK」と「MySQL ARK」で保護します。

    Zabbix3.0をLifeKeeper for Linuxで保護することをお考えのお客様はぜひ参考にして下さい。

    LK linux new feature

    検証手順

    検証環境

    項目  
    OS RHEL7.3
    SIOS Protection Suite for Linux v9.1.1
    ハードウェアvSphere上の仮想マシン
    ノード数 2
    その他 IPv4環境で検証

    インストール

    Zabbix3.0のインストールの準備として、以下に列挙するパッケージをインストールします。それぞれのパッケージは、RHEL7.3のインストール CDから取得します。なお、依存関係により自動的にインストールされるパッケージについては下記に列挙されていません。

    • unixODBC
    • net-snmp
    • OpenIPMI-libs
    • php
    • php-gd
    • php-xml
    • php-mysql
    • php-ldap
    • mysql
    • mariadb-server
    • httpd

    次に、Zabbix Serverの動作に必要な以下のパッケージをインストールします。バージョンは、検証時の最新のものであるZabbix-3.0.8を使用しました。

    • zabbix-server-mysql
    • zabbix-web-mysql

    最後に、LifeKeeper for Linuxのインストールを行います。LifeKeeperのインストール手順はこちらをご参照下さい。
    [SIOS Protection Suite インストレーションガイド]  http://jpdocs.us.sios.com/Linux/9.1.1/LK4L/SPSInstall/index.htm

    LifeKeeper本体のインストールを行った後、以下のARK(Application Recovery Kit)を追加インストールします。

    • lkAPA
    • lkDR
    • lkSQL

    各種サーバの設定とリソース作成

    次に、インストールした各種サーバの設定と、LifeKeeper for Linux上でのリソースの作成を行います。ここで、LifeKeeper for Linuxのコミュニケーションパスなどの初期設定は完了しているものとします。順序は以下の通り。

    1.  DR(データレプリケーション)リソースの作成
    2.  MySQLの設定
    3. Apacheの設定
    4. ZabbixServerの設定
    5. MySQLリソースの作成
    6. IPリソースの作成 *1
    7. Apacheリソースの作成
    8. ZabbixServer用のQSPリソースの作成
    9. リソース間の依存関係の作成

    上記1.~9.の各手順の詳細を説明します。

    注)*1:「IPリソース」は、障害が発生したActiveノードからStandbyノードへ「仮想IPアドレス」を切り替えて保護する仕組みを提供します。ユーザはこの仮想IPアドレスを使用してノードに接続します。

    ◇DRリソースの作成
    MySQLのデータを格納するためのDRリソースを作成します。検証環境においては、以下のように設定しました。

    • デバイス: /dev/sdb1
    • サイズ: 10GB
    • ファイルフォーマット: ext4
    • マウント先: /data

    上記以外の設定は全てデフォルトのままとしました。DRリソースの作成手順はこちらのオンラインマニュアルをご参照下さい。

    [DataKeeper リソース階層の作成] http://jpdocs.us.sios.com/Linux/9.1.1/LK4L/TechDoc/index.htm#datakeeper/installation_configuration/installconfig/creating_datakeeper_resource_hierarchy.htm

    ◇MySQLの設定
    MySQLサーバの動作に必要な各種データの配置先は以下の通り。全て、先程作成したDRリソースの保護下にあるディレクトリとなります。
    /data/mysql/{run, data}

    /etc/my.cnfの内容は以下の通り。この設定は、LifeKeeper for Linuxが稼働する全てのノードにて行います。

    [mysqld]
    datadir=/data/mysql/data
    socket=/var/lib/mysql/mysql.sock
    pid-file=/data/mysql/mysqld.pid
    port=3360
    user=root
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0

    [mysqld_safe]
    log-error=/data/mysql/mysqld.log
    pid-file=/data/mysql/run/mysqld.pid
    port=3360

    [client]
    user=root
    password=lifekeeper
    port=3360
    socket=/var/lib/mysql/mysql.sock

    また、データ初期化のため、以下のコマンドを実行してパスワードなども適切に設定しておきます。

    mysql_install_db –datadir=/data/mysql/data

    その後、mysql-serverを起動します。

    ◇Apacheの設定
    /etc/httpd/conf/httpd.confのListenの行に、後ほど作成するIPリソースで用いるアドレスを指定しておきます。この設定は、LifeKeeper for Linuxが稼働する全てのノードにて行います。

    Listen=10.125.139.121:80

    設定完了後、Apacheが起動していれば停止しておきます。

    ◇Zabbix Serverの設定
    /etc/zabbix/zabbix_server.confの以下の項目を適切に設定します。この設定は、LifeKeeper for Linuxが稼働する全ノードにて行います。

    DBPassword=lifekeeper
    DBSocket=/var/lib/mysql/mysql.sock

    また、Zabbix Server の自動起動を抑止するため、以下のコマンドも実行します。

    systemctl disable zabbix-server

    ◇MySQLリソースの作成
     リソース作成時、[Location of my.cnf]にて/etcを指定します。それ以外はデフォルトのままとします。MySQLリソースの作成手順はこちらのオンラインマニュアルをご参照下さい。

    [MySQL リソース階層の作成] http://jpdocs.us.sios.com/Linux/9.1.1/LK4L/MySQL/index.htm#recovery_kits/mysql_recovery_kit_documentation/installation/creating_mysql_resource_hierarchy.htm

    ◇IPリソースの作成
    用いる仮想IPアドレスは、10.125.139.121/15です。それ以外はデフォルトのままとします。IPリソースの作成手順はこちらのオンラインマニュアルをご参照下さい。

    [IP リソース階層の作成] http://jpdocs.us.sios.com/Linux/9.1.1/LK4L/IP/index.htm#recovery_kits/ip_recovery_kit_technical_documentation/configuration/creating_ip_resource_hierarchy.htm

    ◇Apacheリソースの作成
    リソース作成時、[Web Server Root Directory]にて/etc/httpdを指定します。それ以外はデフォルトのままとします。Apacheリソースの作成手順はこちらのオンラインマニュアルをご参照下さい。

    [Apacheリソース階層の作成]
    http://jpdocs.us.sios.com/Linux/9.1.1/LK4L/Apache/index.htm#Apache/Creating_an_Apache_Web_Server.htm

    ◇QSP(Quick Service Protection)を活用し、ZabbixServer用のリソースの作成
    リソース作成時、[Service Name] にて zabbix-serverを指定します。それ以外はデフォルトのままとします。

    なおQSPの詳細については下記のオンラインマニュアルをご参照下さい。
    [Quick Service Protection (QSP) Recovery Kit]
    http://jpdocs.us.sios.com/Linux/9.1/LK4L/TechDoc/Content/Quick_Service_Protection_Recovery_Kit.htm

    公開済みのNginxをQSPでクラスター化した記事 も合わせてご参照下さい。QSPの具体的な操作がStep By Step形式で詳細に紹介されています。(今回は操作については省略しています)
    [[Linux]QSP(Quick Service Protection)を使って簡単にNginxをクラスター化してみる]
    http://sios.jp/bcp/bcblog/cluster-nginx-using-qsp/

    ◇リソース間の依存関係の作成
    Zabbix Server を適切に保護するために、以下のようなリソース間の依存関係を手動で作成します。

    リソース間の依存関係

    以上で検証環境の構築は完了です。

    注意事項

    LifeKeeper for Linux v9.1.1におけるQSPの制限事項として、以下について運用時にご留意下さい。

    稼働系の OS 停止実行時に不要な failover が発生する可能性があります。

    ◇対応策
    OS 停止実行前に、lkstopコマンドでLifeKeeperの停止を行って下さい。または全てのリソースのOut-of-Service を行い、ISP 状態のリソースが存在しないことを確認してから、OS の停止を行って下さい。

    テスト

    当社では以下のテストを行い、問題がないことを確認しました。

    • リソースの作成、拡張
    • ローカルリカバリ(リソースの障害を起因とするリソースの再起動による復旧)
    • リソースフェイルオーバー(リソースの障害を起因とするフェイルオーバー)
    • ノードフェイルオーバー(ノードの障害を起因とするフェイルオーバー)
    • リソースISP状態でのOSシャットダウン(上記制限事項に従い、リソース停止後に実施)
    • リソース削除

    今後はZabbixは3.0が使われるケースが一般的になると考えられます。当記事がご参考になれば幸いです。

    【ご留意頂きたい事項】
    QSPはOSのserviceコマンドを使用して簡易的な監視(status)・起動 (start) ・停止 (stop)を行います。このためQSPの動作が意図されたものになっているかについては、必ず事前に評価版でご確認下さい。

    本記事について気になる点やご質問等ありましたら、以下よりお気軽にお問い合わせください。