✕✕の話_大LT2024春 in Aizu_20240511

889 Views

May 14, 24

スライド概要

インフラ運用における拠点をまたいだ冗長化について。
※2024年5月11日(土)に開催された会津大学公認の技術系サークルZli(ジライ)主催の「大LT 2024 春 in Aizu」でのLT資料です。

profile-image

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

シェア

またはPlayer版

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

関連スライド

各ページのテキスト
1.

Zli LT 2024 春 ✕✕の話 拠 点 を ま た い だ 冗 長 化 株式会社 Jストリーム ネットワークインフラ部 ネットワークインフラ課 テックリード 登壇者:べにはら 2024-05-11

2.

タイトルの謎 「✕✕の話」???? ©J-Stream Inc. All Rights Reserved. 2

3.

タイトルの謎 「✕✕の話」???? ちなみに昨年度のZli LTタイトル 「尖った話」 ©J-Stream Inc. All Rights Reserved. 3

4.

タイトルの謎 「✕✕の話」???? ちなみに昨年度のZli LTタイトル 「尖った話」 最後まで聞けばわかるはず! 10分間よろしくね! ©J-Stream Inc. All Rights Reserved. 4

5.

自己紹介 株式会社Jストリーム ネットワークインフラ部 テックリード べにはら • 2020年度入社、新卒5年目 • I am ネットワークエンジニア - お仕事では、Jストリームの配信基盤となるNW機器・サーバの面倒を見てる - 普段コーディングはあんまりしない - PHP + Laravel チョットデキル ちょっとできる • プライベートでもネットワーク触ってる - エンタープライズ機器をおうちに置いてキャッキャウフフする人 - イベントのネットワークスタッフとして参加したりする ©J-Stream Inc. All Rights Reserved. 5

6.

自己紹介 Jst社員のおうちを繋いで作ってるminecraftの構成図 (べにはらside) ©J-Stream Inc. All Rights Reserved. 6

7.

インフラ運用に欠かせないもの インフラ運用に欠かせないもの ©J-Stream Inc. All Rights Reserved. 7

8.

インフラ運用に欠かせないもの インフラ運用に欠かせないもの 高スペックなサーバ ネットワークの専門知識 ©J-Stream Inc. All Rights Reserved. 品質の高い回線 8

9.

インフラ運用に欠かせないもの インフラ運用に欠かせないもの 高スペックなサーバ ネットワークの専門知識 品質の高い回線 24/365体制の監視システム ©J-Stream Inc. All Rights Reserved. 9

10.

インフラ運用に欠かせないもの インフラ運用に欠かせないもの 高スペックなサーバ ネットワークの専門知識 品質の高い回線 24/365体制の監視システム 今日は監視システムの冗長化とその設計についてお話します ©J-Stream Inc. All Rights Reserved. 10

11.

ZABBIX • 弊社でも利用している、オープンソースのインフラ監視ツール • 機器の死活監視やリソース監視を行い、異常があればアラート上げてくれる - アラートはメールだけでなくSlackや、頑張ればPATLITEなども連携できる 異常を検知したら メールなどでアラート通知 死活監視・リソース監視 zabbixサーバ ユーザ 配信サーバなど ©J-Stream Inc. All Rights Reserved. 11

12.

ZABBIXの冗長化 SPOF(Single Point Of Failure):単一障害点 システムの構成要素のうち、その箇所が壊れるとシステム全体が障害となってしまう要素・部分 ©J-Stream Inc. All Rights Reserved. 12

13.

ZABBIXの冗長化 SPOF(Single Point Of Failure):単一障害点 システムの構成要素のうち、その箇所が壊れるとシステム全体が障害となってしまう要素・部分 Web(PHP) zabbixは一般的な - Web - App - DB の3層構造 App(zabbix-server) DB(MySQL) ©J-Stream Inc. All Rights Reserved. 13

14.

ZABBIXの冗長化 SPOF(Single Point Of Failure):単一障害点 システムの構成要素のうち、その箇所が壊れるとシステム全体が障害となってしまう要素・部分 VIPを使って常にActiveな方のサーバにアクセス Active Web(PHP) VIP = Virtual IP pacemaker + DRBDを用いた 一般的なActive/Standby Standby Web(PHP) App(zabbix-server) App(zabbix-server) DB(MySQL) DB(MySQL) ©J-Stream Inc. All Rights Reserved. DBはDRBDを用いて同期 14

15.

