機器監視のためのZabbixを、DB含めてL3冗長化した話-2-janog54-imai-20240704

834 Views

July 16, 24

スライド概要

※2024年7月に開催されたJANOG54での登壇資料です。
※別資料「機器監視のためのZabbixを、DB含めてL3冗長化した話-1-janog54-koyama-20240704」とのセット資料です。

2024年6月にZabbix7.0がリリースされました。Jストリームでは、Zabbix7.0へのアップデートにあわせて、単一拠点内の冗長構成から拠点をまたいだL3の冗長構成へと設計変更を試みました。本資料では、採用した構成について説明しています。

profile-image

1997年の設立以来、動画配信を主軸に事業展開。コーポレートメッセージ「もっと素敵な伝え方を。」を掲げ、テクノロジーを通じて世の中のコミュニケーションをよりよくすることを目指しています。 自社で保有・運営する独自のコンテンツ配信ネットワーク(CDN=Content Delivery Network)を活用した動画配信に加え、長年のノウハウを活かした動画の企画・制作・運用やWebサイト制作、システム開発、動画広告による収益化支援まで総合的なサービスとソリューションを提供。取引実績はメディア、大手企業をはじめ年間1,200社・10,000案件以上です。手がける技術領域は、ネットワークの物理層からアプリケーション層にわたり、日本屈指の大規模配信や最先端案件の実績も多数あります。 エンジニア向けオウンドサイト「Voice」公開中! https://voice.stream.co.jp/

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

JANOG54 Meeting in NARA 機器監視のためのZabbixを、 DB含めてL3冗長化した話 株式会社 Jストリーム ネットワークインフラ部 ネットワークインフラ課 小山 拓海 〇 今井 宏謙 2024-07-04 もっと素敵な伝え方を。 Jstream

2.

自己紹介 もっと素敵な伝え方を。 Jstream 株式会社Jストリーム ネットワークインフラ部 ネットワークインフラ課 今井 宏謙 2020年度入社、新卒5年目 CDNの基盤ネットワーク・サーバインフラの構築・運用 JANOG参加は10回目ぐらい - 初参加はJANOG39@金沢に若者支援で参加しました JANOG54 BAKUCHIKU参加してます - 会場Wi-Fi、問題なく提供出来てるといいな ©J-Stream Inc. All Rights Reserved. 2

3.

採用した構成 もっと素敵な伝え方を。 Jstream この構成について説明します パターン5 Active-Standby (Zabbix-HA) パターン3を拡張 VIPの問題があるのであれば、VIPをなくせばよい。 実現方法を考えてみた。 Internet ロードバランサ 拠点A 拠点B Web Server DB Server 17 ©J-Stream Inc. All Rights Reserved. 3

4.

Zabbix HAの仕組み もっと素敵な伝え方を。 Jstream ZabbixのHA機能での Active-Standby構成 IP: 198.51.100.20 Zabbix Server IP: 203.0.113.20 Zabbix Server ©J-Stream Inc. All Rights Reserved. 4

5.

Zabbix HAの仕組み もっと素敵な伝え方を。 Jstream ZabbixのHA機能での Active-Standby構成 IP: 198.51.100.20 Zabbix Server IP: 203.0.113.20 Zabbix Server 定期的にポーリング ポーリングがタイムアウトすると フェイルオーバーが発生 DBにActiveなZabbix ServerのIPを保存 DB 現在のActiveは 198.51.100.20 ©J-Stream Inc. All Rights Reserved. 5

6.

Zabbix HAの仕組み もっと素敵な伝え方を。 Jstream ZabbixのHA機能での Active-Standby構成 IP: 198.51.100.20 Zabbix Server Active機 ホストへの死活監視やSNMP収集 アラート発砲 IP: 203.0.113.20 Zabbix Server 定期的にポーリング ポーリングがタイムアウトすると フェイルオーバーが発生 DBにActiveなZabbix ServerのIPを保存 DB 現在のActiveは 198.51.100.20 ©J-Stream Inc. All Rights Reserved. 6

7.

Zabbix HAの仕組み もっと素敵な伝え方を。 Jstream Web (PHP) IP: 198.51.100.20 Zabbix Server IP: 203.0.113.20 Zabbix Server DB 現在のActiveは 198.51.100.20 ©J-Stream Inc. All Rights Reserved. 7

8.

Zabbix HAの仕組み もっと素敵な伝え方を。 Jstream Web (PHP) ①DBに現在Activeな Zabbix ServerのIPを 問い合わせ IP: 198.51.100.20 Zabbix Server IP: 203.0.113.20 Zabbix Server DB 現在のActiveは 198.51.100.20 ©J-Stream Inc. All Rights Reserved. 8

