Centos下高可用主从同步DNS服务部署

一、背景介绍

在日常工作中,为解决内网域名解析问题,时长会配置DNS服务来提供解析。这时DNS服务就起到了为所有内部服务提供连通的基础,变得非常重要了。所以在服务启动后还是应该考虑服务的高可用和数据的完整性。

网友有很多LVS+Keepalived+Bind的负载均衡高可用的解决方案,非常不错。不过自建DNS常用在公司内部平台之间的调用,所以负载均衡的意义并不是太大。当然,高可用还是需要保证的。本文章介绍通过Keepalived+Bind实现高可用主从同步DNS服务

二、基础环境

Master DNS:10.61.100.51

Slave DNS:10.61.100.52

VIP:10.61.100.50

三、bind配置

3.1、安装bind(主从)

# yum install bind bind-chroot   安装包的作用就不做过多的介绍了

安装完成后会生成下面的文件

[[email protected] ~]# ll /var/named/chroot/
总用量 20
drwxr-x--- 2 root named 4096 7月  11 16:55 dev
drwxr-x--- 5 root named 4096 7月  11 19:31 etc
drwxr-xr-x 2 root root  4096 7月  11 19:31 lib64
drwxr-xr-x 3 root root  4096 7月  11 16:55 usr
drwxr-x--- 6 root named 4096 7月  11 16:55 var
[[email protected] ~]# ll /etc/named.conf 
-rw-r----- 1 root named 1311 7月  11 17:39 /etc/named.conf
其中/etc/named.conf其实就是/var/named/chroot/etc/named.conf,在启动后会在/var/named/chroot/etc生成相关配置文件。

3.2、创建named.conf配置文件(主从都要配置,从配置在下面给出)

vim /etc/named.conf
options {
        directory       "/var/named";
        listen-on       { any; };
        version         "[wowoohr-1.0]";
        forwarders      { 202.96.209.5;
                          114.114.114.114;
                        };
        recursion       yes;
        allow-query {0.0.0.0/0;};
};

logging{
channel default_log {
        file "/etc/log/dns-default.log" versions 10 size 1m;
        severity info;
};
channel lamer_log {
        file "/etc/log/dns-lamer.log" versions 3 size 1m;
        severity info;
        print-severity yes;
        print-time yes;
        print-category yes;
};
channel query_log {
        file "/etc/log/dns-query.log" versions 10 size 10m;
        severity info;
};
channel security_log {
        file "/etc/log/dns-security.log" versions 3 size 1m;
        severity info;
        print-severity yes;
        print-time yes;
        print-category yes;
};
category lame-servers { lamer_log; };
category security { security_log; };
category queries { query_log; };
category default { default_log; };
};

zone "." {
        type hint;
        file "/etc/named.root";
        };

zone "myshebao.com" {
        type master;
        file "/etc/master/test.com.zone ";
        allow-transfer { 10.61.100.52; };
        };

3.3、创建named.root配置文件(主从都要配置且配置一样,故从配置不在给出)

[[email protected] etc]# cat named.root
;       This file holds the information on root name servers needed to
;       initialize cache of Internet domain name servers
;
;       This file is made available by InterNIC
;       under anonymous FTP as
;           file                /domain/named.root
;           on server           FTP.INTERNIC.NET
;       -OR-                    RS.INTERNIC.NET
;
;       last update:    Jan 29, 2004
;       related version of root zone:   2004012900
;
;
; formerly NS.INTERNIC.NET
;
.                        3600000  IN  NS    A.ROOT-SERVERS.NET.
A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
;
; formerly NS1.ISI.EDU
;
.                        3600000      NS    B.ROOT-SERVERS.NET.
B.ROOT-SERVERS.NET.      3600000      A     192.228.79.201
;
; formerly C.PSI.NET
;
.                        3600000      NS    C.ROOT-SERVERS.NET.
C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12
;
; formerly TERP.UMD.EDU
;
.                        3600000      NS    D.ROOT-SERVERS.NET.
D.ROOT-SERVERS.NET.      3600000      A     128.8.10.90
;
; formerly NS.NASA.GOV
;
.                        3600000      NS    E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10
;
; formerly NS.ISC.ORG
;
.                        3600000      NS    F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241
;
; formerly NS.NIC.DDN.MIL
;
.                        3600000      NS    G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4
.                        3600000      NS    E.ROOT-SERVERS.NET.
E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10
;
; formerly NS.ISC.ORG
;
.                        3600000      NS    F.ROOT-SERVERS.NET.
F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241
;
; formerly NS.NIC.DDN.MIL
;
.                        3600000      NS    G.ROOT-SERVERS.NET.
G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4
;
; formerly AOS.ARL.ARMY.MIL
;
.                        3600000      NS    H.ROOT-SERVERS.NET.
H.ROOT-SERVERS.NET.      3600000      A     128.63.2.53
;
; formerly NIC.NORDU.NET
;
.                        3600000      NS    I.ROOT-SERVERS.NET.
I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17
;
; operated by VeriSign, Inc.
;
.                        3600000      NS    J.ROOT-SERVERS.NET.
J.ROOT-SERVERS.NET.      3600000      A     192.58.128.30
;
; operated by RIPE NCC
;
.                        3600000      NS    K.ROOT-SERVERS.NET.
K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129
;
; operated by ICANN
;
.                        3600000      NS    L.ROOT-SERVERS.NET.
L.ROOT-SERVERS.NET.      3600000      A     198.32.64.12
;
; operated by WIDE
;
.                        3600000      NS    M.ROOT-SERVERS.NET.
M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33
; End of File

