![执行 rndc reload 后绑定获取区域传输状态](https://linux22.com/image/702113/%E6%89%A7%E8%A1%8C%20rndc%20reload%20%E5%90%8E%E7%BB%91%E5%AE%9A%E8%8E%B7%E5%8F%96%E5%8C%BA%E5%9F%9F%E4%BC%A0%E8%BE%93%E7%8A%B6%E6%80%81.png)
我有一个在修改区域的辅助(从属)服务器上执行的脚本rndc reload <zone_name> in <view_name>
。如果重新加载成功排队,此命令将返回成功。
我想知道是否有办法可以获取实际区域传输的状态,而无需查看日志本身。我希望能够根据错误本身自动处理绑定重新加载失败的情况。目前,我必须在执行后解析日志以获取区域传输的状态rndc reload
。
有人能帮我弄清楚如何在执行后获取区域传输的状态rndc reload <zone_name>
,这比解析日志本身更好。
注[为了更加清晰]:我知道通知可用于让主设备向从设备传达有关更改的信息。我的问题是,是否有任何方法可以获取已通知当从属设备发起的区域传输由于任何原因失败而未解析日志时。
例如,可能是在通知从服务器后,主服务器由于某种原因死亡。在这种情况下,当从服务器启动区域传输时,它将无法从主服务器获取 SOA 记录。我希望在没有实际解析日志的情况下收到区域传输期间可能发生的此类错误的通知。
如果需要更多信息,请告诉我。
答案1
(错误)日志文件是 Bind 记录此类错误的唯一地方,因此如果您不想解析日志文件中的特定错误(尽管您可以使用 Splunk 之类的工具来自动执行此类解析并生成相关警报),您需要做其他事情。
从监控的角度来看,我认为您专注于在区域传输期间收到错误通知有点偏离了重点。实际上,错误并不是最重要的,重要的是这些错误表明服务减少、失败或错误。相反,应该关注服务本身。
正确配置的监控解决方案将检测到此类服务状态变化并向您发出警报。然后您的工程师/操作员可以轻松搜索日志文件以查找服务减少/故障的相关原因...
在主从场景中,您的监控需要确保:
- 所有从属和主名称服务器均响应并返回区域数据
- 所有从属设备都返回与主设备一致的数据
用于监控区域的良好 DNS 记录是 SOA 记录,因为每个名称服务器都应该始终能够为每个区域返回该记录。
其次,SOA 记录中的序列号应该会告诉您从属设备是否与主设备同步。如果序列号存在差异,则可能是由于从属设备错过了 NOTIFY 消息,但如果该差异存在的时间长于 SOA 刷新间隔,则会出现更严重的问题。
答案2
使用以下命令创建脚本slave.sh
:
#!/bin/sh
ns1="yourfirstdnsserver"
ns2="yourslavednsserver"
serial='grep SOA |cut -d " " -f7'
domain=$1
rndc reload $domain
a=`host -t SOA $domain $ns1 |grep SOA |cut -d " " -f7`
b=`host -t SOA $domain $ns2 |grep SOA |cut -d " " -f7`
if [ $a = $b ];
then echo "$domain : synchro ok";
else "$domain : Error";
fi;
只需使用./slave.sh yourdomain.com
。
享受!
答案3
a=`host -t SOA yourdomain.com yourns1.com |grep SOA |cut -d " " -f7` && b=`host -t SOA yourdomain.com yourns2.com |grep SOA |cut -d " " -f7` && if [ $a = $b ]; then echo "synchro ok"; else "Error"; fi;