1、安装bind

yum install -y bind bind-chroot bind-utis

2、配置named.conf

[root@dns /]# vi /etc/named.conf


注:在options中增加 rrset-order { order cyclic; }; 分配的会更均匀。

3、配置named.rfc1912.zones

[root@dns /]# vi /etc/named.rfc1912.zones

4、配置正向解析

[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]]

主机名.   IN  A           IPv4 的 IP 地址

主机名.   IN  AAAA        IPv6 的 IP 地址

领域名.   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

5、关闭iptables

service iptables stop

6、看配置文件有没有读取权限

[root@dns /]# ll /var/named/

如果没有 chmod +r /var/named/*  即可

7、设置rndc.key

rndc-confgen -r /dev/urandom -a

8、启动bind

service named start

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

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

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

1、把域名的A记录IP写入/tmp/online_ip.txt文件,格式为每行一个IP。

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

  1. domain=www.test.com
  2. keyname=rndc-key
  3. keysecret=PwLjE4wQaXHnt/yQi+lY6g==

(vi /etc/rndc.key  , 可获取keyname和keysecret)

3、在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 >& && echo connect || exit
} #用来删除DNS记录
function del_record(){
/usr/local/bind/bin/nsupdate <<EOF
key $keyname $keysecret
update delete $domain A $
send
quit
EOF
} #用来增加DNS记录
function add_record(){
/usr/local/bind/bin/nsupdate <<EOF
key $keyname $keysecret
update add $domain A $
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 >&
###判断状态码是否为200
if [ -s /tmp/curl.txt ] && grep '200 OK' /tmp/curl.txt >/dev/null >&;then
echo "OK"
###清空故障次数
rm -f /tmp/${server_ip}_cur_time.txt
###状态码非200时
else
###开始计算故障次数
cur_time=
[ -s /tmp/${server_ip}_cur_time.txt ] && cur_time=`cat /tmp/${server_ip}_cur_time.txt`
cur_time=`expr $cur_time + ` ###当故障次数大于等于3时
if [ $cur_time -gt ];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 >&
if [ -s /tmp/curl.txt ] && grep '200 OK' /tmp/curl.txt >/dev/null >&;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

CentOS6.4 配置DNS服务器的更多相关文章

  1. 烂泥:centos安装及配置DNS服务器

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 要在centos配置DNS服务器,要先安装DNS软件BIND.当然我们也可以安装其他的DNS软件,比如国内的开源DNS软件DNSPod. 在此我们以通过 ...

  2. 在Debian上用Bind 配置DNS服务器

    1 什么是DNS 初学者可能不理解DNS到底是什么,干什么用.我是在1998年大学毕业时才听说这个词的.那时我在聊天室碰到潍坊信息港的一个网管,我恬不知耻地说我也是个网管,他说也维护DNS吗?我说,D ...

  3. 如何配置DNS服务器(局域网——域名指向某个IP地址)

    单击“开始”,指向“管理工具”,然后单击“DNS”,打开 DNS 管理器.   如有必要,向管理单元添加适用的服务器,然后连接该服务器.在控制台树中,单击适用的 DNS 服务器.   在“操作”菜单上 ...

  4. 配置DNS服务器IP

    #############################脚本功能及说明#################### #该脚本用来在本地服务器上配置DNS服务器IP #创建时间:2014-10-22 ## ...

  5. Linux下搭建Oracle11g RAC(2)----配置DNS服务器,确认SCAN IP可以被解析

    从Oracle 11gR2开始,引入SCAN(Single Client Access Name) IP的概念,相当于在客户端和数据库之间增加一层虚拟的网络服务层,即是SCAN IP和SCAP IP  ...

  6. centOS7配置DNS服务器

    世上无难事只怕有心人,遇事千万千万不要抵触,消极的情绪是失败之母,一点一滴,踏踏实实是通往幸福的捷径. 历经激动,受挫,抵触和鼓励以及征服,终于配好了让我欢喜让我忧的dns.在这里记录下来,希望能够给 ...

  7. CentOS7安装和配置dns服务器

    (1)dns介绍 1.基本介绍 名字解析: NetBIOS名:localhost wins hosts FQDN:完全限定域名,www.baidu.com hosts文件: 作用:实现名字解析,主要为 ...

  8. CentOS6.5下DNS服务器搭建与配置

    一.安装机器情况 192.168.1.70(dns 主节点) 192.168.1.71(dns 从节点) 二.主节点DNS的安装及配置 1. DNS服务器所需的软件包安装 yum -y install ...

  9. 配置DNS服务器

    一.配置基本的DNS 服务器(包含正向解析和反向解析)域名:abc.com服务器IP:10.1.2.11 1. 编辑主配置文件/etc/named.conf---------------------- ...

随机推荐

  1. 【GoLang】GoLang fmt 占位符详解

    golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf. # 定义示例类型和变量 type Human struct { Name string } var peo ...

  2. 【Spring】Spring系列7之Spring整合MVC框架

    7.Spring整合MVC框架 7.1.web环境中使用Spring 7.2.整合MVC框架 目标:使用Spring管理MVC的Action.Controller 最佳实践参考:http://www. ...

  3. eclipse字体的设置

    eclipse的默认字体太小,所以设置的大一些比较清楚,方法很简单,单击菜单栏的"Window"选择"Preferences",如下图: 然后左侧依次选择Gen ...

  4. Android Handler leak 分析及解决办法

    In Android, Handler classes should be static or leaks might occur, Messages enqueued on the applicat ...

  5. 如何给Eclipse中添加库(jar包)

    折腾Eclipse时,经常会遇到这种情况: 缺少某个库,找到之后,需要将该库,jar包,加入到当前项目,使得代码中的import xxx得以正常导入. 举例: [已解决]Eclipse的java代码出 ...

  6. Oracle如何操作级联删除

    级联删除即删除包含主键值的行的操作,该值由其它表的现有行中的外键列引用.在级联删除中,还删除其外键值引用删除的主键值的所有行. 语法: Foreign Key (column[,...n]) refe ...

  7. PHP“Cannot use object of type stdClass as array” (php在调用json_decode从字符串对象生成json对象时的报错)

    php再调用json_decode从字符串对象生成json对象时,如果使用[]操作符取数据,会得到下面的错误 错误:Cannot use object of type stdClass as arra ...

  8. javascript普通链表及双向链表

    写代码的真是心细啊,每一步操作的先后顺序都在卡准. 我其实只是理解了思想和大概的操作. 真正要用时,可能还是要复制,粘贴...:) function LinkedList(){ var Node = ...

  9. CSS优化技巧

    CSS是页面效果呈现中非常重要的组成部分,它包括颜色.大小尺寸.背景和字体等.写CSS很简单很容易,但是要想写出精炼的CSS代码还是有很多技巧的. 下面就是技巧7则: . 合并多个相同属性: 比如很多 ...

  10. Java中如何使封装自己的类,建立并使用自己的类库?

    转自:http://blog.csdn.net/luoweifu/article/details/7281494 随着自己的编程经历的积累会发现往往自己在一些项目中写的类在别的项目中也会有多次用到.你 ...