すべてのプロダクト
Search
ドキュメントセンター

:ECSインスタンスによって開始されたDNSリクエストのスロットリングの軽減

最終更新日:Oct 18, 2024

仮想プライベートクラウド (VPC) の各ECS (Elastic Compute Service) インスタンスは、1秒あたり最大5,000のDNS (Domain Name System) リクエストを開始できます。 上限を超えると、スロットリングがトリガーされる可能性があり、サービスレベル契約 (SLA) で規定されている可用性を保証することはできません。 この問題に対処するには、次の2つの方法のいずれかを採用することを推奨します。

  • ECSインスタンスの数を増やします。 このようにして、DNSリクエストはより多くのECSインスタンスによって開始され、各ECSインスタンスによって開始されるDNSリクエストの数が削減されます。

  • キャッシュアクセラレーションのためにECSインスタンスのName Service Cache Daemon (nscd) サービスを有効にします。

    説明

    nscdが有効になっている場合、DNSレコードの更新は長期間有効になります。

nscdとは何ですか?

オペレーティングシステムのキャッシュサービスとして、nscdは、passwd、group、hosts、services、netgroupデータベースなどのネームサービス要求のキャッシュを提供します。 nscdはキャッシュヒット率を上げます。 このようにして、ネームサービスに対する要求が低減され、サービス応答が加速される。 このトピックでは、ECSインスタンスによって開始されるDNSリクエストを減らすようにhostsデータベースを設定する方法について説明します。

一般的なnscd関連のLinuxコマンド

コマンド

説明

yum install -y nscd

nscdをインストールします。

systemctl start nscd

nscdを開始します。

systemctl停止nscd

nscdを停止します。

systemctl再起動nscd

nscdを再起動します。

systemctlステータスnscd

nscdのステータスを照会します。

nscd -g

各パラメーターの設定と、設定が有効になった後のキャッシュヒット率を返します。

nscd -i

指定されたキャッシュデータを無効にします。 passwd、group、hosts、services、またはnetgroupデータベースのキャッシュデータを無効にできます。 たとえば、nscd -i hostsコマンドを実行して、hostsデータベースのキャッシュデータを無効にすることができます。

cat /etc/nscd.conf

nscdの設定を照会します。

vi /etc/nscd.conf

nscdの設定を変更します。

nscdのインストール

デフォルトでは、nscdは通常Linuxオペレーティングシステムにインストールされます。 ECSインスタンスにnscdがインストールされているかどうかわからない場合は、次のコマンドを実行できます。

systemctl status nscd#Check the status of nscd.

次の図に示す結果が返された場合、nscdはインストールされません。

image.png

次のコマンドを実行してnscdをインストールします。

yum install -y nscd

image.png

次の図に示すコマンドを実行して、nscdのステータスを確認します。 次の図に示す結果が返された場合、nscdはインストールされますが、起動されません。

image.png

nscdの有効化

次のコマンドを実行してnscdを有効にします。

systemctl start nscd

次の図に示すコマンドを実行して、nscdのステータスを確認します。 次の図に示す結果が返された場合、nscdは実行中です。

image.png

説明

Community Enterprise Operating System (CentOS) またはRed Hat Enterprise Linuxにnscdをインストールするには、yum install -y nscdコマンドを実行します。

DebianまたはUbuntuにnscdをインストールするには、apt-get install -y nscdコマンドを実行します。

nscdの設定

/etc/nscd.confファイルは、nscdのデフォルト設定ファイルです。 次のコマンドを実行して、nscdの設定を表示できます。

cat /etc/nscd.conf

image.png

キーパラメーター

パラメーター

説明

デバッグレベル

reload-count

成功したDNS要求のキャッシュデータをシステムが自動的に照会し、キャッシュデータを更新する最大回数を指定します。

パラノイア

パラノイアモードを有効にするかどうかを指定します。 このモードを有効にすると、nscdが定期的に再起動します。

restart-interval

パラノイアモードが有効な場合の再起動の間隔を指定します。

enable-cache

キャッシュサービスを有効にするかどうかを指定します。

ポジティブ-time-to-live

成功したDNSリクエストのキャッシュデータの有効期間 (TTL) を指定します。

negative-time-to-live

失敗したDNS要求のキャッシュデータのTTLを指定します。 サービスが影響を受けないように、このパラメーターを0に設定することを推奨します。

check-files

キャッシュファイルの変更時刻を確認するかどうかを指定します。 ファイルには、/etc/passwd、/etc/group、および /etc/hostsファイルが含まれます。 最後のチェックの後にファイルが変更された場合、キャッシュされたファイルは消去されます。

persistent

nscdの再起動後にキャッシュデータを保持するかどうかを指定します。 パラノイアモードが有効になっている場合は、この機能を有効にすることを推奨します。

共有

nscdデータベースのメモリマッピングをクライアントと共有するかどうかを指定します。 デフォルト値はyesです。 nscd -gコマンドを実行してキャッシュヒット率を照会する場合は、sharedをnoに設定します。

max-db-size

nscdデータベースの最大サイズ。 単位はバイトです。

重要
  • ポジティブ-time-to-liveは無視できます。 DNS要求によって返されるTTLが優先されます。

  • 共有がnoに設定されている場合にのみ、nscd -gコマンドを実行してキャッシュヒット率を照会できます。

nscdのキャッシュ結果の確認

キャッシュ結果nscdが無効の場合

  1. ECSインスタンスで次のコマンドを実行し、ポート53でUDPパケットをキャプチャします。

    tcpdump -i any udp and port 53
  2. nscdが無効になっている場合、ECSインスタンスで次のコマンドを3回実行します。

    ping -c 1 -n www.taobao.com#Ping the domain name www.taobao.com.

    image.png

  3. 対応するキャプチャされたUDPパケットを表示します。 3つのDNS要求がポート53を介して送信され、各DNS要求がDNSレコードで応答されることがわかります。 これは、DNSレコードがキャッシュされていないことを示します。 その結果、ECSインスタンスは毎回DNSリクエストをポート53に送信する必要があります。

    image.png

nscdが有効な場合のキャッシュ結果

  1. コマンドを実行してnscdを有効にし、nscdが有効かどうかを確認します。

  2. nscdが有効になっている場合、ECSインスタンスで次のコマンドを6回連続して実行します。ECSインスタンスのポート53でパケットをキャプチャします。

    ping -c 1 -n www.taobao.com

    image.png

  3. 対応するキャプチャされたパケットを表示します。 最初のDNSリクエストのみがポート53に送信されることがわかります。 これは、後続のDNS要求がnscdによってキャッシュされたDNSレコードにヒットし、ポート53を介して送信されないことを示します。image.png

    重要

    パケットキャプチャ中に、ドメイン名をpingした場合でも、tcpdumpコマンドはドメイン名のDNSリクエストのパケットを定期的にキャプチャできます。 これは、通常の現象であるnscdの自動リロード機構によって引き起こされます。 reload-countを0に設定すると、自動リロードメカニズムが無効になります。

  4. 次のコマンドを実行して、ドメイン名を数回連続してpingした後、キャッシュヒット状況を照会できます。

    nscd -g# Return the configuration of each parameter and the cache hit ratio after the configuration takes effect.

    image.png