仮想プライベートクラウド (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はインストールされません。

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

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

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
キーパラメーター
パラメーター | 説明 |
デバッグレベル | |
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です。 |
max-db-size | nscdデータベースの最大サイズ。 単位はバイトです。 |
ポジティブ-time-to-liveは無視できます。 DNS要求によって返されるTTLが優先されます。
共有がnoに設定されている場合にのみ、
nscd -gコマンドを実行してキャッシュヒット率を照会できます。
nscdのキャッシュ結果の確認
キャッシュ結果nscdが無効の場合
ECSインスタンスで次のコマンドを実行し、ポート53でUDPパケットをキャプチャします。
tcpdump -i any udp and port 53nscdが無効になっている場合、ECSインスタンスで次のコマンドを3回実行します。
ping -c 1 -n www.taobao.com#Ping the domain name www.taobao.com.
対応するキャプチャされたUDPパケットを表示します。 3つのDNS要求がポート53を介して送信され、各DNS要求がDNSレコードで応答されることがわかります。 これは、DNSレコードがキャッシュされていないことを示します。 その結果、ECSインスタンスは毎回DNSリクエストをポート53に送信する必要があります。

nscdが有効な場合のキャッシュ結果
コマンドを実行してnscdを有効にし、nscdが有効かどうかを確認します。
nscdが有効になっている場合、ECSインスタンスで次のコマンドを6回連続して実行します。ECSインスタンスのポート53でパケットをキャプチャします。
ping -c 1 -n www.taobao.com
対応するキャプチャされたパケットを表示します。 最初のDNSリクエストのみがポート53に送信されることがわかります。 これは、後続のDNS要求がnscdによってキャッシュされたDNSレコードにヒットし、ポート53を介して送信されないことを示します。
重要パケットキャプチャ中に、ドメイン名をpingした場合でも、tcpdumpコマンドはドメイン名のDNSリクエストのパケットを定期的にキャプチャできます。 これは、通常の現象であるnscdの自動リロード機構によって引き起こされます。 reload-countを0に設定すると、自動リロードメカニズムが無効になります。
次のコマンドを実行して、ドメイン名を数回連続してpingした後、キャッシュヒット状況を照会できます。
nscd -g# Return the configuration of each parameter and the cache hit ratio after the configuration takes effect.