一个愚蠢的错误

今天犯了一个愚蠢的错误。写了个脚本,把我的DNS系统里1300多个无用的域名删除了。有3台NS服务器,上面运行有HTTP API,管理本机的named.conf。脚本会挨个调用API,更改named.conf把zone删除。我在执行这个操作时,应该关掉另外一个zone管理进程。外部用户提交域名变更请求后,这个zone管理进程会自动调用NS服务器的API完成相关操作。由于没关掉这个进程,加上我自己手工运行的脚本,结果导致某个时刻,有2个进程在同时更改named.conf,从而产生了数据错乱。

删完域名后,发现有2台NS服务器异常,重启起不来。检查日志发现是named.conf格式错误导致。不过第3台NS服务器居然工作良好,named.conf格式也正确。于是从第3台NS上把这个文件拷贝到另外两台,恢复了服务。为什么第3台没有受影响呢?一开始想了半天没明白。后来检查服务器配置,发现第3台的httpd服务器,设置了只有一个进程运行。只有一个httpd进程接受请求,其他请求会排队,这就间接保证了不会有2个进程同时更改配置文件,所以没有出错。

当然,根本原因还是HTTP API程序没有对文件读写设置加锁。而这个愚蠢的错误,再次说明运维的细心与规范化操作太重要了。

此条目发表在Common分类目录,贴了, 标签。将固定链接加入收藏夹。