ZABBIXの冗長化 SPOF(Single Point Of Failure):単一障害点 システムの構成要素のうち、その箇所が壊れるとシステム全体が障害となってしまう要素・部分 VIPを使って常にActiveな方のサーバにアクセス サーバに障害発生! Standby Web(PHP) VIP = Virtual IP pacemaker + DRBDを用いた 一般的なActive/Standby Active Web(PHP) App(zabbix-server) App(zabbix-server) DB(MySQL) DB(MySQL) ©J-Stream Inc. All Rights Reserved. DBはDRBDを用いて同期 15

16.

Pacemakerによる冗長化の問題点 VIPを使って常にActiveな方のサーバにアクセス Active Web(PHP) VIP = Virtual IP pacemaker + DRBDを用いた 一般的なActive/Standby Standby Web(PHP) App(zabbix-server) App(zabbix-server) DB(MySQL) DB(MySQL) ©J-Stream Inc. All Rights Reserved. DBはDRBDを用いて同期 16

17.

Pacemakerによる冗長化の問題点 監視データが肥大化してきたことにより、 VIPを使って常にActiveな方のサーバにアクセス Pacemakerによる切り替えのタイミングにて、 Active側のMySQLのシャットダウン時間が非常に長い VIP = Virtual IP Active Standby Web(PHP) pacemaker + DRBDを用いた 一般的なActive/Standby Web(PHP) App(zabbix-server) App(zabbix-server) DB(MySQL) DB(MySQL) ©J-Stream Inc. All Rights Reserved. DBはDRBDを用いて同期 17

18.

Pacemakerによる冗長化の問題点 データセンタ VIPを使って常にActiveな方のサーバにアクセス Active Web(PHP) VIP = Virtual IP pacemaker + DRBDを用いた 一般的なActive/Standby Standby Web(PHP) App(zabbix-server) App(zabbix-server) DB(MySQL) DB(MySQL) ©J-Stream Inc. All Rights Reserved. DBはDRBDを用いて同期 18

19.

Pacemakerによる冗長化の問題点 このデータセンタ(拠点)がSPOF データセンタ VIPを使って常にActiveな方のサーバにアクセス Active Web(PHP) VIP = Virtual IP pacemaker + DRBDを用いた 一般的なActive/Standby Standby Web(PHP) App(zabbix-server) App(zabbix-server) DB(MySQL) DB(MySQL) ©J-Stream Inc. All Rights Reserved. DBはDRBDを用いて同期 19

20.

Pacemakerによる冗長化の問題点 このデータセンタ(拠点)がSPOF データセンタ VIPを使って常にActiveな方のサーバにアクセス Active VIP = Virtual IP Standby 弊社は都内複数箇所、その他西日本にも複数拠点があり Web(PHP) Web(PHP) pacemaker + DRBDを用いた 一般的なActive/Standby 動画配信サービスのため全国に跨って配信拠点を持つ App(zabbix-server) App(zabbix-server) DB(MySQL) DB(MySQL) ©J-Stream Inc. All Rights Reserved. DBはDRBDを用いて同期 20

21.

データセンタの冗長化 ユーザ データセンタ A ©J-Stream Inc. All Rights Reserved. データセンタ B 21

22.

Webサーバの冗長化 ユーザ DNSによる負荷分散 GSLB(広域負荷分散装置) ヘルスチェック GLSBを用いて Active-Activeの分散 ©J-Stream Inc. All Rights Reserved. IP: A.A.A.A IP: B.B.B.B Web(PHP) Web(PHP) データセンタ A データセンタ B 22

23.

Webサーバの冗長化 ユーザ DNSによる負荷分散 GSLB(広域負荷分散装置) ヘルスチェック GLSBを用いて Active-Activeの分散 IP: A.A.A.A Web(PHP) IP: B.B.B.B Web(PHP) DNS問い合わせに対して適切なIPアドレスを返す高性能DNSサーバ 定期的に指定したIPアドレスのヘルスチェックを行うことで、 チェックに失敗したIPアドレスは応答から除外したり、 問い合わせ元ユーザのIPにより応答をカスタマイズしたりできる データセンタ A ©J-Stream Inc. All Rights Reserved. データセンタ B 23

24.

Appサーバの冗長化 ユーザ DNSによる負荷分散 GSLB(広域負荷分散装置) ヘルスチェック GLSBを用いて Active-Activeの分散 ZabbixのHA機能での Active-Standby構成 ©J-Stream Inc. All Rights Reserved. IP: A.A.A.A Web(PHP) IP: A.A.A.A IP: B.B.B.B Web(PHP) IP: B.B.B.B App(zabbix-server) App(zabbix-server) データセンタ A データセンタ B 24

