一、安装bindweb
yum install -y bind bind-chroot bind-utis
二、配置named.confshell
[root@dns /]# vi /etc/named.conf
注:在options中增长 rrset-order { order cyclic; }; 分配的会更均匀。centos
三、配置named.rfc1912.zones缓存
[root@dns /]# vi /etc/named.rfc1912.zones
四、配置正向解析bash
[root@dns /]# cd /var/named/ [root@dns named]# cp named.localhost test.com.zone(必定要和主配置文件里面定义的zone文件名一致) [root@dns named]# vi test.com.zone
zone配置文件简单说明:服务器
常见的正解文件 RR 相关信息网络
[domain] IN [[RR type] [RR data]]dom
主机名. IN A IPv4 的 IP 地址curl
主机名. IN AAAA IPv6 的 IP 地址ide
领域名. IN NS 管理这个领域名的服务器主机名字.
领域名. IN SOA 管理这个领域名的七个重要参数(如上说明)
领域名. IN MX 顺序数字 接收邮件的服务器主机名字
主机别名. IN CNAME 实际表明这个主机别名的主机名字.
单位:W= 周、D= 日、H= 小时、M= 分钟。
$TTL 86400
@ IN SOA ns.helome.com. root ( # ns.test.web. 是DNS服务器的名称
0 ; serial (d. adams) 仅做为序列号而已
1D ; refresh 服务器的更新时间
15M ; retry 从新更新时间间隔
1W ; expiry 多久以后宣布失败
1H ) ; minimum 至关于缓存记忆时间
@ IN NS ns.helome.com.
@ IN MX 5 mail.helome.com. (5为优先级别)
ns IN A 192.168.32.131
www IN A 192.168.32.131
mail IN A 192.168.32.131
五、关闭iptables
service iptables stop
六、看配置文件有没有读取权限
[root@dns /]# ll /var/named/
若是没有 chmod +r /var/named/* 便可
七、设置rndc.key
rndc-confgen -r /dev/urandom -a
八、启动bind
service named start
bind dns 宕机检测 故障切换shell脚本
www.test.com解析有多个A记录,下面是实现故障切换的脚本:
经过检测网站的返回状态码来肯定服务器的健康情况,若是不返回或返回的状态非200,则开始记录一次故障,连续三次故障后开始删除此域名的故障ip A记录,若是以后的检测发现服务器已经恢复,则从新添加此ip的A记录。
要正常使用下面脚本,须要注意如下事项:
一、把域名的A记录IP写入/tmp/online_ip.txt文件,格式为每行一个IP。
二、根据bind设置修改脚本中的三个变量
(vi /etc/rndc.key , 可获取keyname和keysecret)
三、在named.conf文件中的zone添加以下代码:
vi /etc/named.rfc1912.zones中增长
allow-update {key rndc-key;};
rndc-key修改成本身的。
#!/bin/bash #=============================================================================== #Description: this script is to automactic update dns record when website is down. #Author : www.centos.bz #文件说明: # /tmp/online_ip.txt 记录在线的服务器ip,须要提早写入IP,每行一个IP # /tmp/down_ip.txt 记录有故障的服务器ip # /tmp/curl.txt 记录curl获取的http状态码 # /tmp/${server_ip}_cur_time.txt 记录服务器出现故障的次数 #=============================================================================== #设置一些必要的变量 domain=www.test.com keyname=rndc-key keysecret=PwLjE4wQaXHnt/yQi+lY6g== #用来检测本机网络是否正常 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 <<EOF key $keyname $keysecret update delete $domain A $1 send quit EOF } #用来增长DNS记录 function add_record(){ /usr/local/bind/bin/nsupdate <<EOF key $keyname $keysecret update add $domain 3600 A $1 send quit EOF } #用来检测在线ip列表健康状态 function online_detect(){ if [ -s /tmp/online_ip.txt ] ;then for server_ip in `cat /tmp/online_ip.txt` ; do curl -I -l -H "Host:$domain" $server_ip -o "/tmp/curl.txt" >/dev/null 2>&1 ###判断状态码是否为200 if [ -s /tmp/curl.txt ] && grep '200 OK' /tmp/curl.txt >/dev/null 2>&1;then echo "OK" ###清空故障次数 rm -f /tmp/${server_ip}_cur_time.txt ###状态码非200时 else ###开始计算故障次数 cur_time=0 [ -s /tmp/${server_ip}_cur_time.txt ] && cur_time=`cat /tmp/${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/online_ip.txt ###记录故障ip到文件 echo $server_ip >> /tmp/down_ip.txt ###删除记录此ip的故障文件 rm -f /tmp/${server_ip}_cur_time.txt else ###记录故障次数 echo $cur_time > /tmp/${server_ip}_cur_time.txt fi fi rm -f /tmp/curl.txt done fi } #用来检测故障ip列表健康状态 function down_detect(){ if [ -s /tmp/down_ip.txt ];then for server_ip in `cat /tmp/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 ###从down_ip.txt删除故障ip sed -i "/$server_ip/d" /tmp/down_ip.txt ###从新添加此ip到online_ip.txt echo $server_ip >> /tmp/online_ip.txt fi rm -f /tmp/curl.txt done fi } network_detect online_detect down_detect