Furyu
[フリュー公式]

Tech Blog

フリュー株式会社の技術ブログです

2018年08月27日

Kayo

サーバ増設したらDNSラウンドロビンが壊れた!?

はじめに

みなさん、こんにちは。ピクトリンク事業部インフラ課の藤本佳世です。

 

先日、稼働中のサーバにアクセスが集中したため、サーバ増設を行いました。

その作業の1つとして、DNSラウンドロビン設定に増設したサーバを追加したのですが、上手く負荷分散されず、今まで特に問題なく利用していたDNSラウンドロビンの思わぬ落とし穴にはまってしまったので、忘れないようにブログに書いておきます。

DNSラウンドロビンとは

1つのドメイン名に複数のIPアドレスを割り当て、負荷を分散させる技術のこと。

スライド1

 

メリットは、簡単に設定ができることです。

スライド2
私が行ったように急遽サーバ増設が必要になった場合でも、zoneファイル上の対象ドメイン名に増設したサーバのIPアドレスを追加するだけで負荷分散してくれます。

 

デメリットは、万が一、サーバに障害が発生しても検知することができず、負荷を分散し続けてしまうこと。結果クライアントにエラーが返されてしまいます。

はまったこと

zoneファイル上の対象ドメイン名(test.com)に、増設したサーバ2台のIPアドレスを追加しました。

下記、実際に追加したzoneファイルの中身です。

この変更を加えるまでは、問題なく4台で負荷分散できていたのですが、2台を追加したことで、この2台しか負荷分散ができなくなったしまったのです。

スライド3

原因

DNSラウンドロビンの数に制限があるかなど、色々調べてみましたが、

原因は、増設したIPアドレスの「一致長が変わったのが原因でした。※参考になったURLがこちら

スライド4

4列目のIPアドレスと問い合わせる側の自分のIPアドレス(192.168.0.1)を比較し、一致する部分の長さが最も大きくなるものが使われるようです。つまり、増設した192.168.0.6と192.168.0.7が選択され、それ以外のものは使われなくなってしまったということです。

対応策

一致長が異なるのが問題だったので、これを合わせてやる(別のIPアドレスを使う)ことで増設することができました。

まとめ

DNSラウンドロビンはとても簡単に設定ができるので、弊社でも長らく利用してきました。

今回、思わぬ落とし穴にはまってしまったのですが、DNSラウンドロビンの問題は今回のものだけではありません。例えば、DNSサーバのBINDのバージョン9.13.2(unstable版)では、そもそもラウンドロビンが動作しなくなっているようです。
DNSは名前解決に専念させ、負荷分散はロードバランサに任せるなど、今後もDNSラウンドロビンを使い続けるかどうか慎重な検討が必要のようです。


2018年06月28日

Kayo

DNS逆引きやってみました!

みなさん、こんにちは。ピクトリンク事業部インフラ課の藤本佳世です。
今回は「DNS逆引き」についてお話しします。
インフラ業務を行っていると、「このIPアドレス、どこのサーバ?」といった状況に出くわすことが多く、今回DNS逆引き対応をして、日々の業務改善ができました。

DNSとは

DNSとは、Domain Name Systemの略で、ホスト名をもとに、ホストのIPアドレスを教えてくれます。
IPアドレスとは、サーバ1台ずつに割り振られた識別番号で、ネットワーク上の住所のようなもの。
このIPアドレスをもとに、情報のやり取りをします。

例として、nslookupを使って、test01.server.com(ホスト名)のIPアドレスを調べてみます。

IPアドレスは、192.168.33.60と教えてくれます。
IPアドレスは、8bitごとに4つに分割され、それぞれ10進数で表示されます。

上記の例では、test01.server.comというホスト名に対して、IPアドレスを取得しました。
しかし、もしこれが「192.168.33.60」だけ知っていて、ホスト名を調べる際どうすればいいでしょうか?

この問題を解決してくれるのが、DNS逆引きです。

DNS逆引きとは

ホストのIPアドレスをもとに、ホスト名を教えてくれます。
nslookupを使って、192.168.33.60のホスト名を調べます。

ホスト名は、test01.server.comと教えてくれます。

逆引きを実施したときの、60.33.168.192.in-addr.arpaとは何でしょうか?

in-addr.arpaとは

IPアドレスに名前を付けたものが、in-addr.arpaアドレスです。
つまり、192.168.33.60のin-addr.arpaアドレスは60.33.168.192.in-addr.arpaとなります。

逆引きの設定

/var/named/chroot/etc/named.confに設定を追加

/var/named/chroot/var/named/data/192.168.33.revファイルを指定します。

そして、192.168.33.revファイルの中身がこちらです。

60はtest01.server.com、61はtest02.server.comだと分かります。

このように設定ファイルを少し修正するだけで、DNS逆引きをすることが可能となりました。
とても便利なので、みなさんも是非やってみて下さい!