注册 登录
  • 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!

故障切换shell脚本自动增/删bind dns的宕机检测

服务器 开心洋葱 3234次浏览 已收录 0个评论 手机上查看

www.75271.com解析有多个A记录,下面是实现故障切换的脚本:
通过检测网站的返回状态码来确定服务器的健康状况,如果不返回或返回的状态非200,则开始记录一次故障,连续三次故障后开始删除此域名的故障ip A记录,如果之后的检测发现服务器已经恢复,则重新添加此ip的A记录。

  1. #!/bin/bash
  2. #===============================================================================
  3. #Description: this script is to automactic update dns record when website is down.
  4. #Author     : www.75271.com
  5. #文件说明:
  6. # /tmp/domain_list.txt                       需要监控的域名列表,每行一个域名
  7. # /tmp/${domain}_online_ip.txt               记录在线的服务器ip,需要提前写入IP,每行一个IP
  8. # /tmp/${domain}_down_ip.txt                 记录有故障的服务器ip
  9. # /tmp/curl.txt                              记录curl获取的http状态码
  10. # /tmp/${domain}_${server_ip}_cur_time.txt    记录服务器出现故障的次数
  11. #===============================================================================
  12. #设置一些必要的变量
  13. keyname=rndc-key
  14. keysecret=gAnBYq6xSv7FKTZFmzAD0Q==
  15. #用来检测本机网络是否正常
  16. function network_detect(){
  17. ping -c1 8.8.8.8 >/dev/null 2>&1 && echo connect || exit 1
  18. }
  19. #用来删除DNS记录
  20. function del_record(){
  21. /usr/local/bind/bin/nsupdate <<EOF
  22. key $keyname $keysecret
  23. update delete $domain A $1
  24. send
  25. quit
  26. EOF
  27. }
  28. #用来增加DNS记录
  29. function add_record(){
  30. /usr/local/bind/bin/nsupdate <<EOF
  31. key $keyname $keysecret
  32. update add $domain 3600 A $1
  33. send
  34. quit
  35. EOF
  36. }
  37. #用来检测在线ip列表健康状态
  38. function online_detect(){
  39. if [  -s /tmp/${domain}_online_ip.txt ] ;then
  40. for server_ip in `cat /tmp/${domain}_online_ip.txt` ;
  41. do
  42. curl -I -l -H “Host:$domain”  $server_ip -o “/tmp/curl.txt” >/dev/null 2>&1
  43. ###判断状态码是否为200
  44. if [ -s /tmp/curl.txt ] && grep ‘200 OK’ /tmp/curl.txt >/dev/null 2>&1;then
  45. echo “OK”
  46. ###清空故障次数
  47. rm -f /tmp/${domain}_${server_ip}_cur_time.txt
  48. ###状态码非200时
  49. else
  50. ###开始计算故障次数
  51. cur_time=0
  52. [ -s /tmp/${domain}_${server_ip}_cur_time.txt  ] && cur_time=`cat /tmp/${domain}_${server_ip}_cur_time.txt `
  53. cur_time=`expr $cur_time + 1`
  54. ###当故障次数大于等于3时
  55. if [ $cur_time -gt 3 ];then
  56. ###删除故障ip记录
  57. del_record $server_ip
  58. ###从在线ip列表中删除故障ip
  59. sed -i “/$server_ip/d” /tmp/${domain}_online_ip.txt
  60. ###记录故障ip到文件
  61. echo $server_ip >> /tmp/${domain}_down_ip.txt
  62. ###删除记录此ip的故障文件
  63. rm -f /tmp/${domain}_${server_ip}_cur_time.txt
  64. else
  65. ###记录故障次数
  66. echo $cur_time > /tmp/${domain}_${server_ip}_cur_time.txt
  67. fi
  68. fi
  69. rm -f /tmp/curl.txt
  70. done
  71. fi
  72. }
  73. #用来检测故障ip列表健康状态
  74. function down_detect(){
  75. if [ -s /tmp/${domain}_down_ip.txt ];then
  76. for server_ip in `cat /tmp/${domain}_down_ip.txt` ;
  77. do
  78. curl -I -l -H “Host:$domain”  $server_ip -o “/tmp/curl.txt” >/dev/null 2>&1
  79. if [ -s /tmp/curl.txt ] && grep ‘200 OK’ /tmp/curl.txt >/dev/null 2>&1;then
  80. ###添加A记录
  81. add_record $server_ip
  82. ###从${domain}_down_ip.txt删除故障ip
  83. sed -i “/$server_ip/d” /tmp/${domain}_down_ip.txt
  84. ###重新添加此ip到${domain}_online_ip.txt
  85. echo $server_ip >> /tmp/${domain}_online_ip.txt
  86. fi
  87. rm -f /tmp/curl.txt
  88. done
  89. fi
  90. }
  91. network_detect
  92. if [ -s /tmp/domain_list.txt ];then
  93. for domain in `cat /tmp/domain_list.txt` ;
  94. do
  95. online_detect
  96. down_detect
  97. done
  98. else
  99. echo “/tmp/domain_list.txt not found!”
  100. exit 1
  101. fi

要正常使用以上脚本,需要注意以下事项:
1、 /tmp/domain_list.txt 填写需要监控的域名,/tmp/${domain}_online_ip.txt填写对应域名的所有A记录。
2、根据bind设置修改脚本中的三个变量

  1. domain=www.75271.com
  2. keyname=rndc-key
  3. keysecret=gAnBYq6xSv7FKTZFmzAD0Q==

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

  1. allow-update {key rndc-key;};

rndc-key修改为自己的。


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明故障切换shell脚本自动增/删bind dns的宕机检测
喜欢 (0)
[开心洋葱]
分享 (0)
关于作者:
开心洋葱,开心洋葱头,水墨

您必须 登录 才能发表评论!

加载中……