はじめに
みなさん、こんにちは。ピクトリンク事業部インフラ課の藤本佳世です。
先日、稼働中のサーバにアクセスが集中したため、サーバ増設を行いました。
その作業の1つとして、DNSラウンドロビン設定に増設したサーバを追加したのですが、上手く負荷分散されず、今まで特に問題なく利用していたDNSラウンドロビンの思わぬ落とし穴にはまってしまったので、忘れないようにブログに書いておきます。
DNSラウンドロビンとは
1つのドメイン名に複数のIPアドレスを割り当て、負荷を分散させる技術のこと。
メリットは、簡単に設定ができることです。
私が行ったように急遽サーバ増設が必要になった場合でも、zoneファイル上の対象ドメイン名に増設したサーバのIPアドレスを追加するだけで負荷分散してくれます。
デメリットは、万が一、サーバに障害が発生しても検知することができず、負荷を分散し続けてしまうこと。結果クライアントにエラーが返されてしまいます。
はまったこと
zoneファイル上の対象ドメイン名(test.com)に、増設したサーバ2台のIPアドレスを追加しました。
下記、実際に追加したzoneファイルの中身です。
test.com IN A 192.168.0.144 test.com IN A 192.168.0.145 test.com IN A 192.168.0.146 test.com IN A 192.168.0.147 test.com IN A 192.168.0.6 ★増設したサーバ test.com IN A 192.168.0.7 ★増設したサーバ
この変更を加えるまでは、問題なく4台で負荷分散できていたのですが、2台を追加したことで、この2台しか負荷分散ができなくなったしまったのです。
原因
DNSラウンドロビンの数に制限があるかなど、色々調べてみましたが、
原因は、増設したIPアドレスの「一致長が変わった」のが原因でした。※参考になったURLがこちら
4列目のIPアドレスと問い合わせる側の自分のIPアドレス(192.168.0.1)を比較し、一致する部分の長さが最も大きくなるものが使われるようです。つまり、増設した192.168.0.6と192.168.0.7が選択され、それ以外のものは使われなくなってしまったということです。
対応策
一致長が異なるのが問題だったので、これを合わせてやる(別のIPアドレスを使う)ことで増設することができました。
test.com IN A 192.168.0.144 test.com IN A 192.168.0.145 test.com IN A 192.168.0.146 test.com IN A 192.168.0.147 test.com IN A 192.168.0.141 ★増設したサーバ test.com IN A 192.168.0.142 ★増設したサーバ
まとめ
DNSラウンドロビンはとても簡単に設定ができるので、弊社でも長らく利用してきました。
今回、思わぬ落とし穴にはまってしまったのですが、DNSラウンドロビンの問題は今回のものだけではありません。例えば、DNSサーバのBINDのバージョン9.13.2(unstable版)では、そもそもラウンドロビンが動作しなくなっているようです。
DNSは名前解決に専念させ、負荷分散はロードバランサに任せるなど、今後もDNSラウンドロビンを使い続けるかどうか慎重な検討が必要のようです。