DSAS環境でのDNS活用法 〜ネットワーク設定の格納にDNSを使う〜
KLab Advent Calendar 2011 「DSAS for Social を支える技術」 の12日目です。
昨日までの apache の話題からガラリとかわって DNS についてお話します。
DSAS 内では、サービスに用いるドメインに関する権威サーバのほかに、システム内部の各サーバのホスト名や DB、memcache などの役割に応じた名前を登録した内部向けドメインの権威サーバやキャッシュサーバを運用しています。
システム内に、内部向けの権威サーバや、キャッシュサーバを設置するのは、珍しい構成ではありませんが、DSAS では、内部向け DNS サーバに、システムの設定情報を一部格納しています。
今回は、DSAS 環境で DNS サーバに設定情報を格納している理由や運用方法を紹介します。
ネットブートと設定ファイルの動的生成
DNS の話題に入る前に、DSAS の特徴を 1 つ紹介します。
DSAS では、マスタとなる冗長化された1組のサーバ以外、全てのサーバはネットブートによって起動します。
マスタサーバには、ロードバランサ用・Webサーバ用・DBサーバ用等の役割のサーバを構成するファイル一式が圧縮されたアーカイブが置かれていて、これをOSイメージと呼んでいます。
PXEブートにより、カーネルと initramfs がロードされて起動処理が開始されると、マスタサーバから自分の役割に応じたOSイメージ等をダウンロードして、tmpfs に展開します。
この OS イメージは、さすがに個々のサーバごとに個別に用意するわけにはいかないため、機能毎の共通ファイルとなっています。
そこで問題となるのが、個々のサーバに個別のパラメータを記述する必要がある設定ファイル類の扱いです。
DB サーバの MySQL で使用する server-id、ロードバランサやmemcacheの冗長化に使っている VRRP のルータID 等の各種デーモンの設定ファイルはもちろん、自身のネットワークインタフェースに割り当てるIPアドレスすら、起動処理内で決定する必要があります。
DSAS では、これらの設定ファイル類は、いくつかのタネになる情報を元にして、起動スクリプト内で動的に生成する仕組みを導入しています。
各デーモンや、インタフェースの設定を行う rc スクリプトの前に、設定ファイルを生成するための rc スクリプトを実行するという方法です。
そして、設定ファイルを生成するためのタネ情報を仕込む場所の1つが DNS サーバなのです。
DNSに格納するパラメータの例
DSAS 環境で DNS に登録するパラメータの一例を紹介します。
主に、ネットワークの設定を生成するために必要な情報が中心になります。
パラメータを登録するドメインとして、とあるゾーンを定義して、下記のようにTXTレコードで値を登録しています。
なお、実際の DSAS 環境では、権威サーバの実装に tinydns を使用しているため、tinydns-data フォーマットで記述しています。
private IN TXT "dsas.jp" net.private IN TXT "192.168.0.0/20" global IN TXT "example.klab.jp" net.global IN TXT "XXX.XXX.XXX.XXX/xx" net.link IN TYT "YYY.YYY.YYY.0/29" lv1.link IN TYT "YYY.YYY.YYY.4" lv2.link IN TYT "YYY.YYY.YYY.5" lvs.link IN TYT "YYY.YYY.YYY.6" gw.link IN TYT "YYY.YYY.YYY.3" lv1.vlanid.link IN TXT "1" lv2.vlanid.link IN TXT "1" lvs.vrid.link IN TXT "100"
private/global/net.private/net.globalは、それぞれ内部用・外部用のドメイン名、プライベートアドレス、サービス用グローバルIPアドレスのレンジになっています。
真ん中の *.link 系のレコードは、ロードバランサが自身のネットワーク設定を行うための情報です。
データセンタ側の上位ネットワークと DSAS をつなぐセグメントのアドレスや、その中で使用するIPアドレスなどが定義されています。
( lv1、lv2というのは、冗長化された2台のロードバランサを指し、lvs は VRRP で使用する仮想IPアドレスを指します)
VRRP のルータIDや、インタフェースに設定する VLAN I Dなども登録されているので、ロードバランサのインタフェース設定に必要な情報は、殆ど DNS 内の情報を編集するだけで調整できます。
このロードバランサを含め、ほとんどのサーバが起動時に DNS 上の情報を参照して、自身のネットワーク設定を行なっています。
すると、ネットワーク設定のために DNS を参照する必要があって、それにはネットワークが必要という、鶏が先か卵が先かという問題が発生してしまいます。
次週は、この問題を解決するための方法や、使用しているdjbdnsのツールを紹介したいと思います。