9.

Zabbix HAの仕組み もっと素敵な伝え方を。 Jstream Web (PHP) ①DBに現在Activeな Zabbix ServerのIPを 問い合わせ ②Active側IP にアクセス IP: 198.51.100.20 Zabbix Server IP: 203.0.113.20 Zabbix Server DB 現在のActiveは 198.51.100.20 ©J-Stream Inc. All Rights Reserved. 9

10.

Zabbix HAのデータセンタ冗長 もっと素敵な伝え方を。 Jstream データセンタ A Web (PHP) ①DBに現在Activeな zabbix-serverのIPを 問い合わせ ②Active側IP にアクセス IP: 198.51.100.10 zabbix-server IP: 203.0.113.10 zabbix-server DB 現在のActiveは 198.51.100.10 データセンタ B Web (PHP) ①DBに現在Activeな zabbix-serverのIPを 問い合わせ ②Active側IP にアクセス IP: 198.51.100.10 zabbix-server IP: 203.0.113.10 zabbix-server DB 現在のActiveは 198.51.100.10 冗長化? 拠点 拠点 拠点 ・拠点を跨いだ冗長を行うには、一工夫必要そう ・Zabbixのパートナー企業様の資料によるとHAの方法はあるが、 L2ネットワーク内で考えられているものが多く、拠点をまたぐのは難しそう - DC冗長を構築するドキュメントは乏しい、、、 - DB周りはZabbix公式でドキュメントが見当たらなかった ©J-Stream Inc. All Rights Reserved. 10

11.

Zabbix Serverの冗長化 もっと素敵な伝え方を。 Jstream Web (PHP) ①DBに現在Activeな Zabbix ServerのIPを 問い合わせ ②Active側IP にアクセス IP: 198.51.100.20 Zabbix Server IP: 203.0.113.20 Zabbix Server データセンタ A データセンタ B DB 現在のActiveは 198.51.100.20 ©J-Stream Inc. All Rights Reserved. 11

12.

Webの冗長化 もっと素敵な伝え方を。 Jstream Web (PHP) ①DBに現在Activeな Zabbix ServerのIPを 問い合わせ ②Active側IP にアクセス Web (PHP) IP: 198.51.100.20 Zabbix Server IP: 203.0.113.20 Zabbix Server データセンタ A データセンタ B DB 現在のActiveは 198.51.100.20 ©J-Stream Inc. All Rights Reserved. 12

13.

Webの冗長化 もっと素敵な伝え方を。 Jstream ユーザ DNSによる負荷分散 GSLB (広域負荷分散装置) ヘルスチェック GLSBを用いて Active-Activeの分散 Web (PHP) IP: 198.51.100.10 IP: 203.0.113.10 Web (PHP) IP: 198.51.100.20 Zabbix Server IP: 203.0.113.20 Zabbix Server データセンタ A データセンタ B DB ©J-Stream Inc. All Rights Reserved. 13

14.

DBの冗長化 もっと素敵な伝え方を。 Jstream ユーザ DNSによる負荷分散 GSLB (広域負荷分散装置) ヘルスチェック Web (PHP) IP: 198.51.100.10 IP: 203.0.113.10 Web (PHP) IP: 198.51.100.20 Zabbix Server IP: 203.0.113.20 Zabbix Server VIPを使って冗長化 VIP: X.X.X.X IP: 198.51.100.40 DB IP: 203.0.113.40 DB DRBD データセンタ A データセンタ B ©J-Stream Inc. All Rights Reserved. 14

15.

DBの冗長化 もっと素敵な伝え方を。 Jstream ユーザ DNSによる負荷分散 GSLB (広域負荷分散装置) ヘルスチェック Web (PHP) IP: 198.51.100.10 IP: 203.0.113.10 Web (PHP) IP: 198.51.100.20 Zabbix Server IP: 203.0.113.20 Zabbix Server VIPを使って冗長化 VIP: X.X.X.X IP: 198.51.100.40 DB IP: 203.0.113.40 DB VIP: X.X.X.X DRBD データセンタ A データセンタ B ©J-Stream Inc. All Rights Reserved. 15

16.

