Click here to load reader
Upload
daisuke-ikeda
View
9.919
Download
3
Embed Size (px)
DESCRIPTION
Mobageで利用されているMyDNSを少し使ってみました。 社内での勉強会で発表した資料です。
Citation preview
Mobageのインフラ構成を
体験してみる~MyDNS編~
Tech-Talk Daisuke Ikeda
MyDNSとは
・レコードをDB(MySQL or PostgreSQL)管理するDNSサーバ・内部ドメインの管理用DNSサーバとして立てることが可能・最新はver.1.2.8.31(MyDNSとMyDNS-NGの違いに注意)・ゾーン転送についてはNOTIFY,AXFRにも対応・IPv6にも対応・ENUM対応(NAPTRレコード)・DNSSECには未対応?・移行用コマンド(mydnsimport)有り
※ MyDNS http://mydns.bboy.net/ ※ MyDNS-NG http://mydns.bboy.net/
Mobageでの使われ方
Mobageでは負荷分散のためのロードバランシングにMyDNSのDNSラウンドロビンを活用
大量機器の冗長構成を支えるためにこの方式を採用
※ Mobageを支える技術~ソーシャルゲームの舞台裏~ 著:DeNA
BINDとMyDNS
・OSSのDNSサーバとしてはBINDが有名・何が違う? - BINDはこのようなファイル形式でレコード情報格納
- MyDNSはDBのテーブルでレコード情報格納
・SOAテーブル、RRテーブルに2テーブルで全て管理
・大規模環境や、動的に変化するような環境ではファイル管理の仕組みは厳しい
$TTL 86400@ IN SOA localhost. root.localhost. ( 2003121301 ; serial 3600 ; refresh 1hr 900 ; retry 15min 604800 ; expire 1w 86400 ; min 24hr) IN NS localhost. IN A 127.0.0.1 IN AAAA ::1
options { directory "/var/named"; pid-file "/var/run/named/named.pid"; listen-on-v6{ any; (1) }};
zone "localhost" { type master; file "local.zone";};
MyDNSインストール&設定
OS: CentOS5.5DB: MySQL5.0系 (mydns用DB、ユーザ作成済み)
# yum install mydns mydns-mysql
インストール 設定(/etc/mydns.conf)
db-host = localhost # SQL server hostnamedb-user = username # SQL server usernamedb-password = password # SQL server passworddatabase = mydns # MyDNS database name
listen = * # Listen on these addresses ('*' for all)no-listen = # Do not listen on these addresses
rr-where =などなど
DB初期化
# mydns --create-tables | mysql -u mydns -p mydns
管理画面用php配置
mydnsデーモン起動
# cp /usr/share/mydns/admin.php /var/www/html/
# mydns -b
UDP53ポートで待ち受け開始(必要に応じてiptables変更)
MyDNS DNSレコード設定
・管理画面からGUIで登録
MyDNS DNSレコード設定
・SQL文で登録
mysql> select * from rr;+----+------+-----------+--------------------------+-----+-----+-------+| id | zone | name | data | aux | ttl | type |+----+------+-----------+--------------------------+-----+-----+-------+| 1 | 1 | server1 | 10.1.1.1 | 0 | 300 | A | | 2 | 1 | server1 | 10.1.1.2 | 0 | 300 | A | | 3 | 1 | server1v6 | fe80::20c:29ff:f116:c11b | 50 | 300 | AAAA | | 5 | 1 | server2 | server1.example.com. | 50 | 300 | CNAME | | 6 | 1 | server1 | x86_64 CentOS | 0 | 300 | HINFO | +----+------+-----------+--------------------------+-----+-----+-------+5 rows in set (0.00 sec)
mysql> select * from soa;+----+--------------+----------------------+------------------+------------+---------+-------+--------+---------+-------+| id | origin | ns | mbox | serial | refresh | retry | expire | minimum | ttl |+----+--------------+----------------------+------------------+------------+---------+-------+--------+---------+-------+| 1 | example.com. | test-dns.example.com | mail.example.com | 2012072401 | 28800 | 7200 | 604800 | 86400 | 86400 | +----+--------------+----------------------+------------------+------------+---------+-------+--------+---------+-------+1 row in set (0.00 sec)
INSERT INTO rr (zone,name,data,aux,ttl,type) VALUES (1,'server3','10.1.1.3',50,300,'A');
MyDNSを使ってDNSラウンドロビン
同一ホスト名のAレコードを登録すればOK
aux値の大小で振り分け量を調節可能(数値の小さい方がより多く振り分けられる)aux値が0のレコードがあれば全リクエストが0の方に振り分けられる
mydns.confに以下の指定をしていると、aux>0のレコードにしか割り振られない
有効にするrrレコードの条件指定が可能
rr-where = aux > 0
DNSラウンドロビンとロードバランサ
・DNSラウンドロビンを使えば振り分けは可能
・但し、振り分け先が存在しない場合、失敗・Mobageでは、振り分け先が疎通できるか確認し、RRを書き換える仕組みを独自構築・ロードバランサを使った場合
その他DB型DNS
・PrimDNS(GREEさんが作られた国産DNS) - 検索性能UPのためエンジン周りの実装に工夫があるらしい
→ ゾーン毎にエンジンを変えて処理させること可能 - BINDの設定を移行できる機能あり - 機能面で不十分な点があるらしい?
NOTIFY,AXFR未対応?
・PowerDNS - DNSSECに対応させることも可能らしい
- 利用事例が多そう(情報が多い)(MyDNS.jpが採用)
- PowerDNS on Railsという管理ツールもあり
- BIND設定を移行するツールあり(zone2sql)
AmazonRoute53 - AWS上のDNSサービス
- ユーザはAPI経由でレコード登録するのみでOK
- 従量課金制
・ 1ゾーン毎の課金$0.5/月(25ゾーンまで。それ以上の場合は$0.1/月)
・ 100万リクエスト毎の課金$0.5/月(10億リクエストまで。それ以上の場合は$0.25/月)
- 重み付きルーティングにも対応
・ 0~255の重み付が可能(数字が大きい方により多くのルーティング)
・ 0に設定することでそのノードへのルーティングをストップすることが可能
・ 全て0に設定すれば全レコード均等に配分
- AWS Management Consoleから簡単に設定可能
AmazonRoute53
まとめ
・レコードの管理は楽・各サーバの稼働状況を確実に監視する必要あり - 監視ツールと連携させれば自動化も可能かも・MyDNSの情報少ない・・・ - MyDNS.JPばかり検索される