gdnsdとdnsdistでGSLB構築
以前、gdnsdとnginxリバースプロキシ機能を使って、
可用性を維持したグローバルロードバランサ(GSLB)を構築したのだが、
“gdnsd+nginx” 構成で1年運用した所、”ns-lab BB” では次の様な問題が出てきた。
- 可用性が高すぎて縮退メンテナンスが面倒
メンテの為にサクッとGSLBの権威DNSから外したい場合、
上位DNSサーバでサブドメイン委譲設定を変更する必要があった。
エンタープライズなら委譲設定変更(NSレコード削除)も実施するが、
自鯖用途だと大げさにせずサクッと外したい場合が出てきた。
- DNSクエリログを取得出来ない
nginxリバプロ構成の場合、クライアントからのDNSクエリはnginxが処理する為、
nginxでクエリログを取得する必要がある。
ただし、nginxの仕様でUDPリバースプロキシでパケットログ取得が出来ないので、
別途構築したログ監視などが出来なかった。
という事で、課題を解決すべくオープンソースカンファレンスでネタを探したり、
twitter上で技術情報も追いかけていた所、dnsdistを使うとDNSに特化したリバプロを構築出来る事が判った。
『善は急げ!』という事で、テスト環境で実際に構築した上で『コレは行けるな!』と感触も得られたので、
休みを使って “ns-lab BB” のインターネット向けGSLB環境にdnsdistを組み込んでみた。
構成変更後の構成は下の通り。変更前は「たすき掛け」で負荷分散を行っていたが、
変更後は「シングル」に変更して、DNSクエリが飛んでくる経路を敢えて単純化した。
ただし、いつ何時「たすき掛け」に戻すか判らないので、
dnsdistでもたすき掛けに変更出来る様にもしてみた。
ロギングについては、dnsdistで受けたDNSクエリをローカルログ出力をした上で、
自作プログラムを使ってリアルタイムでsyslog変換しつつ、リモート転送も行う様にした。
結果、DNSクエリログの集約化と監査も可能となり、課題となっていた項目を解決出来た。
1週間稼働させつつテストもしたが、実際のケースで秒間100~500クエリを捌きつつ、
ログ取得・リモート転送も問題無く動いている。
この構成を取ると、gdnsdの弱点であったロギングを補う事も出来る為、
GSLBをOSSで構築したい場合には重宝する構成例になるかも知れない。
ぶっちゃけ、GSLBをOSS使ってまで自前構築するケースは相当稀だと思うが、
アプライアンスを使えなかったり、インターネットと疎通が出来ない様な環境ではRoute53とかを使えないので、
自前で全て構築するケースは多々存在する。
既にあるシステムを使ったとしても、裏の仕組みを把握しているか否かで全体の理解度も変わってくる為、
GSLBを弄っている人については、一度OSSで自前構築してみるのをオススメしたい。