DBの冗長化 もっと素敵な伝え方を。 Jstream ユーザ DNSによる負荷分散 GSLB (広域負荷分散装置) ヘルスチェック Web (PHP) IP: 198.51.100.10 IP: 203.0.113.10 Web (PHP) IP: 198.51.100.20 Zabbix Server IP: 203.0.113.20 Zabbix Server VIPを使って冗長化 VIP: X.X.X.X IP: 198.51.100.40 DB IP: 203.0.113.40 DB VIP: X.X.X.X DRBD データセンタ A データセンタ B VIPのために同じセグメントに いる必要がある REDOログのリプレイに時間を 要するのでDRBD以外を考えたい ©J-Stream Inc. All Rights Reserved. 16

17.

DBの冗長化 もっと素敵な伝え方を。 Jstream ユーザ DNSによる負荷分散 GSLB (広域負荷分散装置) ヘルスチェック Web (PHP) IP: 198.51.100.10 IP: 203.0.113.10 Web (PHP) IP: 198.51.100.20 Zabbix Server IP: 203.0.113.20 Zabbix Server IP: 198.51.100.40 DB IP: 203.0.113.40 DB DRBDを廃止、 2台のDBが起動した状態でのリアルタイム同期 = レプリケーションによるActive-Standby利用することに データセンタ A データセンタ B ©J-Stream Inc. All Rights Reserved. 17

18.

DBの冗長化 もっと素敵な伝え方を。 Jstream ユーザ DNSによる負荷分散 GSLB (広域負荷分散装置) ヘルスチェック Web (PHP) IP: 198.51.100.10 IP: 203.0.113.10 Web (PHP) IP: 198.51.100.20 Zabbix Server IP: 203.0.113.20 Zabbix Server IP: 198.51.100.40 DB IP: 203.0.113.40 DB データセンタ A データセンタ B ©J-Stream Inc. All Rights Reserved. 18

19.

DBの冗長化 もっと素敵な伝え方を。 Jstream ユーザ DNSによる負荷分散 GSLB (広域負荷分散装置) ヘルスチェック Web (PHP) IP: 198.51.100.10 IP: 203.0.113.10 Web (PHP) IP: 198.51.100.20 Zabbix Server IP: 203.0.113.20 Zabbix Server DBプロキシ IP: 198.51.100.40 DB IP: 203.0.113.40 DB データセンタ A データセンタ B ©J-Stream Inc. All Rights Reserved. 19

20.

DBの冗長化 もっと素敵な伝え方を。 Jstream ユーザ DNSによる負荷分散 GSLB (広域負荷分散装置) ヘルスチェック Web (PHP) IP: 198.51.100.10 IP: 203.0.113.10 Web (PHP) IP: 198.51.100.20 Zabbix Server IP: 203.0.113.20 Zabbix Server DBプロキシ IP: 198.51.100.40 DB IP: 203.0.113.40 DB データセンタ A データセンタ B DBへのクエリを透過的に処理する SQLのプロキシサーバ DBのヘルスチェックを行い フェールオーバ時にも 常にActive側にクエリを投げる ©J-Stream Inc. All Rights Reserved. 20

21.

DBの冗長化 もっと素敵な伝え方を。 Jstream ユーザ DNSによる負荷分散 GSLB (広域負荷分散装置) ヘルスチェック Web (PHP) IP: 198.51.100.10 IP: 203.0.113.10 Web (PHP) IP: 198.51.100.20 Zabbix Server IP: 203.0.113.20 Zabbix Server IP: 198.51.100.30 DBプロキシ IP: 203.0.113.30 DBプロキシ IP: 198.51.100.40 DB IP: 203.0.113.40 DB データセンタ A データセンタ B ©J-Stream Inc. All Rights Reserved. 21

22.

DBの冗長化 もっと素敵な伝え方を。 Jstream ユーザ DNSによる負荷分散 GSLB (広域負荷分散装置) ヘルスチェック Web (PHP) IP: 198.51.100.10 IP: 203.0.113.10 Web (PHP) IP: 198.51.100.20 Zabbix Server IP: 203.0.113.20 Zabbix Server IP: 198.51.100.30 DBプロキシ IP: 203.0.113.30 DBプロキシ IP: 198.51.100.40 DB IP: 203.0.113.40 DB データセンタ A データセンタ B 今度はDBプロキシをどうやって HA構成にするか ©J-Stream Inc. All Rights Reserved. 22

23.

DBの冗長化 もっと素敵な伝え方を。 Jstream ユーザ DNSによる負荷分散 GSLB (広域負荷分散装置) ヘルスチェック Web (PHP) IP: 198.51.100.10 IP: 203.0.113.10 Web (PHP) IP: 198.51.100.20 Zabbix Server IP: 203.0.113.20 Zabbix Server IP: 198.51.100.30 DBプロキシ IP: 203.0.113.30 DBプロキシ IP: 198.51.100.40 DB IP: 203.0.113.40 DB データセンタ A データセンタ B プロキシはどちらも同じ動きなので スタンドアロン x2で問題ない ©J-Stream Inc. All Rights Reserved. 23

