マルチAZ接続パターン#
本構成は東日本/西日本リージョン1・2向けとなります。
要求事項#
- システムの可用性を、論理的に高めるだけではなく データセンターレベルで可用性を維持したい
対応するデザインパターン概要#
FJcloud-Oでは、環境レベルでの物理的な信頼性を高める方式として、以下の 2種類のロケーションサービスがあります。
方式 | 説明 |
---|---|
リージョン | 地域を分ける方式 地域的な災害対策(DR)に活用します |
アベイラビリティゾーン(AZ) | リージョン内で物理的に完全に独立した環境を分ける方式ファシリティの故障時の影響を最小限にとどめます |
このパターンでは、リージョン内でアベイラビリティゾーン(AZ)を分ける構成を採用した場合に、個々のAZに設置したネットワークを低遅延のネットワークで接続して1つのシステムとして使用できるようにするAZ間のネットワーク設定について記載します。
構造 (イメージ図)#
実装サンプル#
1. 事前準備#
(1) 内部ネットワーク、サブネット、セキュリティグループ、仮想サーバの作成(IaaSポータル)#
- 2つのAZで、内部ネットワーク、サブネット、仮想サーバを作成してください。
- セキュリティグループを作成してください。(セキュリティグループはAZの指定は不要です。)
- セキュリティグループは、2つのAZ間で必要な通信が行えるよう設定してください。
例として、セキュリティグループ "SG_Multi_AZ" 内で ping を通すような場合は、以下となります。- IaaSポータルにログインします。
- 「ネットワーク」⇒「セキュリティグループ」画面で、セキュリティグループ "SG_Multi_AZ" の「アクション」から「ルール管理」をクリックします。
- 「セキュリティグループルール管理」画面で、「ルールの追加」ボタンをクリックします。
- 「ルールの追加」画面で、以下のルールを追加します。
ルール | 方向 | 接続先 | セキュリティグループ | IPバージョン |
---|---|---|---|---|
ALL ICMP | 受信 | セキュリティグループ | SG_Multi_AZ | IPv4 |
ALL ICMP | 送信 | セキュリティグループ | SG_Multi_AZ | IPv4 |
- その他作成手順は、インターネット接続パターン を参照してください。
(2) 各種値の取得#
- API使用時に、2つのAZとも、以下の値が必要となります。
IaaSポータルで仮想サーバ等を作成した際に、合わせて取得してください。
項目 | AZ1用 設定値例 |
AZ2用 設定値例 |
内容 |
---|---|---|---|
AZ名称 | "jp-east-1a" | "jp-east-1b" | "jp-east-1a", "jp-east-1b" 等 |
内部ネットワークID | (生成されたID) | (生成されたID) | それぞれのAZで生成されたID |
サブネットID | (生成されたID) | (生成されたID) | それぞれのAZで生成されたID |
サブネット | "192.168.1.0/24" | "192.168.20.0/24" | サンプルで左記を使用 |
サブネットのデフォルトゲートウェイIP | "192.168.1.1" | "192.168.20.1" | サンプルで左記を使用 |
セキュリティグループID | (生成されたID) | (生成されたID) | AZ間の通信制御用セキュリティグループID |
(3) 各種値の決定#
- AZ間接続をAPIで設定する際に、以下を決めておく必要があります。
項目 | AZ1用 設定値例 |
AZ2用 設定値例 |
内容 |
---|---|---|---|
ネットワークコネクター名称 | "demo-nwc" | "demo-nwc" | サンプルで左記を使用 |
コネクターエンドポイント名称 | "demo-nwcep-az1" | "demo-nwcep-az2" | サンプルで左記を使用 |
ポート名称 | "demo-port-az1" | "demo-port-az2" | サンプルで左記を使用 |
ポート作成時のIPアドレス | "192.168.1.100" | "192.168.20.100" | サンプルで左記を使用 |
2. ネットワークコネクターの作成#
(1) ネットワークコネクターの作成#
以下のAPIに、設定項目(json)を設定し、実行してください。
- 設定項目(json)
項目 | 設定値例 | 内容 |
---|---|---|
$NAME | "demo-nwc" | ネットワークコネクター名称(任意) |
- 実行API
curl -s -X POST $NETWORK/v2.0/network_connectors -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type:application/json" -d '{"network_connector":{ "name": "'$NAME'"}}' | jq .
(2) ネットワークコネクターの確認#
- 実行API
curl -s -X GET $NETWORK/v2.0/network_connectors -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq .
3. コネクターエンドポイントの作成#
(1) コネクターエンドポイントの作成#
以下のAPIに、設定項目(json)を設定し、AZ1、AZ2でそれぞれ実行してください。
- 設定項目(json)
項目 | AZ1用 設定値例 |
AZ2用 設定値例 |
内容 |
---|---|---|---|
$NAME | "demo-nwcep-az1" | "demo-nwcep-az2" | コネクターエンドポイント名称(任意) |
$NETCON_ID | (生成されたID) | (生成されたID) | 生成されたネットワークコネクターのID |
$EP_TYPE | "availability_zone" | "availability_zone" | "availability_zone":FJcloud-O内接続 |
$AZ | "jp-east-1a" | "jp-east-1b" | "jp-east-1a"、"jp-east-1b" 等 |
- 実行API
curl -s -X POST $NETWORK/v2.0/network_connector_endpoints -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type:application/json" -d '{"network_connector_endpoint":{ "name": "'$NAME'", "network_connector_id": "'$NETCON_ID'", "endpoint_type": "'$EP_TYPE'", "location": "'$AZ'"}}' | jq .
(2) 作成したコネクターエンドポイントの確認#
- 実行API
curl -s -X GET $NETWORK/v2.0/network_connector_endpoints -H "X-Auth-Token: $OS_AUTH_TOKEN" | jq .
4. port作成#
以下のAPIに、設定項目(json)を設定し、AZ1、AZ2でそれぞれ実行してください。
- 設定項目(json)
項目 | AZ1用 設定値例 |
AZ2用 設定値例 |
内容 |
---|---|---|---|
$PORT_NAME | "demo-port-az1" | "demo-port-az2" | ポート名称(任意) |
$NETWORK_ID | (生成されたID) | (生成されたID) | それぞれのAZの内部ネットワークID |
$SUBNET_ID | (生成されたID) | (生成されたID) | それぞれのAZのサブネットID |
$FIXED_IP_ADDRESS | "192.168.1.100" | "192.168.20.100" | サンプルで左記を使用 |
$SG_ID | (生成されたID) | (生成されたID) | セキュリティグループID |
$AZ | "jp-east-1a" | "jp-east-1b" | "jp-east-1a"、"jp-east-1b" 等 |
- 実行API
curl -s $NETWORK/v2.0/ports -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"port":{"network_id": "'$NETWORK_ID'", "name": "'$PORT_NAME'", "availability_zone": "'$AZ'", "fixed_ips": [{"subnet_id": "'$SUBNET_ID'", "ip_address": "'$FIXED_IP_ADDRESS'"}], "security_groups": ["'$SG_ID'"] }}' | jq .
5. コネクターエンドポイントにポートをアタッチ#
設定項目(REST API)で生成したAPIに、設定項目(json)を設定し、AZ1、AZ2でそれぞれ実行してください。
- 設定項目(REST API)
項目 | 内容 |
---|---|
$NETCON_EP_ID | それぞれのAZで作成したコネクターエンドポイントID |
- 設定項目(json)
項目 | 内容 |
---|---|
$PORT_ID | それぞれのAZで作成したポートID |
- 実行API
curl -s -X PUT $NETWORK/v2.0/network_connector_endpoints/$NETCON_EP_ID/connect -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type:application/json" -d '{"interface": {"port_id": "'$PORT_ID'"}}' | jq .
6. サブネットの更新#
対向のAZ向けのルーティング情報を仮想サーバが取得できるよう、サブネットの情報を更新します。 設定項目(REST API)で生成したAPIに、設定項目(json)を設定し、AZ1、AZ2でそれぞれ実行してください。
- 設定項目(REST API)
項目 | 内容 |
---|---|
$SUBNET_ID_AZ1 | AZ1のサブネットID |
$SUBNET_ID_AZ2 | AZ2のサブネットID |
- 設定項目(json)
項目(AZ1) | 内容 |
---|---|
$SUBNET_AZ1 | AZ1用:192.168.1.0/24 |
$DEFAULT_GATEWAY_IP_AZ1 | AZ1用:192.168.1.1 |
$FIXED_IP_ADDRESS_AZ1 | AZ1用:192.168.1.100 |
$HOST_ROUTES_AZ1 | {\"nexthop\":\"$FIXED_IP_ADDRESS_AZ1\",\"destination\":\"$SUBNET_AZ2\"}, {\"nexthop\":\"$DEFAULT_GATEWAY_IP_AZ1\",\"destination\":\"0.0.0.0/0\"} |
項目(AZ2) | 内容 |
---|---|
$SUBNET_AZ2 | AZ2用:192.168.20.0/24 |
$DEFAULT_GATEWAY_IP_AZ2 | AZ2用:192.168.20.1 |
$FIXED_IP_ADDRESS_AZ2 | AZ2用:192.168.20.100 |
$HOST_ROUTES_AZ2 | {\"nexthop\":\"$FIXED_IP_ADDRESS_AZ2\",\"destination\":\"$SUBNET_AZ1\"}, {\"nexthop\":\"$DEFAULT_GATEWAY_IP_AZ2\",\"destination\":\"0.0.0.0/0\"} |
- 設定項目の展開例(json)
APIを実行する前に、項目に設定された内容を確認してください。
正しく設定できれば、項目の $HOST_ROUTES_AZ1 や $HOST_ROUTES_AZ2 には、以下の内容が格納されます。
項目 | 設定の展開例 |
---|---|
$HOST_ROUTES_AZ1 | {\"nexthop\":\"192.168.1.100\",\"destination\":\"192.168.20.0/24\"}, {\"nexthop\":\"192.168.1.1\",\"destination\":\"0.0.0.0/0\"} |
$HOST_ROUTES_AZ2 | {\"nexthop\":\"192.168.20.100\",\"destination\":\"192.168.1.0/24\"}, {\"nexthop\":\"192.168.20.1\",\"destination\":\"0.0.0.0/0\"} |
-
実行API (AZ1用)
curl -i $NETWORK/v2.0/subnets/$SUBNET_ID_AZ1 -X PUT -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"subnet": { "host_routes": ['$HOST_ROUTES_AZ1'] }}'
-
実行API (AZ2用)
curl -i $NETWORK/v2.0/subnets/$SUBNET_ID_AZ2 -X PUT -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/json" -d '{"subnet": { "host_routes": ['$HOST_ROUTES_AZ2'] }}'
7. 仮想サーバの再起動#
サブネットの更新後に、仮想サーバをそれぞれ再起動してください。
メリット・効果#
AZ間の接続を利用した場合のメリット・効果は以下の通りです。
- 専用の回線を敷設することなくAZ間で通信可能
- サービスの可用性を高める、AZ間での冗長構成を設定可能
注意事項#
- 本パターンは2017年6月時点のFJcloud-O 東日本/西日本リージョン1・2で動作検証しています。
- ネットワークコネクターは、1プロジェクトで、用途による種類ごとに1つ作成することができます。
用途の種類:- アベイラビリティゾーン(AZ)間接続
- DEXオプション(DEX機能/ダイレクトポート機能)
- 専有物理サーバサービス接続
- ネットワークコネクターを複数作成した場合、ネットワークコネクターごとにコネクターエンドポイントを作成してください。
- 各ネットワークコネクターに紐づくコネクターエンドポイントをAZごとに1つずつ作成することができます。
- コネクターエンドポイントで接続したネットワーク以外のルーティングは行えません。
- AZ間で接続するサブネットは、同一のサブネットにすることは出来ません。
- AZ間接続は同一プロジェクトにのみ設定可能です。
その他#
複数セグメントでマルチAZ接続#
複数のセグメントをマルチAZ接続で接続したい場合は、以下の図のように、コネクターエンドポイントに複数のセグメントを接続します。