DNSラウンドロビンとは?複数サーバへ負荷分散する仕組みを理解する

DNSラウンドロビン

DNSラウンドロビンとは?DNSによる負荷分散の仕組み

Webサイトのアクセス数が増えてくると、1台のサーバだけでは処理しきれなくなることがあります。

そのような場合に利用される技術の一つが負荷分散(ロードバランシング)です。

負荷分散というとロードバランサやリバースプロキシを思い浮かべる人が多いですが、DNSにも簡易的な負荷分散機能があります。

それがDNSラウンドロビンです。

DNSラウンドロビンは、複数のIPアドレスを順番に返すことでアクセスを分散する仕組みです。

本記事ではDNSラウンドロビンの仕組みやメリット・デメリット、実際の利用例について解説します。

DNSラウンドロビンとは

DNSラウンドロビンとは、1つのホスト名に対して複数のAレコードやAAAAレコードを登録し、DNSサーバが順番に応答する仕組みです。

例えば次のような設定です。

www.example.com. IN A 192.168.1.10
www.example.com. IN A 192.168.1.11
www.example.com. IN A 192.168.1.12

同じホスト名に対して3台のサーバが登録されています。

DNSサーバは問い合わせごとに応答順序を変更します。

通常のDNSとの違い

通常のDNSでは1つのホスト名に対して1つのIPアドレスが返されます。

www.example.com
↓
192.168.1.10

DNSラウンドロビンでは複数のIPアドレスが返されます。

www.example.com
↓
192.168.1.10
192.168.1.11
192.168.1.12

クライアントは通常、最初のIPアドレスへ接続します。

ラウンドロビンの動作例

問い合わせが3回行われた場合の例です。

1回目の問い合わせです。

192.168.1.10
192.168.1.11
192.168.1.12

2回目です。

192.168.1.11
192.168.1.12
192.168.1.10

3回目です。

192.168.1.12
192.168.1.10
192.168.1.11

このように順番を変えることでアクセスを分散します。

なぜ負荷分散できるのか

多くのOSやブラウザは、DNS応答で最初に返されたIPアドレスへ接続します。

そのため問い合わせごとに順番を変更することで、結果的にアクセスが複数サーバへ分散されます。

利用例

例えば3台のWebサーバがある場合です。

Web01 192.168.1.10
Web02 192.168.1.11
Web03 192.168.1.12

DNSラウンドロビンを設定することで、利用者のアクセスを3台へ分散できます。

BINDでの設定例

BINDでは単純に複数のAレコードを記述します。

www IN A 192.168.1.10
www IN A 192.168.1.11
www IN A 192.168.1.12

特別な設定は必要ありません。

BINDが自動的にラウンドロビンを行います。

digコマンドで確認する

設定確認にはdigコマンドを利用します。

dig www.example.com

結果例です。

www.example.com. IN A 192.168.1.10
www.example.com. IN A 192.168.1.11
www.example.com. IN A 192.168.1.12

複数のAレコードが表示されます

DNSラウンドロビンのメリット

構成がシンプル

ロードバランサが不要です。

DNSだけで実現できます。

コストが安い

専用機器が不要です。

小規模環境でも導入できます。

設定が簡単

Aレコードを追加するだけで利用できます。

DNSラウンドロビンのデメリット

サーバ障害を検知できない

例えばWeb02が停止していてもDNSはIPアドレスを返し続けます。


Web01 正常
Web02 停止
Web03 正常

利用者によっては接続失敗します。

完全な均等分散ではない

クライアント側の実装によって動作が異なります。

均等にアクセスが分散される保証はありません。

セッション維持ができない

ログイン情報などを保持する仕組みがありません。

アクセスのたびに別サーバへ接続される可能性があります。

TTLとの関係

DNSラウンドロビンではTTL設定も重要です。

www.example.com. 300 IN A 192.168.1.10

TTLが長いとクライアントが同じIPアドレスを長期間利用します。

負荷分散効果が弱くなることがあります。

ロードバランサとの違い

項目DNSラウンドロビンロードバランサ
障害検知できない可能
負荷分散精度低い高い
セッション維持不可可能
導入コスト低い高い

クラウド環境での利用

現在のクラウド環境ではDNSラウンドロビン単独で利用されることは少なくなっています。

代わりに次のようなサービスが利用されます。

  • AWS Elastic Load Balancer
  • Azure Load Balancer
  • Google Cloud Load Balancing
  • Cloudflare Load Balancing

これらは障害検知やヘルスチェック機能を備えています。

GeoDNSとの違い

GeoDNSはアクセス元地域によって異なるIPアドレスを返す仕組みです。

DNSラウンドロビンは単純に順番を変更するだけです。

目的が異なります。

よくあるトラブル

停止サーバへ接続してしまう

DNSはサーバ状態を把握していません。

停止中のサーバのIPアドレスも返してしまいます。

キャッシュの影響

TTLが長い場合、特定サーバへアクセスが集中することがあります。

期待した分散にならない

クライアント実装やキャッシュDNSサーバの影響を受ける場合があります。

実務で覚えておきたいポイント

  • DNSラウンドロビンは複数のAレコードで実現する
  • DNSレベルの簡易負荷分散である
  • 障害検知はできない
  • TTL設定が重要
  • 大規模環境ではロードバランサが一般的

まとめ

DNSラウンドロビンは、複数のAレコードやAAAAレコードを利用してアクセスを分散する仕組みです。

設定が簡単でコストも低いため、小規模環境では有効な負荷分散手法として利用できます。

ただし、サーバ障害を検知できないことや負荷分散精度が低いことから、大規模環境ではロードバランサが利用されることが一般的です。

DNSの仕組みを理解する上で、ラウンドロビンは非常に分かりやすい負荷分散技術と言えるでしょう。