こんにちは、SCSK株式会社の小寺崇仁です。
Zabbix7.0からZabbixプロキシの冗長構成が可能になりました。
制約事項等ありますので、検証しながら考察したいと思います。
プロキシの冗長構成について
サーバ+プロキシの構成
プロキシの冗長構成をする場合、Zabbixプロキシを2台構築します。
ZabbixのWeb管理画面にて「プロキシーグループ」を作成し、2台のプロキシを同じグループに設定します。
プロキシーグループに冗長構成のパラメータがあり、「フェイルオーバーの期間」が設定できます。デフォルトは「1m」となります。
ホスト設定でのプロキシの指定
ホストの設定画面にて、「プロキシーグループ」を選択します。
監視を担うZabbixプロキシサーバは自動的にZabbixサーバで割り振られます。
ホストの設定画面の「割り当てられたプロキシ」に割り当てられたプロキシサーバが表示されます。
ポイント
・Zabbixサーバがプロキシの状態を監視し、監視対象がどのプロキシサーバで監視を行うかコントロールしています。
・Zabbixプロキシ間でハートビートするのような冗長構成ではありませんでした。
・Zabbixプロキシの代表IP切り替えるような冗長構成ではありませんでした。
・Zabbixプロキシ側で冗長構成を行うための設定はありませんでした。
監視対象の構成について
監視対象側での注意事項をまとめます。
シンプルチェック
Ping監視、ポート監視などは、2台のZabbixプロキシから監視対象に接続ができれば問題ないです。
Zabbixエージェント(パッシブ)
zabbix_agentd.confもしくはzabbix_agent2.confに、2台のZabbixプロキシから接続ができるように設定をします。
vi /etc/zabbix/zabbix_agent2.conf Server=10.0.2.155,10.0.2.230 ※カンマ区切りでZabbixプロキシのアドレスを指定します。
Zabbixエージェント(アクティブ)
zabbix_agent.confもしくはzabbix_agent2.confに、2台のZabbixプロキシに接続ができるように設定をします。
vi /etc/zabbix/zabbix_agent2.conf ServerActive=10.0.2.155;10.0.2.230 ※セミコロン区切りでZabbixプロキシのアドレスを指定します。カンマ区切りにすると2重でヒストリデータが作成されます。
SNMPトラップ
Zabbix7.0では対応しておりません。Zabbixサーバに送信する必要があります。
切り替わることを想定して、2台のZabbixプロキシに同じ内容のSNMPTrapを送信すると、2重でヒストリーデータが作成されます。
Zabbixトラップ
Senderコマンドでデータを送信する場合、Zabbixプロキシの指定を以下のconfigを指定するようにします。
config内の「ServerActive」に指定しているプロキシが使用されます。
zabbix_sender -c /etc/zabbix/zabbix_agent2.conf -s <ホスト名> -k <アイテムキー> -o 1234 ※「-z」オプションで各プロキシを指定すると、2重でヒストリーデータが作成されます。
実際にフェイルオーバーしてみた
検証内容
以下の内容で検証を行います。フェイルオーバーの期間はデフォルトの1mとします。
1.各アイテムタイプで10秒間隔の監視アイテムを作成します。
2.監視を行っている側のプロキシのサービスを停止します。
3.フェイルオーバー後にヒストリを確認し、何秒間のデータが欠損したか確認します。
予想では、1m(フェイルオーバーの期間) + 10s(監視間隔) = 70秒+αのデータ欠損が発生する想定です。
アクティブプロキシの場合
アイテムタイプ | 監視内容 | 最終取得時間 | 再開時間 | 欠損 |
シンプルチェック | ping監視 | 18:43:23 | 18:44:53 | 90秒 |
Zabbixエージェント(パッシブ) | CPU使用率 | 18:43:25 | 18:44:55 | 90秒 |
Zabbixエージェント(アクティブ) | CPU使用率 | 18:43:26 | 18:44:49 | 93秒 |
Zabbixエージェント(アクティブ) | ログ | 18:43:29 | 18:43:29 | なし 再開後、切り替え期間中に発生したログも受信 |
Zabbixトラップ | ー | 18:43:27 | 18:44:47 | 90秒 |
パッシブプロキシの場合
アイテムタイプ | 監視内容 | 最終取得時間 | 再開時間 | 欠損 |
シンプルチェック | ping監視 | 18:58:43 | 19:00:13 | 90秒 |
Zabbixエージェント(パッシブ) | CPU使用率 | 18:58:45 | 19:00:05 | 80秒 |
Zabbixエージェント(アクティブ) | CPU使用率 | 18:58:46 | 19:00:04 | 78秒 |
Zabbixエージェント(アクティブ) | ログ | 18:58:39 | 19:00:04 | なし 再開後、切り替え期間中に発生したログも受信 |
Zabbixトラップ | ー | 18:58:49 | 19:00:09 | 80秒 |
考察
・フェイルオーバー期間(60秒)を考慮すると、30秒程で切り替えができました。通常は5分間隔の監視が多いため、タイミングによっては1回監視に失敗する程度かと思います。
・ログ監視は、欠損なく監視が継続できました。監視再開後に切り替え期間中に出力されたログもZabbixサーバに送信されてきます。
・Zabbixトラップで送信した内容は欠損します。zabbix_senderコマンドの実行結果がエラーになるため、送信元で制御する必要があります。もしくは、ZabbixAPIに「history.push」 がバージョン7.0から追加されましたので、変更することも考えてもよいと思います。
非機能要件について
バックアップ
・プロキシサーバのデータベースに格納されるデータは一時データであるため、DBのダンプの保存は不要です。
・/etc/zabbixは以下にコンフィグファイルがあるため、設定変更時にバックアップが必要です。
プロキシの監視
・Zabbixサーバから直接(プロキシを経由せずに)監視を行うのが良いと考えております。プロキシを経由すると「接続エラーやダウン」なのか「データの取得エラー」か判別しにくいためです。
・Zabbixプロキシのテンプレートは「Remote Zabbix proxy health」がデフォルトで用意されています。使用時にはマクロの設定が必要です。
メンテンナンス
・マイナーバージョンアップの方法について、別途ブログ記事にする予定です。
拡張性
・プロキシーグループにプロキシサーバを追加することで容易に拡張できます。
・障害発生時に縮退運転した際でも問題がないよう、リソースを準備する必要があります。
セキュリティ
・Zabbixサーバ ⇔ Zabbixプロキシ ⇔ Zabbixエージェント間の通信は暗号化することが可能です。「PSK」「証明書」と選択が可能です。
HA構成で気になること
スプリットブレインについて
もし、Zabbixプロキシで監視設定の情報を保持しているため、障害の状況によっては、両系のプロキシで監視を行う可能性はあると思います。
別途発生するか検証してみたいと思います。発生した場合の影響としては、以下と考えてます。
・2重で障害を検知する。両系で取得したデータが保存されるため。
・プロキシで保持している設定がZabbixサーバと同期されれば復旧する
フェイルバックについて
障害が発生したプロキシを復旧するだけで、Zabbixサーバは復旧を自動的に認識します。
復旧後自動的に監視対象のホストを分散します。(自動的に割り当てられるので、任意のプロキシに移動することはできません)
フェイルオーバー、フェイルバックを頻繁に繰り返す可能性について
マニュアルを確認したところ、頻繁に切り替わりが発生した場合、対象プロキシを切り離すなどの設定はありませんでした。
まとめ
プロキシグループを作成することで、簡単に冗長構成を構築することができます。
また、検知後30秒程度で切り替わりができております。さらにログ監視では欠損なく監視ができております。
SNMPトラップの監視ができませんので、要件を確認してご利用いただければと思います。
最後に
弊社ではZabbix関連サービスを展開しています。以下ページもご参照ください。
SCSK Plus サポート for Zabbix
★YouTubeに、SCSK Zabbixチャンネルを開設しました!★
★X(旧Twitter)に、SCSK Zabbixアカウントを開設しました!★