本記事はOracle Cloud Infrastructure Advent Calendar 2021 カレンダー2の Day 18として書いています。
こんにちは。s-oomoriです!Advent Calendarで空いてる日があったので、今年も書いてみました。
今回はOCIのDNSサービスである「トラフィック管理ステアリング・ポリシー」を使って、WEBサイトをOCIからAWSにフェイルオーバーする設定を紹介します。
OCIjp#23のLTでDEMO発表させていただいた内容となります。
トラフィック管理ステアリング・ポリシーとは?
Qiita等に説明等を記載していただいてますので、機能についてはこちらを参照ください。
参考:@cocotaro0202さん「リージョンをまたいでトラフィックのフェイルオーバーを試してみた」
環境
今回、以図のようにOCIにWEBサイト用サーバ、AWSにSorryページ用サーバ環境を用意しました。
DNSは自分のドメインを用意しOCIのDNSに登録:demo.shinpy.info
OCI DNS トラフィック管理ステアリングを設定し、OCIのWEBサーバをプライマリとし、AWSのWEBサーバ(Sorryページ)をセカンダリに設定し、プライマリ障害を検知した場合、セカンダリに切り替わるように設定します。
準備
DNS環境の準備をします。
1.対象DNSゾーンを作成します:demo.shinpy.info
ゾーンの作成→ソーン名を入力し作成します。
※shinpy.infoのゾーンにdemo.shinpy.infoのNSレコードが自動で追加されます。
2.WEBサイトは下記のように表示されるよう準備しておきます。
今回はわかりやすく確認できるように、青色=OCIのWEBサイト、赤色=AWSのWEBサイトにしました。
(1)OCI:WEBサイト(LTの時のまま。。。)
(2)AWS:WEBサイト(Sorryページ)
トラフィック管理ステアリング・ポリシーの作成
トラフィック管理ステアリング・ポリシーを作成してフェイルオーバーの設定を行います。
1.トラフィック管理ステアリング・ポリシーの作成→下記の通り設定します。
・ポリシー・タイプ:フェイルオーバー
・ポリシー名:WEB-Failover(任意の名前)
・ポリシーTTL:10秒(本番は60秒以上が良いと思います。今回はデモなので短めに設定。)
・最大回答数:1(設定変更不可)
2.回答プールを作成します。
(1)回答プール1:プライマリWEBサイトの情報をAレコードとして登録します。
・回答プール名:Primary-WEB(任意の名前)
・回答:名前=oci(任意の名前) 、 タイプ=A 、 RDATA=138.3.211.90
(2)回答プール2:セカンダリWEBサイト(Sorryページ)の情報をAレコードとして登録します。
・回答プール名:Secondary-WEB(任意の名前)
・回答:名前=aws(任意の名前) 、 タイプ=A 、 RDATA=35.76.65.179
3.プールの優先度を設定します。
下図のように、Primary-WEBがメインなので、優先度を設定します。プール1が障害となると、プール2にフェイルオーバーします。
4.ヘルス・チェックのアタッチを設定します。
・ヘルス・チェック設定はまだ未設定でしたので、今回は「新規追加」を選択します。
・ヘルスチェック名:WEB-HC(任意の名前)
・間隔:10秒(TTLと同じく今回はデモなので短めに設定)
・プロトコル:HTTP
※環境によっては、拡張オプションを開いて詳細に設定可能です。
5.アタッチ済ドメイン(オプション)を設定します。
WEBサイトのFQDNを設定します。今回は「demo.shinpy.info」をWEBサイトのFQDNにしたいと思います。
※「http://demo.shinpy.info」とする。
・サブドメイン:空欄(もしサブドメインを設定したい場合は記載する)
※例:「www」と入力した場合、「www.demo.shinpy.info」となる。
・コンパートメント:DNSゾーンが作成してあるコンパートメントを指定
・ゾーン:demo.shinpy.info(準備で作成したドメインを選択)
6.ポリシーの作成をします。
最後にタグ付け設定がなければ、そのまま「ポリシーの作成」を選択します。
数十秒で「アクティブ」になりますので、これで作成完了です。
7.サイト閲覧可能か確認してみます。
・URL=http://demo.shinpy.info
問題なく見れてます。
OCIのDNSレコードを確認してみると、Aレコードは記載されてません。マネージド側で管理されるようです。
digコマンド等で引いてみると、Aレコードが引けます。
※demo.shinpy.info:A:138.3.211.90 となってるので、今はOCIにあるWEBサーバIPなのが分かります。
$ dig -t ANY demo.shinpy.info
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 22156
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1480
;; QUESTION SECTION:
;demo.shinpy.info. IN ANY
;; ANSWER SECTION:
demo.shinpy.info. 10 IN A 138.3.211.90
demo.shinpy.info. 300 IN SOA ns1.p68.dns.oraclecloud.net. hostmaster.demo.shinpy.info. 4 3600 600 604800 1800
demo.shinpy.info. 86400 IN NS ns4.p68.dns.oraclecloud.net.
demo.shinpy.info. 86400 IN NS ns1.p68.dns.oraclecloud.net.
demo.shinpy.info. 86400 IN NS ns2.p68.dns.oraclecloud.net.
demo.shinpy.info. 86400 IN NS ns3.p68.dns.oraclecloud.net.
フェイルオーバー確認
実際の障害を想定して、フェイルオーバー確認してみます。
今回は、WEBサービス停止しても良かったのですが、わかりやすくサーバを停止し、Sorryページに切り替わるか確認します。
1.事前にGoogleのDNSで「demo.shinpy.info」をnslookupしておき、OCIのWEBサーバを停止します。
$ nslookup
> server 8.8.8.8
Default server: 8.8.8.8
Address: 8.8.8.8#53
>
> demo.shinpy.info
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: demo.shinpy.info
Address: 138.3.211.90
>
2.ステアリング・ポリシーの詳細画面で、Primary-WEBのヘルス・ステータスが正常→異常に更新されます。
ヘルス・チェックを確認してみると、「138.3.211.90(OCIのWEBサーバ)」は「使用不可」となっていることが確認できます。
nslookupの結果を見ると、AWSのWEBサーバIPに更新されているのを確認できます。
$ nslookup
> server 8.8.8.8
Default server: 8.8.8.8
Address: 8.8.8.8#53
>
> demo.shinpy.info
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: demo.shinpy.info
Address: 138.3.211.90
>
> demo.shinpy.info
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: demo.shinpy.info
Address: 35.76.65.179
>
3.ブラウザで確認してみると、Sorryページに切り替わっているのが分かります。
問題なくフェイルオーバーされていることが確認できました。
4.OCIのWEBサーバを起動して、フェイルバックしてみます。
・サーバ起動
・ポリシーのヘルス・ステータス確認:正常に更新
・ヘルス・チェック確認:どちらも使用可能を確認
・nslookupで確認:OCIのWEBサーバIPに更新されていることを確認
$ nslookup
> server 8.8.8.8
Default server: 8.8.8.8
Address: 8.8.8.8#53
>
> demo.shinpy.info
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: demo.shinpy.info
Address: 138.3.211.90
>
> demo.shinpy.info
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: demo.shinpy.info
Address: 35.76.65.179
>
Server: 8.8.8.8
Address: 8.8.8.8#53
> demo.shinpy.info
Server: 8.8.8.8
Address: 8.8.8.8#53
Non-authoritative answer:
Name: demo.shinpy.info
Address: 138.3.211.90
>
・ブラウザで確認:OCIのWEBサイトが閲覧できることを確認
※問題無くフェイルバックしてます。
まとめ
今回ご紹介したサービスは、OCIだけでなく他のサービスも登録できるため、とても便利な機能だと思います。
フェイルオーバーだけでなく、他にもポリシー・タイプが豊富ですので、活用してみたいです。
この記事が2021年Cloudiiブログ最後の記事になる(はず)と思います。
最後に今年1年の投稿数を数えてみました。
・投稿数:41(ニュースリリースで少し稼いでますが。。。)
・私が投稿した記事数:この記事のみ。。。orz(それだけメンバー増&書いてくれてる!!)
来年(2022年)もCloudiiをどうぞよろしくお願いいたしますm(_ _)m