BIND名称服务器的数据包队列性能差异
背景: 我继承了一个高容量缓存的名称服务器环境(Redhat Enterprise Linux 5.8,IBM System x3550),该环境的环形缓冲区设置不一致:eth0为1020,eth1为255。eth0连接到其本地数据中心的交换机1,eth1连接到其本地数据中心的交换机2。集群中的每个服务器在eth0或eth1是活动接口之间交替,并且每个集群位于不同的区域。显然需要使环形缓冲区保持一致。 事情变得更加棘手:在研究为什么许多域名服务器经常记录“错误发送响应:未设置”错误时,我发现了上述问题,ISC知识库建议该错误与出站拥塞有关。具有较高环形缓冲区设置(1020)的服务器在ifconfig上丢弃的数据包较少(正如人们期望的那样),但是在我的最高负载组之一中,每天记录该错误的频率很高,每天大约2万次。我们将其称为“第1组”。具有较低环形缓冲区(255)设置的服务器每天丢弃的入站数据包明显多得多(再次,是预期的),但BIND错误的实例要少得多,在同一负载组中通常为0-150。 这里也不是什么大谜。缓存DNS是一种递归服务:如果未缓存某些内容,则服务器必须代表该问题进行多个查询,直到最终返回答案为止。这是一个(一个)->(很多)查询关系。修复RX环形缓冲区应该使该数字等于整个值,然后从那里调整proc(wmem_max / wmem_default)中的内核出站网络队列可能是一个好主意。 我喜欢能够评估配置更改对性能问题的影响,因此我写了一份报告以收集一些数据,然后再开始进行生产更改。这是第1组中前两个服务器的输出示例: group1-01 RX: 7166.27/sec av. TX: 7432.57/sec av. RXDROP: 7.43/sec av. unset_err: 27633 group1-02 RX: 7137.37/sec av. TX: 7398.50/sec av. RXDROP: 9.94/sec av. unset_err: 107 这些是公式。请注意,这是一个本地脚本,并且不依赖每个服务器必须维护的Shell脚本。 RXPACK=$(ssh $server "sar -n DEV -f /var/log/sa/sa$(date --date=yesterday '+%d') | grep \"Average: .*\$(awk …