3.4、根据配置文件创建相关目录(主配置)

[[email protected] etc]# cd /var/named/chroot/etc/
[[email protected] etc]# mkdir log master
[[email protected] etc]# chown named:named log/ -R

3.5、创建zone区域文件(主配置)

[[email protected] etc]# vim master/test.com.zone 

$TTL 1D
@       IN SOA  ns1.test.com. yull.test.com. (
                                        2017071104      ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum

                IN      NS      ns1.test.com.
                IN      NS      ns2.test.com.

ns1             IN      A       10.61.100.51
ns2             IN      A       10.61.100.52

redis           IN      A       10.61.100.51
db              IN      A       10.61.100.53

3.6、启动named服务(主配置)

# service named start

3.7、从服务器named.conf配置。注意从服务器也需要named.root文件

[[email protected] ~]# cat /etc/named.conf 
options {
        directory       "/var/named";
        listen-on       { any; };
        version         "[wowoohr-1.0]";
        forwarders      { 202.96.209.5;
                          114.114.114.114;
                        };
        recursion       yes;
        allow-query {0.0.0.0/0;};
};

logging{
channel default_log {
        file "/etc/log/dns-default.log" versions 10 size 1m;
        severity info;
};
channel lamer_log {
        file "/etc/log/dns-lamer.log" versions 3 size 1m;
        severity info;
        print-severity yes;
        print-time yes;
        print-category yes;
};
channel query_log {
        file "/etc/log/dns-query.log" versions 10 size 10m;
        severity info;
};
channel security_log {
        file "/etc/log/dns-security.log" versions 3 size 1m;
        severity info;
        print-severity yes;
        print-time yes;
        print-category yes;
};
category lame-servers { lamer_log; };
category security { security_log; };
category queries { query_log; };
category default { default_log; };
};

zone "." {
        type hint;
        file "/etc/named.root";
        };

zone "myshebao.com" {
        type slave;
        file "/etc/slave/test.com.zone";
        masters {
                10.61.100.51;
        };
        allow-transfer { none; };
        };

3.8、创建相关目录文件(从)

[[email protected] etc]# cd /var/named/chroot/etc/
[[email protected] etc]# mkdir log slave
[[email protected] etc]# chown named:named log/ -R

3.9、启动named服务(从)

# service named start

如成功配置,则会在从的/var/named/chroot/etc/slave下同步test.com.zone配置文件。

四、Keepalived高可用配置

4.1、安装Keepalived(主从)

# yum -y install keepalived

4.2、修改配置文件

设计思路:
当 Master 与 Slave 均运作正常时, Master负责服务,Slave负责Standby;
当 Master 挂掉,Slave 正常时, Slave接管服务;
当 Master 恢复正常,恢复Master身份
然后依次循环。需要注意的是修改数据只能在Master修改。

[[email protected] etc]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
   notification_email {
    [email protected]
   }
   notification_email_from [email protected]
   smtp_server 192.168.200.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}

