windows azure で 2/29 に起こった問題のまとめ
DESCRIPTION
TRANSCRIPT
Windows Azure で 2/29 に起こった問題のまとめ
Japan Windows Azure User Group
Microsoft MVP for Windows Azure
はるたま
http://twitter.com/harutama
自己紹介
2 @harutama
本セッションのゴール
• 2012年2月29日に発生した障害に関して正しく理解するため、Windows Azureの内部構造に関して理解すること。
• 障害自体に関する説明は軽めになります。 詳細は以下のURLを参照してください。 http://www.microsoft.com/japan/windowsazure/disruption229/
3
参考リソース
• Inside Windows Azure: the cloud operating system http://channel9.msdn.com/Events/BUILD/BUILD2011/SAC-853T
• 蒼の王座 Windows Azure Roleアーキテクチャ http://sqlazure.jp/b/windows-azure/568/
• Inside Windows Azure http://www.microsoft.com/switzerland/msdn/fr/techdays/techdays11.aspx
• A Deep Look Inside Windows Azure AND ITS Virtual Machine http://www.slideshare.net/ylew15/a-deep-look-inside-windows-azure-and-its-vm
4
5
ところで
6
Windows Azure として管理されてる コンピューティング
リソースって どのくらい?
7
People’s ears usually perk-up when they hear Windows Azure uses more server compute capacity than was used on the planet in 1999.
http://blogs.msdn.com/b/windowsazure/archive/2012/05/24/datacenter-expansion-and-capacity-planning.aspx
PC Watch 1999年10大ニュース
順位 項目
1 AMD Athlon登場
2 プレイステーション2発表
3 10万円PC登場、大手メーカーまで波及
4 台湾大地震により、国内PC市場に大きな影響
5 Microsoftと司法省の裁判で、Microsoftに不利な事実認定下る
6 アップル、iMacのデザイン盗用で各社を提訴
7 SDRAM価格高騰、128MBで2万円を越える
8 Pentium III登場、年末には0.18μmプロセスの新世代へ
9 Intel 820チップセット発表直前で延期
10 iモード携帯電話、急速に普及
8
http://pc.watch.impress.co.jp/docs/article/991224/best10.htm
Windows Azure の アーキテクチャ
9
物理アーキテクチャ
10
ラック内部
スイッチ
物理マシン
データセンター ルーター
ルーターと ロードバランサ
データセンター
PDU
外側から見たラックの様子
11
ラックの中身
12
論理アーキテクチャ • データセンター内の物理マシンは「クラスター」という
単位で分割されている。
– 1つのクラスタは約1000台の物理マシンで構成される
– 不具合の影響がクラスター内で閉じ込められるような設計
• 各クラスターは「ファブリックコントローラー(FC)」によって管理されている。
13
データセンター ルーター
クラスター
ファブリック コントローラー
ファブリック コントローラー
…
…
クラスターの内部構造と ファブリックコントローラー
14
ラック内部
ラック内にある1台の物理マシンは ファブリックコントローラー用に予約される
ラック内部
ラック内部
クラスター内にある 1つのファブリック コントローラーは
マスターとして動作する
他のファブリック コントローラーとは
マスター経由で 状態を同期している
ルーターと ロードバランサ
ファブリックコントローラー
15
ファブリックコントローラーの役目
• データセンターにおけるカーネルの役割
– データセンターの資源の管理
– Azureで動作するアプリケーションの管理
16
物理マシン
Office SQL
Server
データセンター
Exchange Online
SQL Azure
ファブリックコントローラーの仕事
• リソースの割り当て
– 新しい仮想マシンの作成(もちろん効率的に)
– 仮想マシンのスケールアップ・スケールアウトの対応
• リソースのプロビジョニング
– 物理マシンが故障した際は健全なマシンに移動させる
• サービスのライフサイクル管理
– アプリケーションのアップデート
– ゲストOSの自動アップデート
• サービスのヘルスチェック
– アプリケーションの死活監視
– ゲストOSの状態管理
17
起動の仕組み
• ユーティリティファブリックコントローラー により起動される。
– ファブリックコントローラーの複製元
– アップデートの際にも使用される
• ユーティリティファブリックコントローラーは各ファブリックコントローラーのFeed (Datacenter.xml)を購読している。
– 各サーバーのIPアドレス
– サービスに割り当てるためにプールされたIP
– ネットワーク機器やPDU(Power Distribution Unit)のIPアドレス
18
ファブリックコントローラーの中身
• 仮想マシンを作成するための仕組みを持っている
– 各種のイメージファイル
• 物理マシンのメンテナンス用OS
• ホスト用OS
• ロールインスタンス用OS
– 配布するための仕組み
• PXEサーバー
• Windows 展開サービス (Windows Deployment Services)
19
ファブリックコントローラー
メンテ OS
ホスト OS
ロール OS
Windows 展開サービス
PXE サーバー
ノード
20
クラスター
3種類の物理マシン
21
ラック内部
ラック内部
ラック内部
ルーターと ロードバランサ
レプリカ ファブリック
コントローラー
プライマリー ファブリック
コントローラー
ノード
ノードの中身 • ノード上では、ホストVM(1個)とアプリVM(n個)が
動作している。
• アプリVMとホストVMは、エージェント同士が通信する。
• ファブリックコントローラーには、ホストエージェントからアプリケーションVMの情報が伝えられる。
22
ノード
ファブリック コントローラー
ハイパーバイザー
ホスト OS
アプリ VM
ホスト エージェント
ゲスト エージェント
ノードの準備が完了するまで
23
(1)ノードのブート
• ノードに電源が投入されると、ファブリック コントローラーが持っているメンテナンスOSで PXEブートされる。
24
ノード ファブリックコントローラー
メンテ OS
ホスト OS
ロール OS
Windows 展開サービス
PXE サーバー
エージェント
メンテナンスOS
(2)ホストOSのインストール
• エージェントはホストOSをインストールする
– ノードが持つ物理ディスクをフォーマット
– ファブリックコントローラーのWindows 展開サービス からインストールされる
25
ノード ファブリックコントローラー
メンテ OS
ホスト OS
ロール OS
Windows 展開サービス
PXE サーバー
エージェント
メンテナンスOS
(3)sysprepの実行
• ノードが再起動してホストOSがブートされる。
• sysprepコマンドを実行して新しいSIDを作成。 その後、再び再起動。
26
ノード ファブリックコントローラー
メンテ OS
ホスト OS
ロール OS
Windows 展開サービス
PXE サーバー ハイパーバイザー
ホスト OS
sysprep/specialize
(4)準備完了!
• ホストOS内で動作しているホストエージェントがファブリックコントローラーとの通信を開始。
27
ノード ファブリックコントローラー
ハイパーバイザー
メンテ OS
ホスト OS
ロール OS
Windows 展開サービス
PXE サーバー
ホスト OS
ホスト エージェント
(5)その後
• 各ノードが持っているイメージリポジトリに、ファブリックコントローラーが持っている OSイメージを配布する。
– 各種ロールのOSイメージやzipファイルなど
28
ノード ファブリックコントローラー
ハイパーバイザー
メンテ OS
ホスト OS
ロール OS
Windows 展開サービス
PXE サーバー
ホスト OS
ホスト エージェント
外から見たWindows Azure
29
RDFE
データセンター
外から見たWindows Azure
30
ファブリック コントローラー
管理ポータル Windows Azure
PowerShell Cmdlets
ファブリック コントローラー
…
RDFEって何?
• RedDog Front End の略称
– Windows Azureに対するAPIをインターネットに公開しているフロントエンド
– ユーザからのすべてのリクエストはRDFEを通る
• Red Dog って何?
– Windows Azureがまだ開発中だった頃のコードネーム
– ちょっと間違えていたらPink Poodleになっていた http://japan.zdnet.com/cio/sp_07microsoft/20384470/
31
Pink Poodle? なにそれ?
32
RDFEの役割 • Windows Azureのフロントエンドとしての役目
– サブスクリプションの管理
– 課金のカウント
– 各種サービスの管理
• ストレージとコンピュートのインスタンスを効率良く運用する
– データセンターリージョンの決定
– アフィニティグループの考慮
– データセンターのVirtual IPや ノードの状況も考えつつ
33
アプリケーションのデプロイ
34
(1)ユーザーからの指示
• 新しいパッケージをデプロイする際、クライアントから .csdefファイルがRDFEに対してアップロードされる。
35
RDFE
クライアント ノード
ファブリック コントローラー
ハイパーバイザー
ホスト OS
ホスト エージェント
.csdef ファイル
(2)クラスターの選択
• RDFEは適切な状態にあるデータセンター内のクラスターを管理しているファブリックコントローラーを選択する。
– 指定されたリージョンのデータセンターの中で、クラスターの負荷状況やIPの利用状況などなどを考慮する
36
RDFE
クライアント ノード
ファブリック コントローラー
ハイパーバイザー
ホスト OS
ホスト エージェント
.csdef ファイル
(3)ノードの選択
• ファブリックコントローラーはアプリケーションが動作 するのに適切なノードを選択する。
– アプリケーションが要求するインスタンスのサイズや数を考慮
37
RDFE
ノード
ファブリック コントローラー
ハイパーバイザー
ホスト OS
ホスト エージェント
クライアント
(4)VMの作成 • アプリケーションが動作する仮想マシンを作成する。
これが最終的にロールインスタンスとなる。
– VMの元となるOSイメージ(Dドライブ)はホストにあるイメージリポジトリ内にある。
– ローカルディスク領域(Cドライブ)とロールが配置される領域(EもしくはFドライブ)は動的にイメージが生成される。
38
RDFE
ノード
ファブリック コントローラー
ハイパーバイザー
ホスト OS
アプリ VM
ホスト エージェント
クライアント
(5)内部通信の確立 • エージェントの間での通信を確立させる。
このとき通信を保護するための転送証明書をゲスト側で作成し、公開鍵だけをホスト側に送る。
• エージェント間通信が確立すると、ホストエージェントはゲストエージェントのハートビート監視を開始する。
39
ノード
ファブリック コントローラー
ハイパーバイザー
ホスト OS
アプリ VM
ホスト エージェント
ゲスト エージェント
秘密鍵
公開鍵
(6)外部通信の設定
• 仮想マシンのネットワークを設定する
– 外部につながるDynamic IPを割り当てる
– 内部のVirtual IPとポートを設定し、外部のDynamic IPを紐付ける
– 仮想マシン間の通信にパケットフィルターを適用
– 外部と内部をつなぐロードバランサーの設定を行う
40
ノード
ファブリック コントローラー
ハイパーバイザー
ホスト OS
アプリ VM
ホスト エージェント
ゲスト エージェント
ルーター
ロードバランサー
サービスの監視
• ファブリックコントローラーは、ソフト・ハードの監視によって、サービスの可用性を管理する。
– 基本的にハートビートを監視
– 影響のあるノードは自動的に修復される
41
問題の種類 検出の方法 対処方法
ロールインスタンスのクラッシュ
ファブリックコントローラーが ゲストエージェント経由で監視
・ロールを再起動
ゲストVMやゲストエージェントの クラッシュ
ホストエージェントがファブリックコントローラーにハートビートがなくなったことを警告
・ロールの再起動や、ゲストVMの再起動
ホストOSやホストエージェントの クラッシュ
ファブリックコントローラーが ホストエージェントの ハートビートを監視
・ロールの回復を試みる ・他ノードにロールをマイグレート
ノードの ハードウエア障害
ホストエージェントが ファブリックコントローラーに 警告
・他ノードにロールをマイグレート ・ノードに対して“out for repair”とマーキング
今回の障害について
42
障害の原因(その1)
• デジタル証明書を生成する際に有効期限を設定する処理のバグ
– 単に現在の年に+1した有効期限で証明書を 作ろうとしてしまっていた。
43
現在日時 2012年1月1日 ↓
有効期限 2013年1月1日 ↓
問題なし
現在日時 2012年2月29日 ↓
有効期限 2013年2月29日 ↓
作られない
障害発生の直前まで
• 新しいバージョンのソフトウエアを展開中
– ファブリックコントローラ
– ホストエージェント
– ゲストエージェント
• 転送証明書の生成が行われやすい状態にあった
– 新しい仮想マシンの作成
• 新しい配置を実施したとき
• 配置のスケール アウトを行うとき
• 配置している仮想マシンの OS を更新したとき
– 配置が他のノードにマイグレートされた時
• 「サービス回復」と呼ばれる処理
44
UTC 2月29日 0:00
• 証明書の作成に失敗すると、ゲストエージェントは終了するためハートビートが返ってこない。
• 25分以内にエージェントの接続が確立しないと、ホストエージェントは仮想マシンを初期化して 再起動する。(当然状況は改善しない)
45
ノード
ファブリック コントローラー
ハイパーバイザー
ホスト OS
アプリ VM
ホスト エージェント
ゲスト エージェント
ノードレベルの障害 • 3 回連続でエージェント間の接続タイムアウトの後、ホスト
エージェントはハードウェア障害があったと判断。
• ホストエージェントはファブリックコントローラーに報告。
• ファブリックコントローラーは対象のノードを 「Human Investigate」という状態に変更した。
46
ノード
ファブリック コントローラー
ハイパーバイザー
ホスト OS
アプリ VM
ホスト エージェント
ゲスト エージェント
エラー報告が無いから ハード障害なんだろうな
(´・ω・`)
クラスターレベルの障害 • 「Human Investigate」状態のノードが閾値を超えたため、
ファブリックコントローラーはクラスター全体を 「Human Investigate」の状態に変更した。
• この段階でファブリックコントローラーは、内部で開始されたすべてのソフトウェア更新を停止し、自動サービス回復は無効化される。
47
クラスター
ファブリック コントローラー
ファブリック コントローラー
Human Investigateの
ノードが 増えすぎたね (´・ω・`)
UTC 2月29日 2:55
• サービスマネージメント機能を停止
– 新しいVMの作成は確実に失敗する
• アプリケーションの配置
• スケールアウトの実行
– 稼働中のアプリケーションの保護
• 複数インスタンスで運用して、一部のインスタンスが動作しているアプリケーションを、不用意に操作することを防ぐため。
48
問題の原因(その2)
• 新バージョンのソフトウエアを展開中だった7個のクラスターだけが対象の問題
– 7個のクラスター向けの更新パッケージに ホストエージェントと互換性のないネットワーク プラグインが入っていたため、ネットワーク接続が失われた。
– いくつかのノードは 個別のエラーが発生 したため、個別の 対応を行った。
49
ホスト OS
アプリ VM
旧ホスト エージェント
旧ゲスト エージェント
新ネットワーク プラグイン
おわりに
50
おわりに
• 今回の障害でデータロストの問題は生じていない
– ストレージサービスやSQL Azureなどのデータロストは発生していない
• 複数のインスタンスで運用していた場合、サービスの提供は継続できていた可能性が高い
– 最大時で、North Central USリージョンの6.7%、South Central USの28%、North Europeリージョンの37%がサービス障害の対象であった。 http://itpro.nikkeibp.co.jp/article/NEWS/20120301/384015/
51
Let’s dream and then let’s build. - Ray Ozzie
はるたま (@harutama) http://twitter.com/harutama