DNS切り替えパターン#
本構成は東日本/西日本リージョン1・2向けとなります。
要求事項#
オンプレ同様、クラウドでもシステムの可用性を考慮した設計を行う必要があります。
本パターンでは以下の要求事項に対応します。
- FJcloud-OのDNSサービスを使用し、サービスの可用性や性能を考慮した構成を実現したい
対応するデザインパターン概要#
FJcloud-Oでは、サービス提供の機会損失を防ぎ、可用性や性能を向上させる負荷分散機能として、DNSサービスを提供しています。
DNSサービスのフェイルオーバー機能を利用することで、万が一リージョン単位で障害が起きた場合に、参照系システム(内容が動的に変化しないコンテンツを表示など)であれば本番用リージョンからDR用リージョンへ自動的にシステムを切り替えることが可能です。
構造 (イメージ図)#
実装サンプル#
FJcloud-O DNSサービスに対する自動フェイルオーバーの設定方法を以下に記載します。
1. DNS管理用のプロジェクト作成#
IaaSポータルでは、東日本リージョン1のみDNSメニューが選択できます。
事前準備として東日本リージョン1でDNS管理用のプロジェクトを作成します。
- FUJITSU Cloud Serviceポータル画面で、メニュータブから「IaaS管理」をクリックします。
- 「IaaS管理」画面右上のタブをクリックし、リージョンとして「jp-east-1」を選択します。
- 「プロジェクト一覧」画面で、「新規作成」ボタンをクリックします。
- 「プロジェクトの作成」⇒「プロジェクト」画面で、以下の内容を登録し、「次へ」ボタンをクリックします。
項目 | 必須 | 設定値例 | 内容 |
---|---|---|---|
プロジェクト名 | 必須 | (DNS管理用のプロジェクト名) | 半角英数字でプロジェクト名を指定 |
- 「プロジェクトの作成」⇒「プロジェクトメンバー」画面で適切なプロジェクトメンバーを指定して「次へ」ボタンをクリックします。追加メンバーが不要であれば何も入力せずに「次へ」をクリックします。
- 「プロジェクトの作成」⇒「確認」画面で、以下の内容を登録し、「作成」ボタンをクリックします。
2. ドメイン取得#
レジストラもしくはレジストラの指定事業者からゾーン登録用のドメインを取得してください。
ドメインはFJcloud-Oから取得できません。
例えば、FJcloud-Vでドメインを取得する際は以下のような手順になります。
3. ゾーン登録#
(1) 認証レコード登録#
FJcloud-O DNSにゾーン登録をするためには、まず、レジストラに認証用レコードを登録します。
- 設定項目(REST API)
項目 | 内容 |
---|---|
$DNS | https://dns.cloud.global.fujitsu.com (FJcloud-O DNSのエンドポイント) |
$ZONE_NAME | ゾーン登録対象のドメイン名 |
- 実行API
400 のエラーとともに認証用レコードが返却されます。
curl -is $DNS/v1.0/hostedzone -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/xml" -H "Accept: application/json" -d '<?xml version="1.0" encoding="UTF-8"?> <CreateHostedZoneRequest xmlns="http://docs.cloudcommunity.global.fujitsu.com/dns/api/v1.0/"> <Name>'$ZONE_NAME'</Name></CreateHostedZoneRequest>'
name_server:xxxxxxxxx.ns-verify.dns.nifcloud.com txt:nifty-dns-verify=xxxxxxxxx
- レジストラにて認証用レコードをNameServerとして登録します。
- レジストラにて認証用レコードをTXTレコードとして登録します。
(2) ゾーン作成#
認証用レコードをレジストラに登録するとゾーン作成ができるようになります。
- 設定項目(REST API)
項目 | 内容 |
---|---|
$DNS | https://dns.cloud.global.fujitsu.com (FJcloud-O DNSのエンドポイント) |
$ZONE_NAME | ゾーン登録対象のドメイン名 |
- 実行API
curl -is $DNS/v1.0/hostedzone -X POST -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/xml" -H "Accept: application/json" -d '<?xml version="1.0" encoding="UTF-8"?><CreateHostedZoneRequest xmlns="http://docs.cloudcommunity.global.fujitsu.com/dns/api/v1.0/"><Name>'$ZONE_NAME'</Name></CreateHostedZoneRequest>'
- 正常にゾーンが作成されると、NameServerが返却されます
ns0.dns.nifcloud.com ns1.dns.nifcloud.com
- レスポンス例
HTTP/1.1 200 Connection established HTTP/1.1 201 Created X-Fcx-Endpoint-Request: EXECUTED_REQ009025382_201 Date: Mon, dd Feb yyyy 09:28:34 GMT Server: Apache x-fcx-request-id: 884933b5-d6dd-4fec-9fa5-51254fa0d5f4 Content-Type: application/xml Content-Length: 644 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <CreateHostedZoneResponse xmlns="http://docs.cloudcommunity.global.fujitsu.com/dns/api/v1.0/"> <HostedZone><Id>example.com</Id> <Name>example.com</Name>example.com<ResourceRecordSetCount>0</ResourceRecordSetCount> </HostedZone> <ChangeInfo><Id>xxxxxxxxxxx</Id> <Status>INSYNC</Status> <SubmittedAt>2018-02-26T09:28:35.034Z</SubmittedAt> </ChangeInfo><DelegationSet> <NameServers> <NameServer>ns0.dns.nifcloud.com</NameServer> <NameServer>ns1.dns.nifcloud.com</NameServer></NameServers> </DelegationSet></CreateHostedZoneResponse>
(3) ゾーンの登録確認#
- APIでゾーンの登録状況を確認します。登録対象のゾーン名が表示されれば、登録完了です。
- 設定項目(REST API)
項目 | 内容 |
---|---|
$DNS | https://dns.cloud.global.fujitsu.com (FJcloud-O DNSのエンドポイント) |
$ZONE_NAME | ゾーン登録対象のドメイン名 |
- 実行API
curl -s -X GET $DNS/v1.0/hostedzone/$ZONE_NAME -H "X-Auth-Token: $OS_AUTH_TOKEN" -H "Content-Type: application/xml" | xmllint --format --encode utf-8 -
(4) ゾーン作成後の作業#
レジストラにて認証用レコードを削除します。
- 認証用NSレコードを登録した場合は、NSレコードを削除します。
- 認証用TXTレコードを登録した場合は、TXTレコードを削除します。
4. フェイルオーバー設定#
フェイルオーバー機能は、A, AAAAレコードのみご利用可能です。
実装サンプルではAレコードを利用したフェイルオーバー設定例を説明します。
IaaSポータルよりフェイルオーバーの設定が可能です。
(1) プライマリーサーバの設定#
プライマリーサーバのAレコードを登録します。
- IaaSポータルにログインします。
- リージョンで「jp-east-1」を選択します。
- 「ネットワーク」⇒「DNS」を選択します。
- 「ネットワーク」⇒「DNS」画面で、作成したDNSゾーン名の「アクション」から「レコード管理」をクリックします。
- 「DNS」⇒「レコード管理」の画面で、「+」をクリックします。
- 以下を入力し、作成をクリックします。
項目 | 必須 | 設定値例 | 内容 |
---|---|---|---|
レコード名 | 必須 | "www" | Aレコード名 |
タイプ | 必須 | "A" | DNSレコードのタイプ |
TTL | 任意 | "60" | 秒単位でTTLを指定。既定では3600 |
値 | 必須 | (プライマリーサーバのグローバルIPアドレス) | Aレコードに登録するIPアドレス |
ポリシー | 選択 | "フェイルオーバー" | Aレコード利用時のポリシーを選択 |
タブ | 項目 | 必須 | 設定値例 |
---|---|---|---|
フェイルオーバーの詳細 | フェイルオーバーの詳細 | 選択 | "PRIMARY" |
ヘルスチェック設定 | IPアドレス | 必須 | (プライマリーサーバのグローバルIPアドレス) |
ポート | 必須 | "80" | |
プロトコル | 選択 | "HTTP" | |
ヘルスチェック先パス | 任意 | ||
ヘルスチェック先ドメイン名 | 任意 |
(2) セカンダリサーバの設定#
プライマリーサーバーと同様の設定でセカンダリサーバのAレコードを登録します。 セカンダリサーバは複数設定することが可能です。セカンダリが複数設定されている場合は、先に登録したレコードが優先されます。
- 「DNS」⇒「レコード管理」の画面で、「+」をクリックします。
- 以下を入力し、作成をクリックします。
項目 | 必須 | 設定値例 | 内容 |
---|---|---|---|
レコード名 | 必須 | "www" | Aレコード名 |
タイプ | 必須 | "A" | DNSレコードのタイプ |
TTL | 任意 | "60" | 秒単位でTTLを指定。既定では3600 |
値 | 必須 | (セカンダリサーバのグローバルIPアドレス) | Aレコードに登録するIPアドレス |
ポリシー | 選択 | "フェイルオーバー" | Aレコード利用時のポリシーを選択 |
タブ | 項目 | 必須 | 設定値例 |
---|---|---|---|
フェイルオーバーの詳細 | フェイルオーバーの詳細 | 選択 | "SECONDARY" |
ヘルスチェック設定 | IPアドレス | 必須 | "セカンダリサーバのグローバルIPアドレス" |
ポート | 必須 | "80" | |
プロトコル | 選択 | "HTTP" | |
ヘルスチェック先パス | 任意 | ||
ヘルスチェック先ドメイン名 | 任意 |
メリット・効果#
DNSサービスのフェイルオーバー機能を利用した場合のメリット・効果は以下の通りです。
- 参照系のシステムであれば、リージョン単位の障害があった際に自動的にシステムを切り替えることが可能です。
- 他クラウドからFJcloud-Oへの自動システム切り替えに使用することも可能です。
注意事項#
- 本パターンは2018年7月時点のFJcloud-O 東日本/西日本リージョン1・2で動作検証しています。
- 東日本リージョン1障害時は、DNSサービスの設定変更はできません。
- バックエンドシステムでDB等がある場合には、別途データ同期等が必要です。
- ヘルスチェック対象のIPアドレスはグローバルIPアドレスを指定してください。
- 1つのFQDNに対して複数IPアドレスにアクセスを割り振るような構成できません。アクセス先のIPアドレスはプライマリーサーバとセカンダリサーバの稼働状況に応じてプライマリもしくはセカンダリに設定された1つのIPアドレスに決まります。
- 各経路へのキャッシュ等が要因となり、プライマリーサーバからセカンダリサーバへの切り替えに設定したTTLよりも時間がかかる場合があります。弊社検証実績では、TTLを60秒として設定した場合に、切り替えに約5分を要しました。
その他#
- フェイルオーバーを使用するときは、レコードのTTLを60秒にすることを推奨します。