vrrp_script chk_dns {
    script "/etc/keepalived/scripts/dns_check.sh"
    interval 2
}

vrrp_instance V_DNS {
    state MASTER
    interface eth0
    virtual_router_id 153 
    priority 100         #从服务器修改为80
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    track_script {
        chk_dns
    }

    virtual_ipaddress {
        10.61.100.50
    }
    notify_master /etc/keepalived/scripts/dns_master.sh
    notify_backup /etc/keepalived/scripts/dns_backup.sh
    notify_fault  /etc/keepalived/scripts/dns_fault.sh
    notify_stop   /etc/keepalived/scripts/dns_stop.sh
}

上述中的脚本因为Keepalived在转换状态时会依照状态来呼叫:

通过dns_check.sh来检测服务可用性

当进入Master状态时会呼叫notify_master

当进入Backup状态时会呼叫notify_backup

当发现异常情况时进入Fault状态呼叫notify_fault

当Keepalived程序终止时则呼叫notify_stop

4.3、编辑相关脚本(主从)

# vim /etc/keepalived/scripts/dns_check.sh

#!/bin/bash
ALIVE=`netstat -ntpl |grep "53"`
if [ $? == 0 ];then
  exit 0
else
  exit 1
fi
# vim /etc/keepalived/scripts/dns_master.sh

LOGFILE="/var/log/keepalived-dns-state.log"
echo "[master]" >> $LOGFILE
date >> $LOGFILE
echo "Being master...." >> $LOGFILE 2>&1
echo "Run reload cmd ..." >> $LOGFILE
service named reload >> $LOGFILE  2>&1
# vim /etc/keepalived/scripts/dns_backup.sh

LOGFILE="/var/log/keepalived-dns-state.log"
echo "[backup]" >> $LOGFILE
date >> $LOGFILE
service named reload >> $LOGFILE  2>&1
echo "Being slave...." >> $LOGFILE 2>&1
# vim /etc/keepalived/scripts/dns_fault.sh

#!/bin/bash
LOGFILE=/var/log/keepalived-dns-state.log
echo "[fault]" >> $LOGFILE
date >> $LOGFILE
# vim /etc/keepalived/scripts/dns_stop.sh

#!/bin/bash
LOGFILE=/var/log/keepalived-dns-state.log
echo "[stop]" >> $LOGFILE
date >> $LOGFILE

4.4、给脚本都加上可执行权限:

# sudo chmod +x /etc/keepalived/scripts/*.sh

4.5、启动Keepalived服务

# service keepalived start

五、验证

[[email protected] etc]# netstat -ntpl |grep 53
tcp        0      0 10.61.100.50:53             0.0.0.0:*                   LISTEN      12314/named         
tcp        0      0 10.61.100.51:53             0.0.0.0:*                   LISTEN      12314/named         
tcp        0      0 127.0.0.1:53                0.0.0.0:*                   LISTEN      12314/named         
tcp        0      0 127.0.0.1:953               0.0.0.0:*                   LISTEN      12314/named         
tcp        0      0 ::1:953                     :::*                        LISTEN      12314/named
[[email protected] ~]# vim /etc/keepalived/scripts/dns_stop.sh
[[email protected] ~]# netstat -ntpl |grep 53
tcp        0      0 10.61.100.52:53             0.0.0.0:*                   LISTEN      8220/named          
tcp        0      0 127.0.0.1:53                0.0.0.0:*                   LISTEN      8220/named          
tcp        0      0 127.0.0.1:953               0.0.0.0:*                   LISTEN      8220/named          
tcp        0      0 ::1:953                     :::*                        LISTEN      8220/named

可以看到VIP已经绑定在Master上,同时可以模拟Master挂掉。VIP会自动漂移到Slave上,带Master恢复后,会再次回到Master上,保证服务可用性。

时间: 2024-12-23 04:47:45

Centos下高可用主从同步DNS服务部署的相关文章

linux下mysql数据库主从同步配置

说明: 操作系统:CentOS 5.x 64位 MySQL数据库版本:mysql-5.5.35 MySQL主服务器:192.168.21.128 MySQL从服务器:192.168.21.129 准备篇: 说明:在两台MySQL服务器192.168.21.128和192.168.21.129上分别进行如下操作 备注: 作为主从服务器的MySQL版本建议使用同一版本! 或者必须保证主服务器的MySQL版本要高于从服务器的MySQL版本! 一.配置好IP.DNS .网关,确保使用远程连接工具能够连接