25.

Appサーバの冗長化 ユーザ DNSによる負荷分散 GSLB(広域負荷分散装置) ヘルスチェック GLSBを用いて Active-Activeの分散 ZabbixのHA機能での Active-Standby構成 IP: A.A.A.A Web(PHP) IP: A.A.A.A App(zabbix-server) IP: B.B.B.B Web(PHP) IP: B.B.B.B App(zabbix-server) Zabbix 6.0より標準機能でのHA構成をサポート 外部ツールなしでActive-Standbyによる冗長化ができるように ただし、両方で同じDBを参照する必要がある ※正確にはHAの状態確認のためにWebからDBへのアクセスがあったりするが、ややこしくなるので図の中では省略 データセンタ A ©J-Stream Inc. All Rights Reserved. データセンタ B 25

26.

DBサーバの冗長化 ユーザ DNSによる負荷分散 GSLB(広域負荷分散装置) ヘルスチェック GLSBを用いて Active-Activeの分散 IP: A.A.A.A IP: B.B.B.B Web(PHP) Web(PHP) IP: A.A.A.A IP: B.B.B.B ZabbixのHA機能での Active-Standby構成 App(zabbix-server) App(zabbix-server) PostgreSQLの機能での レプリケーション DB(PostgreSQL) DB(PostgreSQL) レプリケーション データセンタ A ©J-Stream Inc. All Rights Reserved. データセンタ B 26

27.

DBサーバの冗長化 ユーザ DRBDを廃止、 2台のDBが起動した状態でのリアルタイム同期 IP: A.A.A.A =レプリケーションを利用することに GLSBを用いて Web(PHP) Active-Activeの分散 レプリケーションを標準で対応するPostgreSQLを採用 ZabbixのHA機能での Active-Standby構成 PostgreSQLの機能での レプリケーション IP: A.A.A.A GSLB(広域負荷分散装置) ヘルスチェック IP: B.B.B.B Web(PHP) IP: B.B.B.B App(zabbix-server) App(zabbix-server) IP: A.A.A.A IP: B.B.B.B DB(PostgreSQL) DB(PostgreSQL) レプリケーション データセンタ A ©J-Stream Inc. All Rights Reserved. DNSによる負荷分散 データセンタ B 27

28.

DBサーバの冗長化 ユーザ DNSによる負荷分散 GSLB(広域負荷分散装置) ヘルスチェック GLSBを用いて Active-Activeの分散 ZabbixのHA機能での Active-Standby構成 PostgreSQLの機能での レプリケーション IP: A.A.A.A IP: B.B.B.B Web(PHP) Web(PHP) IP: A.A.A.A IP: B.B.B.B App(zabbix-server) App(zabbix-server) IP: A.A.A.A IP: B.B.B.B DB(PostgreSQL) DB(PostgreSQL) レプリケーション PostgreSQLのレプリケーションはデータ同期のみで 障害発生時の自動フェールオーバの機能が無い データセンタ A ©J-Stream Inc. All Rights Reserved. データセンタ B 28

29.

DBサーバの冗長化 ユーザ DNSによる負荷分散 GSLB(広域負荷分散装置) ヘルスチェック GLSBを用いて Active-Activeの分散 ZabbixのHA機能での Active-Standby構成 PostgreSQLのHAのため Pgpool-IIを導入 PostgreSQLの機能での レプリケーション & Pgpool-IIによるHA IP: A.A.A.A Web(PHP) Web(PHP) IP: A.A.A.A IP: B.B.B.B App(zabbix-server) App(zabbix-server) IP: A.A.A.A Pgpool-II IP: A.A.A.A IP: B.B.B.B DB(PostgreSQL) DB(PostgreSQL) レプリケーション データセンタ A ©J-Stream Inc. All Rights Reserved. IP: B.B.B.B データセンタ B 29

30.

DBサーバの冗長化 ユーザ PostgreSQLのクエリを透過的に処理する SQLのプロキシサーバのような動作 IP: A.A.A.A GLSBを用いて PostgreSQLのヘルスチェックを行い Web(PHP) Active-Activeの分散 主系がダウンしたときにはフェールオーバをキックできる DNSによる負荷分散 GSLB(広域負荷分散装置) ヘルスチェック IP: B.B.B.B Web(PHP) フェールオーバ時にも常にActive側にクエリを投げる ZabbixのHA機能での Active-Standby構成 PostgreSQLのHAのため Pgpool-IIを導入 PostgreSQLの機能での レプリケーション & Pgpool-IIによるHA IP: A.A.A.A App(zabbix-server) App(zabbix-server) IP: A.A.A.A Pgpool-II IP: A.A.A.A IP: B.B.B.B DB(PostgreSQL) DB(PostgreSQL) レプリケーション データセンタ A ©J-Stream Inc. All Rights Reserved. IP: B.B.B.B データセンタ B 30

