Azure Load Balancer【Azureを使いこなしたい! 10】
0. 目次
コンテンツ
【今回の内容】
てっこのWebサイトもいざ盛況となった時のために、ロードバランサーで複数のWebサーバーに、受信ネットワークトラフィック(負荷)を分散出来るように準備しておきたいと思います。そこで、今回はAzure Load BalancerでAzure VMの負荷分散を行ってみたいと思います。
Azure Load Balancerは、OSI参照モデルの第4層(トランスポート層)にて動作し、構成した負荷分散規則と正常性プローブに従って、バックエンドプール内のリソース(VMやVMスケールセット)に負荷を分散します。
また、外部からのトラフィックを分散するパブリックロードバランサーだけでなく、仮想ネットワーク内でのトラフィックを分散するプライベートロードバランサーも使用することが出来ます。
AzureでのAzure Load BalancerはPaaSに分類されます。
【前提事項】
以下のAzure VMを構築していること。
クライアントPC(今回はWindows 10を用いました)
1.検証用Webサーバーの構築
1-1.IIS Webサーバーの構築
(1)Azure portalの[仮想マシンの作成]にて、IIS Web用サーバーを2台作成します。
<A>[可用性オプション]を選択します。 → <B>[名前]を入力します。 → <C>[障害ドメイン][更新ドメイン]を選択します。 → <D>[OK]をクリックします。
※今回はBasicロードバランサーを作成するため、可用性セットの例です。Standardロードバランサーの場合は、リージョンによっては[可用性ゾーン]または[可用性セット]のどちらかを選択してください。
その他のIIS Webサーバー構築の詳細は、Azureを使いこなしたい! 9~Azure DNS~1-1.IIS Webサーバーの構築を参照してください。
※先にロードバランサーを作成していた場合、仮想マシン作成時にロードバランサーのバックエンドプールに配置することも出来ます。
(2)<A>[スタートメニュー]で右クリックします。 → <B>[Windows PowerShell]をクリックします。
(3)今回は以下のコマンドにて、サーバー名を表示するだけのページを作成します。
[ Remove-Item C:inetpubwwwrootiisstart.htm]を入力します。 → Enterキーを押します。 → [Add-Content -Path “C:inetpubwwwrootiisstart.htm” -Value $env:computername]を入力します。 → Enterキーを押します。
※デフォルトのWebページを削除し、マシン名を表示するWebページを作成するという設定です。
(4)<A>[Internet Explorer]をクリックします。 → <B>アドレスバーに[http://localhost/]と入力します。 → Enterキーを押します。 → IIS Web ページが表示されます。
これで、IIS Webサーバーの構築は完了です。
2.ロードバランサーの構築
2-1.パブリックロードバランサーの作成
(1)Azure portalにて、<A>Azure Portalの検索バーに[ロードバランサー]と入力します。 → <B>[ロードバランサー]をクリックします。
(2)[作成]または[ロードバランサーの作成]をクリックします。
(3)<A>[サブスクリプション][地域]を選択します。[リソースグループ]を選択または新規作成します。[名前]を入力します。 → <B>[SKU]を選択します。 → <C>[パブリック]を選択します。 → <D>[次:フロントエンドIP構成>]をクリックします。
※[地域][SKU]は、VMのパブリックIPアドレスリソースと同じである必要があります。
今回は検証のため、Basicを選択しました。そのため、レベルの選択はありませんでした。
(4)<A>[フロントエンドIP構成の追加]をクリックします。 → <B>フロントエンドIPの[名前]を入力します。 → <C>[新規作成]をクリックします。 → <D>パブリックIPアドレスの[名前]を入力します。 → <E>[静的]を選択します。 → <F>[OK]をクリックします。 → <G>[追加]をクリックします。
(5)[次:バックエンドプール>]をクリックします。
(6)[バックエンドプールの追加]をクリックします。
(7)<A>[名前]を入力します。 → <B>[仮想ネットワーク]を選択します。 → <C>[追加]をクリックします。
(8)<A>[対象のリソース]にチェックを入れます。 → <B>[追加]をクリックします。
(9)[保存]をクリックします。
(8)[次:インバウンド規則>]をクリックします。
(9)<A>[負荷分散規則の追加]をクリックします。 → <B>[名前]を入力します。 → <C>[IPバージョン]を選択します。 → <D>先ほど追加した[フロントエンドIPアドレス][バックエンドプール]を選択します。 → <E>[プロトコル]を選択します。 → <F>[ポート][バックエンドポート]を入力します。 → <G>[新規作成]をクリックします。
<H>[名前]を入力します。 → <I>[プロトコル]を選択します。 → <J>デフォルトのままです。 → <K>[OK]をクリックします。
<L>デフォルトのままです。 → <M>[追加]をクリックします。
※今回は検証のため、デフォルトのままとした箇所があります。状況に応じて変更してください。
※セッション永続化[なし]:ネットワークトラフィックを複数のVMインスタンスに均等に分散させます。
[クライアントIP]:同じIPアドレスのクライアントからの連続する要求が、同じ仮想マシンによって処理されます。
[クライアントIPとプロトコル]:同じIPアドレス且つプロトコルのクライアントからの連続した要求が、同じ仮想マシンによって処理されます。
※フローティングIP:クラスタリングやNVA、TLS等でポートを再利用したい場合、有効に設定します。(VMのゲストOSの構成も必要です。)
(10)[次:アウトバウンド規則>]をクリックします。
(11)[次:タグ>]をクリックします。
※アウトバウンド規則とは、SNAT (送信元ネットワーク アドレス変換) を明示的に定義するものです。今回は、Basic SKUを選択したため、バックエンド プールのVMの台数に依存して、SNATポート数をAzureが自動で割り当てています。
Standard SKUにて、アウトバンド規則を使うと、SNATポート割り当てのカスタマイズや、TCPアイドルタイムアウトの調節が柔軟に構成出来ます。
(12)[次:確認および作成>]をクリックします。
※今回は検証のため、デフォルトのままとしました。
(13)[作成]をクリックします。
(14)デプロイが行われます。 → [リソースに移動]をクリックします。
(15)パプリックロードバランサーが作成されました。
これで、Azure Load Balancerでのパブリックロードバランサーの構築は完了です。
プライベートロードバランサーの作成の場合は、以下の部分が異なります。その他は、パブリックロードバランサーの作成を参照してください。
2-2.Webページでの確認
(1)Azure portalにて、先ほど作成した[ロードバランサー]のブレードを開きます。 → <A>[フロントエンドIP構成]をクリックします。 → <B>[IPアドレス]をコピーします。
(2)クライアントPCにて、<A>[Microsoft Edge]をクリックします。 → <B>アドレスバーに[http://パプリックロードバランサーのIPアドレス]を入力します。 → Enterキーを押します。
(3)バックエンドプール内の片方のVMのWebページが表示されます。
(7)Ctrl+F5キーを数回押します。(強制的に最新の情報に更新を行います。) → バックエンドプール内のもう片方のVMのWebページが表示されます。
※なかなか切り替わらない場合は、ブラウザを完全に閉じて再起動したり、複数の端末を併用する等してみてください。Azure Load Balancerは、トランスポート層で通信を振り分けるため、ブラウザの挙動によっては、同一の値をもとにハッシュを計算することになり、振り分け先が同一となってしまうそうです。【参考】マイクロソフト公式HP ロードバランサー経由での通信が偏る場合のチェックポイント | Microsoft Learn
(8)Azure portalにて、片方のVMのブレードを開きます。 → <A>[停止]をクリックします。 → <B>[はい]をクリックします。
※予期せぬシャットダウンが発生したというシミュレーションです。
(9)再度、クライアントPCにて、<A>[Microsoft Edge]をクリックします。 → <B>アドレスバーに[http://パプリックロードバランサーのIPアドレス]を入力します。 → Enterキーを押します。
(10)もう片方のVMのWebページのみ表示されるようになります。
※正常性プローブがバックエンドプール内のインスタンスから応答を取得出来ない場合、そのインスタンスに新しい接続が送信されなくなるためです。正常性プローブが再び成功すると、再度そのインスタンスに新しい接続が送信され、両方のWebページが表示されるようになります。