24.

DBの冗長化 もっと素敵な伝え方を。 Jstream ユーザ DNSによる負荷分散 GSLB (広域負荷分散装置) ヘルスチェック Web (PHP) IP: 198.51.100.10 IP: 203.0.113.10 Web (PHP) IP: 198.51.100.20 Zabbix Server IP: 203.0.113.20 Zabbix Server IP: 198.51.100.30 DBプロキシ IP: 203.0.113.30 DBプロキシ IP: 198.51.100.40 DB IP: 203.0.113.40 DB データセンタ A データセンタ B Zabbix Serverに設定する IPアドレスが揃わない ©J-Stream Inc. All Rights Reserved. 24

25.

DBの冗長化 もっと素敵な伝え方を。 Jstream ユーザ DNSによる負荷分散 GSLB (広域負荷分散装置) ヘルスチェック Web (PHP) IP: 198.51.100.10 IP: 203.0.113.10 Web (PHP) IP: 198.51.100.20 Zabbix Server IP: 203.0.113.20 Zabbix Server IP: 127.0.0.1 DBプロキシ IP: 127.0.0.1 DBプロキシ IP: 198.51.100.40 DB IP: 203.0.113.40 DB データセンタ A データセンタ B zabbixのconfigを揃えるため、 ループバックIPを利用 ©J-Stream Inc. All Rights Reserved. 25

26.

DBの冗長化 もっと素敵な伝え方を。 Jstream ユーザ DNSによる負荷分散 GSLB (広域負荷分散装置) ヘルスチェック Web (PHP) IP: 203.0.113.10 IP: 203.0.113.20 Zabbix Server IP: 127.0.0.1 DBプロキシ IP: 127.0.0.1 DBプロキシ IP: 198.51.100.40 DB IP: 203.0.113.40 DB データセンタ A データセンタ B 127.0.0.1はループバックアドレスという 「自分自身」を意味する特殊なIPアドレス 実体として指し示すものは違うが、 Zabbix HAの設定上は同じIPアドレスを指定 DBプロキシがActive側のDBにクエリをプロキシするので 最終的には同じDBにアクセスされる ©J-Stream Inc. All Rights Reserved. 26

27.

DBの冗長化 もっと素敵な伝え方を。 Jstream ユーザ DNSによる負荷分散 GSLB (広域負荷分散装置) ヘルスチェック Web (PHP) IP: 203.0.113.10 IP: 203.0.113.20 Zabbix Server IP: 127.0.0.1 DBプロキシ IP: 127.0.0.1 DBプロキシ IP: 198.51.100.40 DB IP: 203.0.113.40 DB データセンタ A データセンタ B 127.0.0.1はループバックアドレスという 「自分自身」を意味する特殊なIPアドレス 実体として指し示すものは違うが、 Zabbix HAの設定上は同じIPアドレスを指定 DBプロキシがActive側のDBにクエリをプロキシするので 最終的には同じDBにアクセスされる 構築当時、公式ドキュメントのHAの項の "uses the same database (同じデータベースを使用)" の文言を、「DB設定には同じ値を指定」と 取り違えていました、、、 実はループバック利用せずとも、 それぞれでDB(プロキシ)のIPを 直接指定する方法でも動作しました ©J-Stream Inc. All Rights Reserved. 27

28.

DBの冗長化 もっと素敵な伝え方を。 Jstream ユーザ DNSによる負荷分散 GSLB (広域負荷分散装置) ヘルスチェック Web (PHP) IP: 198.51.100.20 IP: 203.0.113.20 Web (PHP) IP: 198.51.100.20 Zabbix Server IP: 203.0.113.20 Zabbix Server IP: 127.0.0.1 DBプロキシ IP: 127.0.0.1 DBプロキシ IP: 198.51.100.20 DB IP: 203.0.113.20 DB データセンタ A データセンタ B ©J-Stream Inc. All Rights Reserved. 28

29.

DBの選定 もっと素敵な伝え方を。 Jstream ・MySQL - 既存のzabbix環境で利用していた - DBプロキシにはProxySQLというツールを利用 ・PostgreSQL - 社内の他のインフラ系ツールで利用している - DBプロキシにはPgpool-IIというツールを利用 本業はネットワークエンジニアリングのため、 DB固有のトラブルにハマりたくない ノウハウを再利用できるほうが嬉しい PostgreSQL (ストリーミングレプリケーション) + Pgpool-II ©J-Stream Inc. All Rights Reserved. 29

