2011年12月16日

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のツールを紹介したいと思います。


#dSn
klab_gijutsu2 at 18:29│Comments(0)TrackBack(0)dsas | network

トラックバックURL

この記事にコメントする

名前:
URL:
  情報を記憶: 評価: 顔   
 
 
 
Blog内検索
Archives
このブログについて
DSASとは、KLab が構築し運用しているコンテンツサービス用のLinuxベースのインフラです。現在5ヶ所のデータセンタにて構築し、運用していますが、我々はDSASをより使いやすく、より安全に、そしてより省力で運用できることを目指して、日々改良に勤しんでいます。
このブログでは、そんな DSAS で使っている技術の紹介や、実験してみた結果の報告、トラブルに巻き込まれた時の経験談など、広く深く、色々な話題を織りまぜて紹介していきたいと思います。
最新コメント