31.

拠点をまたげない!! ユーザ DNSによる負荷分散 GSLB(広域負荷分散装置) ヘルスチェック GLSBを用いて Active-Activeの分散 IP: A.A.A.A IP: B.B.B.B Web(PHP) Web(PHP) IP: A.A.A.A IP: B.B.B.B ZabbixのHA機能での App(zabbix-server) ここのPgpool-IIがSPOF! Active-Standby構成 PostgreSQLのHAのため Pgpool-IIを導入 PostgreSQLの機能での レプリケーション & Pgpool-IIによるHA IP: A.A.A.A Pgpool-II IP: A.A.A.A IP: B.B.B.B DB(PostgreSQL) DB(PostgreSQL) レプリケーション データセンタ A ©J-Stream Inc. All Rights Reserved. App(zabbix-server) データセンタ B 31

32.

拠点をまたげない!! DNSによる負荷分散 ユーザ GLSBを用いて Active-Activeの分散 ZabbixのHA機能での Active-Standby構成 PostgreSQLのHAのため Pgpool-IIを導入 PostgreSQLの機能での レプリケーション & Pgpool-IIによるHA IP: A.A.A.A Web(PHP) IP: A.A.A.A ヘルスチェック IP: B.B.B.B App(zabbix-server) App(zabbix-server) IP: A.A.A.A IP: B.B.B.B Pgpool-II Pgpool-II IP: A.A.A.A IP: B.B.B.B DB(PostgreSQL) レプリケーション データセンタ A ©J-Stream Inc. All Rights Reserved. ZabbixのHA機能の制限により IP: B.B.B.B DBは1つのIPしか指定できない Web(PHP) GSLB(広域負荷分散装置) DB(PostgreSQL) Pgpool-IIにはVIPを用いたHA機能はあるものの、 拠点をまたいでいる場合はVIPは使えない データセンタ B 32

33.

特殊なIPアドレス ユーザ DNSによる負荷分散 GSLB(広域負荷分散装置) ヘルスチェック GLSBを用いて Active-Activeの分散 ZabbixのHA機能での Active-Standby構成 PostgreSQLのHAのため Pgpool-IIを導入 PostgreSQLの機能での レプリケーション & Pgpool-IIによるHA IP: A.A.A.A Web(PHP) Web(PHP) IP: A.A.A.A IP: B.B.B.B App(zabbix-server) App(zabbix-server) IP: 127.0.0.1 IP: 127.0.0.1 Pgpool-II Pgpool-II IP: A.A.A.A IP: B.B.B.B DB(PostgreSQL) DB(PostgreSQL) レプリケーション データセンタ A ©J-Stream Inc. All Rights Reserved. IP: B.B.B.B データセンタ B 33

34.

特殊なIPアドレス 127.0.0.1はループバックアドレスという ユーザ 「自分自身」を意味する特殊なIPアドレス IP: A.A.A.A IP: 127.0.0.1 IP: B.B.B.B App(zabbix-server) IP: 127.0.0.1 Pgpool-II Pgpool-II IP: A.A.A.A IP: B.B.B.B DB(PostgreSQL) DB(PostgreSQL) レプリケーション データセンタ A ©J-Stream Inc. All Rights Reserved. ヘルスチェック Web(PHP) 最終的にはPgpool-IIがActive側のDBにクエリをプロキシするので IP: A.A.A.A ZabbixのHA機能での 最終的には同じDBにアクセスされる App(zabbix-server) Active-Standby構成 PostgreSQLの機能での レプリケーション & Pgpool-IIによるHA GSLB(広域負荷分散装置) IP: B.B.B.B 実体として指し示すものは違うが、 GLSBを用いて Web(PHP) Zabbix HAの設定上は同じIPアドレスを指定 Active-Activeの分散 PostgreSQLのHAのため Pgpool-IIを導入 DNSによる負荷分散 Pgpool-IIはHAを組まず、スタンドアロン x2 データセンタ B 34

35.

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

36.

