Mobageの技術を体験(MyDNS編)

13,179 views

Published on

Mobageで利用されているMyDNSを少し使ってみました。
社内での勉強会で発表した資料です。

Mobageの技術を体験(MyDNS編)

  1. 1. Mobageのインフラ構成を体験してみる~MyDNS編~ Tech-Talk   Daisuke Ikeda
  2. 2. 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/
  3. 3. Mobageでの使われ方Mobageでは負荷分散のためのロードバランシングにMyDNSのDNSラウンドロビンを活用大量機器の冗長構成を支えるためにこの方式を採用 ※ Mobageを支える技術~ソーシャルゲームの舞台裏~  著:DeNA
  4. 4. BINDとMyDNS・OSSのDNSサーバとしてはBINDが有名・何が違う? - BINDはこのようなファイル形式でレコード情報格納 options { $TTL 86400 directory "/var/named"; @ IN SOA localhost. root.localhost. ( pid-file "/var/run/named/named.pid"; 2003121301 ; serial listen-on-v6{ 3600 ; refresh 1hr any; (1) 900 ; retry 15min } 604800 ; expire 1w }; 86400 ; min 24hr ) zone "localhost" { IN NS localhost. type master; IN A 127.0.0.1 file "local.zone"; IN AAAA ::1 }; - MyDNSはDBのテーブルでレコード情報格納   ・SOAテーブル、RRテーブルに2テーブルで全て管理・大規模環境や、動的に変化するような環境ではファイル管理の仕組みは厳しい
  5. 5. MyDNSインストール&設定OS: CentOS5.5DB: MySQL5.0系 (mydns用DB、ユーザ作成済み) インストール 設定(/etc/mydns.conf)# yum install mydns mydns-mysql DB初期化 db-host = localhost # SQL server hostname db-user = username # SQL server username# mydns --create-tables | mysql -u mydns -p db-password = password # SQL server passwordmydns database = mydns # MyDNS database name 管理画面用php配置 listen = * # Listen on these addresses (* for all) no-listen = # Do not listen on these addresses# cp /usr/share/mydns/admin.php /var/www/html/ rr-where = などなど mydnsデーモン起動 UDP53ポートで待ち受け開始 (必要に応じてiptables変更)# mydns -b
  6. 6. MyDNS DNSレコード設定・管理画面からGUIで登録
  7. 7. 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);
  8. 8. MyDNSを使ってDNSラウンドロビン同一ホスト名のAレコードを登録すればOKaux値の大小で振り分け量を調節可能(数値の小さい方がより多く振り分けられる)aux値が0のレコードがあれば全リクエストが0の方に振り分けられるmydns.confに以下の指定をしていると、aux>0のレコードにしか割り振られない rr-where = aux > 0有効にするrrレコードの条件指定が可能
  9. 9. DNSラウンドロビンとロードバランサ・DNSラウンドロビンを使えば振り分けは可能・但し、振り分け先が存在しない場合、失敗・Mobageでは、振り分け先が疎通できるか確認し、RRを書き換える仕組みを独自構築・ロードバランサを使った場合
  10. 10. その他DB型DNS・PrimDNS(GREEさんが作られた国産DNS) - 検索性能UPのためエンジン周りの実装に工夫があるらしい  → ゾーン毎にエンジンを変えて処理させること可能 - BINDの設定を移行できる機能あり - 機能面で不十分な点があるらしい? NOTIFY,AXFR未対応?・PowerDNS - DNSSECに対応させることも可能らしい - 利用事例が多そう(情報が多い)(MyDNS.jpが採用) - PowerDNS on Railsという管理ツールもあり - BIND設定を移行するツールあり(zone2sql)
  11. 11. AmazonRoute53- AWS上のDNSサービス- ユーザはAPI経由でレコード登録するのみでOK- 従量課金制 ・ 1ゾーン毎の課金$0.5/月(25ゾーンまで。それ以上の場合は$0.1/月) ・ 100万リクエスト毎の課金$0.5/月(10億リクエストまで。それ以上の場合は$0.25/月)- 重み付きルーティングにも対応 ・ 0~255の重み付が可能(数字が大きい方により多くのルーティング) ・ 0に設定することでそのノードへのルーティングをストップすることが可能 ・ 全て0に設定すれば全レコード均等に配分- AWS Management Consoleから簡単に設定可能
  12. 12. AmazonRoute53
  13. 13. まとめ・レコードの管理は楽・各サーバの稼働状況を確実に監視する必要あり - 監視ツールと連携させれば自動化も可能かも・MyDNSの情報少ない・・・ - MyDNS.JPばかり検索される

×