30.

最終構成 もっと素敵な伝え方を。 Jstream ユーザ DNSによる負荷分散 GSLB (広域負荷分散装置) ヘルスチェック GLSBを用いて Active-Activeの分散 ZabbixのHA機能での Active-Standby構成 PostgreSQLのHAのため Pgpool-IIを導入 PostgreSQLの機能での レプリケーション & Pgpool-IIによるHA Web (PHP) IP: 198.51.100.20 IP: 203.0.113.20 Web (PHP) IP: 198.51.100.20 Zabbix Server IP: 203.0.113.20 Zabbix Server IP: 127.0.0.1 Pgpool-II IP: 127.0.0.1 Pgpool-II IP: 198.51.100.20 DB (PostgreSQL) IP: 203.0.113.20 DB (PostgreSQL) データセンタ A データセンタ B レプリケーション ©J-Stream Inc. All Rights Reserved. 30

31.

今後の課題点 もっと素敵な伝え方を。 Jstream ユーザ DNSによる負荷分散 GSLB (広域負荷分散装置) ヘルスチェック GLSBを用いて Active-Activeの分散 ZabbixのHA機能での Active-Standby構成 PostgreSQLのHAのため Pgpool-IIを導入 PostgreSQLの機能での レプリケーション & Pgpool-IIによるHA Web (PHP) Zabbix Server Zabbix Server Pgpool-II Pgpool-II DB (PostgreSQL) DB (PostgreSQL) データセンタ A データセンタ B レプリケーション フェールオーバー周りは注意が必要 PostgreSQLはレプリケーションの機能はあるが、自動フェールオーバーの機能はなく Pgpool-IIがPostgreSQLのヘルスチェック及びフェールオーバーをキックする 2台のPgpool-IIは完全に独立しているため DBがダウンしたときに、フェールオーバーが2回発生してしまう ©J-Stream Inc. All Rights Reserved. 31

32.

Pgpool-IIによるフェールオーバー もっと素敵な伝え方を。 Jstream ・Pgpool-IIが定期的にバックエンドのpostgresqlにヘルスチェックを行う ・ヘルスチェックが失敗するとフェールオーバースクリプトがキックされる - ヘルスチェックが失敗したノードをdownとしてマークし、プロキシ先から除外 - Standbyだったノードを昇格させ、Activeとして振る舞うようにさせる ・同期レプリケーションのため、Standby側もダウンした際には切り離しが必要 普通にフェールオーバーを仕込むと、、? ・フェールオーバーがダブる ・L3で冗長化すると経路上のNW障害によるヘルスチェック失敗がある - フェールオーバーを早まると、スプリットブレーンが発生してしまう ©J-Stream Inc. All Rights Reserved. 32

33.

Pgpool-IIによるフェールオーバー もっと素敵な伝え方を。 Jstream 障害のパターン分けを行い、必要に合わせてフェールオーバーをキックするように ・Active側/Standby側のサーバ全体がハング ・Active側/Standby側のpgpoolがハング ・Active側/Standby側のpostgresqlがハング ・Active-Standby間のネットワーク疎通がダウン ©J-Stream Inc. All Rights Reserved. 33

34.

Pgpool-IIによるフェールオーバー もっと素敵な伝え方を。 Jstream ・各ホストのPgpool-IIは、同一ホスト上のPostgreSQLのフェールオーバーのみ実施 ・Active・Standbyそれぞれで独立してフェールオーバーをキック Active側 ダウンしたDBは自分 (Active機) Yes (何もしない) No Standbyの切り離し Standby側 ダウンしたDBは自分 (Standby機) Yes (何もしない) No 別経路でのDBアクセス 成功 (何もしない) 失敗 Standbyの昇格 ©J-Stream Inc. All Rights Reserved. 34

35.

構築で苦労した点 もっと素敵な伝え方を。 Jstream ・珍しい(想定されていないだろう)構成のため、何が正解であるかがわからない - 本当に求めているものができたか検証を繰り返し行うひつようがある ・要件定義をしっかり行い、1つずつテストを実施した ・Pgpool-IIのフェールオーバー - これも想定されていないだろう構成のため起こり得るパターンを列挙して1つずつテスト ・今後のアップデート - アップデートによりこの構成だと上手くいかない機能が出てきてしまうのではないか - 都度検証が必要 ・それはそれで楽しいからヨシ? ©J-Stream Inc. All Rights Reserved. 35