課題点 ユーザ DNSによる負荷分散 フェールオーバー周りは注意が必要 GLSBを用いて Active-Activeの分散 ZabbixのHA機能での Active-Standby構成 PostgreSQLのHAのため Pgpool-IIを導入 PostgreSQLの機能での レプリケーション & Pgpool-IIによるHA IP: A.A.A.A ヘルスチェック IP: B.B.B.B 2台のPgpool-IIは完全に独立しているため Web(PHP) Web(PHP) DBがダウンしたときに、フェールオーバーが2回発生してしまう フェールオーバーの設定のチューニングにより解決 IP: A.A.A.A IP: B.B.B.B App(zabbix-server) App(zabbix-server) IP: 127.0.0.1 IP: 127.0.0.1 Pgpool-II Pgpool-II IP: A.A.A.A IP: B.B.B.B DB(PostgreSQL) DB(PostgreSQL) レプリケーション データセンタ A ©J-Stream Inc. All Rights Reserved. GSLB(広域負荷分散装置) データセンタ B 36

37.

ところで、、、 ユーザ DNSによる負荷分散 GSLB(広域負荷分散装置) ヘルスチェック GLSBを用いて Active-Activeの分散 ZabbixのHA機能での Active-Standby構成 PostgreSQLのHAのため Pgpool-IIを導入 PostgreSQLの機能での レプリケーション & Pgpool-IIによるHA IP: A.A.A.A Web(PHP) Web(PHP) IP: A.A.A.A IP: B.B.B.B App(zabbix-server) App(zabbix-server) IP: 127.0.0.1 IP: 127.0.0.1 Pgpool-II Pgpool-II IP: A.A.A.A IP: B.B.B.B DB(PostgreSQL) DB(PostgreSQL) レプリケーション データセンタ A ©J-Stream Inc. All Rights Reserved. IP: B.B.B.B データセンタ B 37

38.

ところで、、、 ユーザ DNSによる負荷分散 GSLB(広域負荷分散装置) ヘルスチェック GLSBを用いて Active-Activeの分散 ZabbixのHA機能での Active-Standby構成 PostgreSQLのHAのため Pgpool-IIを導入 PostgreSQLの機能での レプリケーション & Pgpool-IIによるHA IP: A.A.A.A Web(PHP) Web(PHP) IP: A.A.A.A IP: B.B.B.B App(zabbix-server) App(zabbix-server) IP: 127.0.0.1 IP: 127.0.0.1 Pgpool-II Pgpool-II IP: A.A.A.A IP: B.B.B.B DB(PostgreSQL) DB(PostgreSQL) レプリケーション データセンタ A ©J-Stream Inc. All Rights Reserved. IP: B.B.B.B データセンタ B 38

39.

ところで、、、 ユーザ DNSによる負荷分散 GSLB(広域負荷分散装置) ヘルスチェック GLSBを用いて Active-Activeの分散 ZabbixのHA機能での Active-Standby構成 PostgreSQLのHAのため Pgpool-IIを導入 PostgreSQLの機能での レプリケーション & Pgpool-IIによるHA IP: A.A.A.A Web(PHP) Web(PHP) IP: A.A.A.A IP: B.B.B.B App(zabbix-server) App(zabbix-server) IP: 127.0.0.1 IP: 127.0.0.1 Pgpool-II Pgpool-II IP: A.A.A.A IP: B.B.B.B DB(PostgreSQL) DB(PostgreSQL) レプリケーション データセンタ A ©J-Stream Inc. All Rights Reserved. IP: B.B.B.B データセンタ B 39

40.

ところで、、、 ユーザ DNSによる負荷分散 GSLB(広域負荷分散装置) ヘルスチェック GLSBを用いて Active-Activeの分散 ZabbixのHA機能での Active-Standby構成 PostgreSQLのHAのため Pgpool-IIを導入 PostgreSQLの機能での レプリケーション & Pgpool-IIによるHA IP: A.A.A.A Web(PHP) Web(PHP) IP: A.A.A.A IP: B.B.B.B App(zabbix-server) App(zabbix-server) IP: 127.0.0.1 IP: 127.0.0.1 Pgpool-II Pgpool-II IP: A.A.A.A IP: B.B.B.B DB(PostgreSQL) DB(PostgreSQL) レプリケーション データセンタ A ©J-Stream Inc. All Rights Reserved. IP: B.B.B.B データセンタ B 40

41.

タイトル回収 ✕ ✕ の話 ©J-Stream Inc. All Rights Reserved. 41

42.

return 0; 拠点をまたいだ冗長化 ✕ ✕ の話 暇な人はタイトルスライドを拡大してみてね! ©J-Stream Inc. All Rights Reserved. 42