Azure Traffic Managerの負荷分散方式をまとめます。Traffic Managerの負荷分散方式は、公式ドキュメント上では「ルーティング方法」と呼んでおり、優先順位, 重み付け, パフォーマンス, 地理的, 数値的, サブネットの方式があります。
Traffic Managerの基本的な操作説明は割愛します。基本的な操作の説明は「Azure トラフィックマネージャー 基本操作<」を参照ください。
前提
公式ドキュメント
参考になる公式ドキュメントを以下に示します。
事前設定
東日本に仮想マシンを1台作成します。仮想マシンに付与されるパブリックIPアドレスのDNS名は重複しない名前に変更ください。
JP_DNS_NAME="gokatei01" az group create --name MyResourceGroup --location japaneast az network public-ip create \ --resource-group MyResourceGroup \ --name MyPublicAddressJapan \ --location japaneast \ --dns-name ${JP_DNS_NAME} \ --sku Standard az network nsg create \ --resource-group MyResourceGroup \ --name MyNsgJp \ --location japaneast az network nsg rule create \ --resource-group MyResourceGroup \ --nsg-name MyNsgJp \ --name seq100 \ --priority 100 \ --destination-port-ranges 22 80 \ --access Allow \ --protocol Tcp az vm create \ --resource-group MyResourceGroup \ --name linuxJapan \ --location japaneast \ --image UbuntuLTS \ --size Standard_B1s \ --admin-username azureuser \ --ssh-key-values ~/.ssh/authorized_keys \ --public-ip-address MyPublicAddressJapan \ --nsg MyNsgJp \ --custom-data /dev/stdin << 'EOF' #!/bin/bash apt-get -y install nginx echo "this is Japan East" > /var/www/html/index.html EOF
アメリカ西部2に仮想マシンを1台作成します。仮想マシンに付与されるパブリックIPアドレスのDNS名は重複しない名前に変更ください。
US_DNS_NAME="gokatei01" az network public-ip create \ --resource-group MyResourceGroup \ --name MyPublicAddressUs \ --location eastus2 \ --dns-name ${US_DNS_NAME} \ --sku Standard az network nsg create \ --resource-group MyResourceGroup \ --name MyNsgUs \ --location eastus2 az network nsg rule create \ --resource-group MyResourceGroup \ --nsg-name MyNsgUs \ --name seq100 \ --priority 100 \ --destination-port-ranges 22 80 \ --access Allow \ --protocol Tcp az vm create \ --resource-group MyResourceGroup \ --name linuxUs \ --location eastus2 \ --image UbuntuLTS \ --size Standard_B1s \ --admin-username azureuser \ --ssh-key-values ~/.ssh/authorized_keys \ --public-ip-address MyPublicAddressUs \ --nsg MyNsgUs \ --custom-data /dev/stdin << 'EOF' #!/bin/bash apt-get -y install nginx echo "this is Us East" > /var/www/html/index.html EOF
Traffic Managerを定義します。Traffic Managerに付与するDNS名は重複しない名前に変更ください。各コマンドの「Azure トラフィックマネージャー 基本操作」を参照ください。
TM_DNS_NAME=gokatei01 az network traffic-manager profile create \ --resource-group MyResourceGroup \ --name MyTrafficManager \ --routing-method Performance \ --unique-dns-name ${TM_DNS_NAME} TARGET_RESOURCE_ID_JAPN=$(az network public-ip show \ --resource-group MyResourceGroup \ --name MyPublicAddressJapan \ --query id \ --output tsv ) az network traffic-manager endpoint create \ --resource-group MyResourceGroup \ --name MyEndpointJapan \ --profile-name MyTrafficManager \ --type azureEndpoints \ --target-resource-id ${TARGET_RESOURCE_ID_JAPN} TARGET_RESOURCE_ID_US=$(az network public-ip show \ --resource-group MyResourceGroup \ --name MyPublicAddressUs \ --query id \ --output tsv ) az network traffic-manager endpoint create \ --resource-group MyResourceGroup \ --name MyEndpointUs \ --profile-name MyTrafficManager \ --type azureEndpoints \ --target-resource-id ${TARGET_RESOURCE_ID_US}
Traffic Managerの負荷分散方式概要
Traffic Managerの負荷分散方式(ルーティング方法)を以下にまとめます。
負荷分散方式 | 挙動 |
---|---|
優先順位 (Priority) |
すべてのトラフィックにプライマリ サービス エンドポイントを使用する場合に使用します。プライマリまたはいずれかのバックアップのエンドポイントが使用できない場合に備えて、複数のバックアップ エンドポイントを用意できます。 |
重み付け Weighted |
重みに基づいて一連のエンドポイントにトラフィックを分散させる場合に使用します。すべてのエンドポイントに均等に配分するには、重みを同じに設定します。 |
パフォーマンス Performacne |
地理的にさまざまな場所にエンドポイントがあり、エンド ユーザーがネットワーク待ち時間を最も短くするために “最も近い” エンドポイントを使用するようにしたい場合に使用します |
地理的 Geographic |
DNS クエリの発信元の地理的な場所に基づいて、ユーザーを特定のエンドポイント (Azure、外部、または入れ子になったもの) に割り当てる場合に使用します。このルーティング方法を使用すると、データ主権の要件、コンテンツとユーザー エクスペリエンスのローカライズ、さまざまなリージョンからのトラフィックの測定などのシナリオに対応できるようになります。 |
複数値 Multivalue |
エンドポイントとして IPv4 および IPv6 アドレスしか割り当てることのできない場合に使用します。このプロファイルに対するクエリが受信されると、正常なエンドポイントがすべて返されます。 |
サブネット Subnet |
エンド ユーザーの一連の IP アドレス範囲を特定のエンドポイントにマップする場合に使用します。要求が受信されたときに返されるエンドポイントは、その要求の送信元 IP アドレスにマップされているものです。 |
Traffic Managerの負荷分散方式の動作確認
優先順位(Priority)
設定方法
負荷分散方式(ルーティング方法)を「優先順位(Priority)」にするには、エンドポイントに対してpriorityが設定されているのが前提です。priorityは1から1000までの値で指定可能で、値が小さいエンドポイントが優先されます。
設定例は以下の通りです。
TARGET_RESOURCE_ID_JAPN=$(az network public-ip show \ --resource-group MyResourceGroup \ --name MyPublicAddressJapan \ --query id \ --output tsv ) az network traffic-manager endpoint update \ --resource-group MyResourceGroup \ --name MyEndpointJapan \ --profile-name MyTrafficManager \ --type azureEndpoints \ --target-resource-id ${TARGET_RESOURCE_ID_JAPN} \ --priority 100 TARGET_RESOURCE_ID_US=$(az network public-ip show \ --resource-group MyResourceGroup \ --name MyPublicAddressUs \ --query id \ --output tsv ) az network traffic-manager endpoint update \ --resource-group MyResourceGroup \ --name MyEndpointUs \ --profile-name MyTrafficManager \ --type azureEndpoints \ --target-resource-id ${TARGET_RESOURCE_ID_US} \ --priority 200
エンドポイントに対するpriorityの指定後、以下のように引数routing-methodをPriorityに変更します。
az network traffic-manager profile update \ --resource-group MyResourceGroup \ --name MyTrafficManager \ --routing-method Priority
動作確認
正常時はCNAMEがJapanの仮想マシンを指します。
admin@mac19 ~ % nslookup gokatei01.trafficmanager.net Server: 103.5.140.1 Address: 103.5.140.1#53 Non-authoritative answer: gokatei01.trafficmanager.net canonical name = gokatei01.japaneast.cloudapp.azure.com. Name: gokatei01.japaneast.cloudapp.azure.com Address: 20.222.124.178
東日本の仮想マシンを停止します。
az vm stop \ --resource-group MyResourceGroup \ --name linuxJapan
東日本の仮想マシン停止後は、CNAMEがアメリカ西部2の仮想マシンを指します。
admin@mac19 ~ % nslookup gokatei01.trafficmanager.net Server: 103.5.140.1 Address: 103.5.140.1#53 Non-authoritative answer: gokatei01.trafficmanager.net canonical name = gokatei01.eastus2.cloudapp.azure.com. Name: gokatei01.eastus2.cloudapp.azure.com Address: 20.96.38.16
次の検証シナリオに備えて、東日本の仮想マシンを起動します。
az vm start \ --resource-group MyResourceGroup \ --name linuxJapan
重み付け(Weighted)
設定方法
負荷分散方式(ルーティング方法)を「重み付け(Weighted)」にするには、エンドポイントに対してweightが設定されているのが前提です。東日本とアメリカ西部2を2:1で負荷分散する設定例は以下の通りです。
az network traffic-manager endpoint update \ --resource-group MyResourceGroup \ --name MyEndpointJapan \ --profile-name MyTrafficManager \ --type azureEndpoints \ --target-resource-id ${TARGET_RESOURCE_ID_JAPN} \ --weight 2 az network traffic-manager endpoint update \ --resource-group MyResourceGroup \ --name MyEndpointUs \ --profile-name MyTrafficManager \ --type azureEndpoints \ --target-resource-id ${TARGET_RESOURCE_ID_US} \ --weight 1
エンドポイントに対するweightの指定後、以下のように引数routing-methodをWeightedに変更します。
az network traffic-manager profile update \ --resource-group MyResourceGroup \ --name MyTrafficManager \ --routing-method Weighted
動作確認
nslookupを何度か繰り返し、東日本とアメリカ西部2で負荷分散されている事を確認します。
admin@mac19 ~ % nslookup gokatei01.trafficmanager.net 8.8.8.8 Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: gokatei01.trafficmanager.net canonical name = gokatei01.japaneast.cloudapp.azure.com. Name: gokatei01.japaneast.cloudapp.azure.com Address: 20.222.124.178 admin@mac19 ~ % admin@mac19 ~ % admin@mac19 ~ % nslookup gokatei01.trafficmanager.net 8.8.8.8 Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: gokatei01.trafficmanager.net canonical name = gokatei01.japaneast.cloudapp.azure.com. Name: gokatei01.japaneast.cloudapp.azure.com Address: 20.222.124.178 admin@mac19 ~ % admin@mac19 ~ % admin@mac19 ~ % nslookup gokatei01.trafficmanager.net 8.8.8.8 Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: gokatei01.trafficmanager.net canonical name = gokatei01.eastus2.cloudapp.azure.com. Name: gokatei01.eastus2.cloudapp.azure.com Address: 20.96.38.16 admin@mac19 ~ %
パフォーマンス(Performacne)
デフォルトの負荷分散方式で、「地理的に近い」エンドポイントに負荷分散されます。動作確認結果は「Azure トラフィックマネージャー 基本操作」を参照ください。
地理的(Geographic)
設定方法
負荷分散方式(ルーティング方法)を「地理的(Geographic)」にするには、エンドポイントに対してgeo-mappingが設定されているのが前提です。geo-mappingに指定可能な値は「地理的トラフィック ルーティング方法で Azure Traffic Manager によって使用される国/リージョン階層」を参照ください。
以下は東日本の仮想マシンに「GEO-AS(アジア)」を、アメリカ西部2の仮想マシンに「WORLD(世界)」を設定する例です。
az network traffic-manager endpoint update \ --resource-group MyResourceGroup \ --name MyEndpointJapan \ --profile-name MyTrafficManager \ --type azureEndpoints \ --target-resource-id ${TARGET_RESOURCE_ID_JAPN} \ --geo-mapping GEO-AS az network traffic-manager endpoint update \ --resource-group MyResourceGroup \ --name MyEndpointUs \ --profile-name MyTrafficManager \ --type azureEndpoints \ --target-resource-id ${TARGET_RESOURCE_ID_US} \ --geo-mapping WORLD
エンドポイントに対するgeo-mappingの指定後、以下のように引数routing-methodをGeographicに変更します。
az network traffic-manager profile update \ --resource-group MyResourceGroup \ --name MyTrafficManager \ --routing-method Geographic
動作確認
東日本から名前解決を試みた場合は、該当するエンドポイントは「GEO-AS(アジア)」と「WORLD(世界)」です。「GEO-AS(アジア)」の方がより限定的な地域指定になっていますので、「GEO-AS(アジア)」が優先されます。
admin@mac19 ~ % nslookup gokatei01.trafficmanager.net Server: 103.5.140.1 Address: 103.5.140.1#53 Non-authoritative answer: gokatei01.trafficmanager.net canonical name = gokatei01.japaneast.cloudapp.azure.com. Name: gokatei01.japaneast.cloudapp.azure.com Address: 20.222.124.178
東日本の仮想マシンを停止します。
az vm stop \ --resource-group MyResourceGroup \ --name linuxJapan
「GEO-AS(アジア)」に障害が発生しても、routing-methodをGeographicとしている場合はフェイルオーバーしません。そのため、公式ドキュメント「地理的トラフィック ルーティング方法」では、Geographicを使用する場合は2つ以上のエンドポイントで入れ子構造とする事を推奨しています。
admin@mac19 ~ % nslookup gokatei01.trafficmanager.net Server: 103.5.140.1 Address: 103.5.140.1#53 Non-authoritative answer: gokatei01.trafficmanager.net canonical name = gokatei01.japaneast.cloudapp.azure.com. Name: gokatei01.japaneast.cloudapp.azure.com Address: 20.222.124.178
次の検証シナリオに備えて、東日本の仮想マシンを起動します。
az vm start \ --resource-group MyResourceGroup \ --name linuxJapan
サブネット(Subnet)
設定方法
負荷分散方式(ルーティング方法)を「サブネット(Subnet)」にするには、エンドポイントに対してsubnetsが設定されているのが前提です。
動作確認をするノートPCの送信元パブリックIPアドレスを「確認くん」などで調査し、そのパブリックIPアドレスが含まれるようにサブネットを指定します。
アメリカ西部2にはサブネットを定義しません。サブネットを定義しないエンドポイントがある場合、障害発生時にそのエンドポイントにフェイルオーバーします。
az network traffic-manager endpoint update \ --resource-group MyResourceGroup \ --name MyEndpointJapan \ --profile-name MyTrafficManager \ --type azureEndpoints \ --target-resource-id ${TARGET_RESOURCE_ID_JAPN} \ --subnets 103.5.140.0-103.5.143.255 103.5.160.0-103.5.163.255
エンドポイントに対するsubnetsの指定後、以下のように引数routing-methodをSubnetに変更します。
az network traffic-manager profile update \ --resource-group MyResourceGroup \ --name MyTrafficManager \ --routing-method Subnet
動作確認
手元のノートPCから名前解決を試みます。ノートPCのパブリックIPアドレスが東日本のエンドポイントに指定したサブネットに含まれているならば、CNAMEは以下のように東日本を指します。
admin@mac19 ~ % nslookup gokatei01.trafficmanager.net Server: 103.5.140.1 Address: 103.5.140.1#53 Non-authoritative answer: gokatei01.trafficmanager.net canonical name = gokatei01.japaneast.cloudapp.azure.com. Name: gokatei01.japaneast.cloudapp.azure.com Address: 20.222.124.178
東日本の仮想マシンを停止します。
az vm stop \ --resource-group MyResourceGroup \ --name linuxJapan
routing-methodをSubnetを定義していないエンドポイントにフェイルオーバします。以下のように障害発生後は、CNAMEがアメリカ西部2を指す事を確認します。
admin@mac19 ~ % nslookup gokatei01.trafficmanager.net Server: 103.5.140.1 Address: 103.5.140.1#53 Non-authoritative answer: gokatei01.trafficmanager.net canonical name = gokatei01.eastus2.cloudapp.azure.com. Name: gokatei01.eastus2.cloudapp.azure.com Address: 20.96.38.16