株式会社ディー・エヌ・エーでは、「モバオク」「モバゲータウン」などの、Web/携帯電話向け大規模サービスを開発/運営しており、新しいオープンソースソフトウェアの導入も積極的に行なっている。本パートでは、このような実績を通して見い出されてきたWeb-DBシステムの構築/運用ノウハウを紹介していく。前編はこちら。 (DB Magazine 2007年6月号より転載)
MyDNSによるDNSラウンドロビンの問題解決
MyDNSを導入して利用した場合、先述のDNSラウンドロビンの問題点が以下のように解決できる。
分散比率の制御
MyDNSには、重み付きラウンドロビンが標準でサポートされている。ウェイトはrrテーブルのauxカラムに設定する。値が小さいほうが優先される仕組みである。
この機能を使用してスレーブサーバーごとの処理能力に応じた分散制御が行なえる(画面3)。
DeNAではaux値に比例して分散するようにパッチを当てている(LIST3)。
diff -urN mydns-1.1.0/src/mydns/sort.c mydns-1.1.0-dena/src/mydns/sort.c
--- mydns-1.1.0/src/mydns/sort.c 2006-01-19 05:46:47.000000000 +0900
+++ mydns-1.1.0-dena/src/mydns/sort.c 2006-12-31 05:19:11.000000000 +0900
@@ -180,7 +180,7 @@
weights += ((MYDNS_RR *)node->rr)->aux;
if (weights >= rweight)
{
- node->sort1 = 65535 - order++;
+ node->sort1 = order++;
}
このパッチにより画面3の設定例では、1:2の割合でリクエストが分散される。さらにダイナミックにウェイトを変更できるので、状況に応じた分散制御はMySQLに対するupdate文を実行するだけで可能である。
障害時の対応
加えてRRレコードの検索条件を追加指定できる機能があり、/etc/mydns.confのrr-whereパラメータに次の検索条件を追加する。
rr-where=aux>0
これによりauxが0の場合は名前解決から除外されるようになる。auxカラムもMySQLに対するupdate文の実行だけでダイナミックに変更できるため、監視プログラムなどからスレーブサーバーの障害を検知した場合、自動的にスレーブ群からの切り離しができる。監視プログラムは自前で用意する必要があるが、
update rr set aux=0 where data='故障スレーブサーバーIPアドレス'
を実行するだけで良いので簡単に用意できるだろう。この機能は、大変便利で障害対策だけでなくメンテナンス時などにもよく利用している。
この記事は参考になりましたか?
- この記事の著者
-
能登 信晴(ノト トキハル)
株式会社ディー・エヌ・エーにて、ケータイ向けサービス開発と運用を担当。以前はソリューション事業の一環で顧客企業向けコンサルティングや提携サイト構築プロジェクト統括なども行なっていた。「DeNA 技師のメモ」更新中。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
早乙女 正巳(サオトメ マサミ)
株式会社ディー・エヌ・エーにて、ケータイ向けサービス「モバコレ」の立ち上げと運用を担当。以前はディー・エヌ・エーのPC サービスの開発を幅広く担当していた。モバコレに関しては1 人で物流/決済などを含むすべての開発を約2 ヶ月で行なった。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア