首页 小组 文章 搜索 用户
全部 linux Nginx Apache PHP DNS windows 其它 同步与备份 js 数据库 前端 unix

bind dns 宕机检测 故障切换shell脚本

天边的云
发表于 2020-07-10 07:48:33

原文来源于:https://www.centos.bz/2012/05/bind-dns-down-detection-shell-script/

代码:

#!/bin/bash

#===============================================================================

#Description: this script is to automactic update dns record when website is down.

#Author     : www.centos.bz

#文件说明:

# /tmp/domain_list.txt                       需要监控的域名列表,每行一个域名

# /tmp/${domain}_online_ip.txt               记录在线的服务器ip,需要提前写入IP,每行一个IP

# /tmp/${domain}_down_ip.txt                 记录有故障的服务器ip

# /tmp/curl.txt                              记录curl获取的http状态码

# /tmp/${domain}_${server_ip}_cur_time.txt    记录服务器出现故障的次数

#===============================================================================

 

#设置一些必要的变量

keyname=rndc-key

keysecret=gAnBYq6xSv7FKTZFmzAD0Q==

 

#用来检测本机网络是否正常

function network_detect(){

ping -c1 8.8.8.8 >/dev/null 2>&1 && echo connect || exit 1

}

 

#用来删除DNS记录

function del_record(){

/usr/local/bind/bin/nsupdate &1;then

echo "OK"

###清空故障次数

rm -f /tmp/${domain}_${server_ip}_cur_time.txt

###状态码非200时

else

###开始计算故障次数

cur_time=0

[ -s /tmp/${domain}_${server_ip}_cur_time.txt  ] && cur_time=`cat /tmp/${domain}_${server_ip}_cur_time.txt `

cur_time=`expr $cur_time + 1`

 

###当故障次数大于等于3时

if [ $cur_time -gt 3 ];then

###删除故障ip记录

del_record $server_ip

###从在线ip列表中删除故障ip

sed -i "/$server_ip/d" /tmp/${domain}_online_ip.txt

###记录故障ip到文件

echo $server_ip >> /tmp/${domain}_down_ip.txt

###删除记录此ip的故障文件

rm -f /tmp/${domain}_${server_ip}_cur_time.txt

 

else

###记录故障次数

echo $cur_time > /tmp/${domain}_${server_ip}_cur_time.txt

fi

fi

rm -f /tmp/curl.txt

 

done

fi

}

 

#用来检测故障ip列表健康状态

function down_detect(){

if [ -s /tmp/${domain}_down_ip.txt ];then

for server_ip in `cat /tmp/${domain}_down_ip.txt` ;

do

curl -I -l -H "Host:$domain"  $server_ip -o "/tmp/curl.txt" >/dev/null 2>&1

if [ -s /tmp/curl.txt ] && grep '200 OK' /tmp/curl.txt >/dev/null 2>&1;then

###添加A记录

add_record $server_ip

###从${domain}_down_ip.txt删除故障ip

sed -i "/$server_ip/d" /tmp/${domain}_down_ip.txt

###重新添加此ip到${domain}_online_ip.txt

echo $server_ip >> /tmp/${domain}_online_ip.txt

fi

rm -f /tmp/curl.txt

done

fi

}

network_detect

if [ -s /tmp/domain_list.txt ];then

for domain in `cat /tmp/domain_list.txt` ;

do

online_detect

down_detect

done

else

echo "/tmp/domain_list.txt not found!"

exit 1

fi

要正常使用以上脚本,需要注意以下事项:

1、 /tmp/domain_list.txt 填写需要监控的域名,/tmp/${domain}_online_ip.txt填写对应域名的所有A记录。

2、根据bind设置修改脚本中的三个变量


domain=www.centos.bz

keyname=rndc-key

keysecret=gAnBYq6xSv7FKTZFmzAD0Q==

3、在named.conf文件中的zone添加如下代码:


allow-update {key rndc-key;};

rndc-key修改为自己的。

312 0

评论