09 « 1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.» 11

AWS Route53でDNSラウンドロビン 

まずはAWSRoute53にサインアップしておきます。

1ドメインにつき$1/月、100万クエリまでは従量課金は無いようです。
詳細はこちらで確認してください。Route53料金表



おおまかな手順はこんなところです。

1)ドメイン取得
2)Route53の設定
3)ネームサーバをRoute53に変更
4)DNSラウンドロビンの設定


1)ドメイン取得
今回は、お名前.comでドメインを取得しました。
スクリーンショット(2011-05-04 11.05.16)


2)Route53の設定
AWSのManagement ConsoleではRoute53の設定ができないため、Rubyなどで設定用スクリプトを作成することになります。少し面倒なのでAWSの管理コンソールサービスCloudworks(無料)を利用しました。AWSのアカウントナンバー、アクセスキーID、シークレットアクセスキーを登録すればすぐに使えます。(日本語なのでほっとします)

登録が終わったら「Route53 (Beta)ゾーン」>「ゾーンの追加」を押します。
スクリーンショット(2011-05-04 11.37.35)

ドメイン名に1)で取得したドメイン名を入力して「追加する」を押します。(末尾ドット抜け防止がうれしい)
スクリーンショット(2011-05-04 11.43.34)


3)ネームサーバをRoute53に変更
Route53のネームサーバを確認するため対象ドメインの「詳細」ボタンを押します。
スクリーンショット(2011-05-04 12.10.39)

NSレコードにあるネームサーバをドメインを取得したお名前.comで設定します。
スクリーンショット(2011-05-04 12.20.49)

お名前.comのドメイン管理ツールで対象ドメインのネームサーバ「変更する」を押します。
スクリーンショット(2011-05-04 12.30.04)

「他のネームサーバを利用」を選択して、Route53のネームサーバ4つを入力後「確認画面へ進む」を押します。確認画面にて間違いがなければ「設定する」を押します。
スクリーンショット(2011-05-04 12.42.34)


ネームサーバが反映されるまで24〜72時間かかります。
手元のPCで「dig <ドメイン名> ns」とやってRoute53のネームサーバが反映されるまでしばらく待ちます。


dig arpanet617.info ns

(略)
;; ANSWER SECTION:
arpanet617.info.    171802    IN    NS    ns-104.awsdns-13.com.
arpanet617.info.    171802    IN    NS    ns-805.awsdns-36.net.
arpanet617.info.    171802    IN    NS    ns-1257.awsdns-29.org.
arpanet617.info.    171802    IN    NS    ns-1972.awsdns-54.co.uk.

反映されたようです。


4)DNSラウンドロビンの設定
ドメイン名に複数のサーバ(IPアドレス)を割当てるのですが、一定間隔でサーバのヘルスチェックを行いNGの場合は割当を外すことが必要になります。こればっかりはスクリプトを作成して行います。

まず下記3つの値を確認しておきます。

・「アクセスキー ID」と「シークレットアクセスキー」
 AWS>アカウント>アカウントアクティビティ>セキュリティ証明書 にて確認できます。
スクリーンショット(2011-05-04 16.08.57)

・「ゾーンID」
 Cloudworks>Route53 (Beta)ゾーン
スクリーンショット(2011-05-04 11.52.15)


スクリプトはPHPで作成しました。
こちらのライブラリを使います→http://www.orderingdisorder.com/aws/route-53/

main.php・・・・スクリプト本体
r53.php・・・・・・ダウンロードしたライブラリ

main.php

<?php
require_once('r53.php');

$access_key = '<アクセスキー ID>';
$secret_key = '<シークレットアクセスキー>';
$zone_id = '/hostedzone/<ゾーンID>';

$r53 = new Route53($access_key, $secret_key);

// 複数のIPアドレスを登録する場合は、あらかじめ配列変数に入れておきます。
$ips = array('192.0.2.1', '192.0.2.2', '192.0.2.3');
$change = $r53->prepareChange('CREATE', 'arpanet617.info.', 'A', 60, $ips);

// レコード追加処理実行
$res = $r53->changeResourceRecordSets($zone_id, $change);


$changeを設定しているところの「60」がTTL値です。ヘルスチェックの間隔にもよりますが、短めに設定します。yahooだと60、googleは300になっていました。(2011/5/5)

一度スクリプトを実行してエラーが出なければ、レコードが追加されています。何度かdigしてみるとラウンドロビンしているのが分かると思います。
dig arpanet617.info

(1回目)
arpanet617.info.    60    IN    A    192.0.2.2
arpanet617.info.    60    IN    A    192.0.2.3
arpanet617.info.    60    IN    A    192.0.2.1
(2回目)
arpanet617.info.    47    IN    A    192.0.2.1
arpanet617.info.    47    IN    A    192.0.2.2
arpanet617.info.    47    IN    A    192.0.2.3
(3回目)
arpanet617.info.    39    IN    A    192.0.2.3
arpanet617.info.    39    IN    A    192.0.2.1
arpanet617.info.    39    IN    A    192.0.2.2


レコードを変更する場合は一度削除してから、再登録します。

// レコードの削除
$change = $r53->prepareChange('DELETE', 'arpanet617.info.', 'A', 60, $ips);
$res = $r53->changeResourceRecordSets($zone_id, $change);


あとは、ヘルスチェック結果によってレコードを変更する機能を実装して、定期間隔で実行すれば完成です。自分の場合は、ヘルスチェックは file_get_contents() にてレイヤ7チェック、定期間隔実行は crontab でやっています。


ロードバランスはElastic Load Balancingを使えばもっと手軽にできますしセッションの面倒もみてくるそうです。ただしサーバはAWSのインスタンスに限られます。DNSラウンドロビンならAWSとニフティクラウドさくらのVPSなどマルチベンダでロードバランスできるのが面白いと思います。

Posted on 2011/05/04 Wed. 11:16 [edit]

category: サーバ

thread: サーバー  -  janre: コンピュータ

TB: 0    CM: 0

04

コメント

Comment
list

コメントの投稿

Secret

Comment
form

トラックバック

トラックバックURL
→http://arpanet617.blog.fc2.com/tb.php/2-bd70f468
この記事にトラックバックする(FC2ブログユーザー)

Trackback
list