CentOS linux 高可用集群之heartbeat

CentOS linux 高可用集群之heartbeat Heartbeat 项目是 Linux-HA 工程的一个组成部分,它实现了一个高可用集群系统.心跳服务和集群通信是高可用集群的两个关键组件,在 Heartbeat 项目里,由 heartbeat 模块实现了这两个功能. Heartbeat是Linux-HA工程的一个组件,自1999年开始到现在,发布了众多版本,是目前开源Linux-HA项目最成功的一个例子,在行业内得到了广泛的应用. 随着Linux在关键行业应用的逐渐增多,它必将提供一些

Keepalived 高可用ipvs和nginx服务

Keepalived 高可用ipvs和nginx服务 ============================================================================ 概述: ============================================================================ 回顾: Virtual Server(虚拟服务器):  1.配置参数: ★虚拟服务器的配置格式: virtual_server I

Linux下Mongodb数据库主从同步配置

说明: 有两台已经安装完成的Mongodb数据库服务器,现在需要把一台设置为主库,另一台设置为从库,实现主从同步. 操作系统:CentOS 7.0 64位 MongoDB数据库版本:mongodb-linux-x86_64-2.6.5 准备工作:MongoDB数据库安装 具体操作: 一.配置MongoDB主库 以下操作在MongoDB主库服务器上进行 1.cd  /usr/local/mongodb/ #进入MongoDB安装目录 vi /usr/local/mongodb/mongodb.co

[记录]CentOS搭建SVN服务器(主从同步)

CentOS搭建SVN服务器(主从同步)1.安装步骤如下: 1)安装: #yum install subversion 2)查看安装位置: #rpm -ql subversion 3)查看版本: #/usr/bin/svnversion --version2.创建svn版本库目录 #mkdir -p /var/svn/svnrepos3.创建版本库 #svnadmin create /var/svn/svnrepos4.进入/var/svn/svnrepos/conf目录 1)authz文件是权

Haproxy+keepalived高可用、负载均衡安装部署方案

1     环境说明 前端两台haproxy+keepalived互为主从,提供高可用:另外基于不同域名访问不同的虚拟ip实现负载均衡 1.1     环境描述 服务器A(主.从):eth0:10.241.51.245   eth1:192.168.1.9 服务器B(从.主):eth2:10.241.51.246   eth1:192.168.1.10 服务器C(web01):eth0:10.241.51.247 服务器D(web02):eth0:10.241.51.248 VIP1:10.24

HAProxy高可用负载均衡集群部署

HAProxy高可用负载均衡集群部署 基本信息: 系统平台:VMware WorkStation 系统版本: CentOS Linux release 7.2.1511 (Core) 内核版本: 3.10.0-327.el7.x86_64 集群架构: 前端:HAProxy 1.虚拟FQDN:www.simpletime.net 2.VIP:192.168.39.1:DIP:172.16.39.50 3.调度服务器:Varnish1.Varnish2 4.调度算法:URL_Hash_Consist

趁一切还来得及【五】数据库MySQL主从同步的实践部署

自笑栖迟淮海客,十年心事一灯前.                                           --[元]萨都拉 第二章 数据库MySQL主从同步部署操作实践 2.1 数据同步相关应用基础 ①MySQL主从同步架构是目前使用最多的数据库架构之一,尤其是负载比较大的网站,因此对于主从同步的部署管理也就显得非常重要. ②MySQL主从同步的作用:(1) 数据分布,(2) 负载平衡(load balancing),(3) 备份,(4) 高可用性(high availability

搭建高可用主从DNS域名解析服务

前言:DNS(domain name system):用于将域名解析成IP地址,进行访问.在我们日常生活中访问百度.腾讯等网站时,由DNS给我们解析并转交到正确的IP地址上进行访问. 它的解析过程为:查看本机缓存→HOSTS文件→DNS 1:当用户在浏览器中输入域名并按下回车键后,第1步,浏览器会检查缓存中有没有这个域名对应的    解析过的IP地址,如果缓存中有,这个解析过程就将结束.2:如果用户的浏览器缓存中没有,浏览器会查找操作系统缓存中是否有这个域名对应的DNS解析结果.其实操作系统也会