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

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介:

一、背景介绍

    在日常工作中,为解决内网域名解析问题,时长会配置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(主从)

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

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

1
2
3
4
5
6
7
8
9
10
[root@ip-10-61-100-51 ~] # 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
[root@ip-10-61-100-51 ~] # 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配置文件(主从都要配置,从配置在下面给出)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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配置文件(主从都要配置且配置一样,故从配置不在给出)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
[root@ip-10-61-100-51 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、根据配置文件创建相关目录(主配置)

1
2
3
[root@ip-10-61-100-51 etc] # cd /var/named/chroot/etc/
[root@ip-10-61-100-51 etc] # mkdir log master
[root@ip-10-61-100-51 etc] # chown named:named log/ -R

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[root@ip-10-61-100-51 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服务(主配置)

1
# service named start

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
[root@ip-10-61-100-52 ~] # 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、创建相关目录文件(从)

1
2
3
[root@ip-10-61-100-52 etc] # cd /var/named/chroot/etc/
[root@ip-10-61-100-52 etc] # mkdir log slave
[root@ip-10-61-100-52 etc] # chown named:named log/ -R

3.9、启动named服务(从)

1
# service named start

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


四、Keepalived高可用配置

4.1、安装Keepalived(主从)

1
# yum -y install keepalived

4.2、修改配置文件

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
[root@ip-10-61-100-51 etc] # cat /etc/keepalived/keepalived.conf 
! Configuration File  for  keepalived
 
global_defs {
    notification_email {
     yu.liang.liang@wowoohr.com
    }
    notification_email_from Alexandre.Cassen@firewall.loc
    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、编辑相关脚本(主从)

1
2
3
4
5
6
7
8
9
# vim /etc/keepalived/scripts/dns_check.sh
 
#!/bin/bash
ALIVE=` netstat  -ntpl | grep  "53" `
if  [ $? == 0 ]; then
   exit  0
else
   exit  1
fi
1
2
3
4
5
6
7
8
# 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
1
2
3
4
5
6
7
# 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
1
2
3
4
5
6
# vim /etc/keepalived/scripts/dns_fault.sh
 
#!/bin/bash
LOGFILE= /var/log/keepalived-dns-state .log
echo  "[fault]"  >> $LOGFILE
date  >> $LOGFILE
1
2
3
4
5
6
# vim /etc/keepalived/scripts/dns_stop.sh
 
#!/bin/bash
LOGFILE= /var/log/keepalived-dns-state .log
echo  "[stop]"  >> $LOGFILE
date  >> $LOGFILE

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

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

4.5、启动Keepalived服务

1
# service keepalived start

五、验证

1
2
3
4
5
6
[root@ip-10-61-100-51 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
1
2
3
4
5
6
[root@ip-10-61-100-52 ~] # vim /etc/keepalived/scripts/dns_stop.sh
[root@ip-10-61-100-52 ~] # 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上,保证服务可用性。

本文转自  亮公子  51CTO博客,原文链接:http://blog.51cto.com/iyull/1946451

相关文章
|
1月前
|
运维 监控 NoSQL
【MongoDB 复制集秘籍】Secondary 同步慢怎么办?深度解析与实战指南,让你的数据库飞速同步!
【8月更文挑战第24天】本文通过一个具体案例探讨了MongoDB复制集中Secondary成员同步缓慢的问题。现象表现为数据延迟增加,影响业务运行。经分析,可能的原因包括硬件资源不足、网络状况不佳、复制日志错误等。解决策略涵盖优化硬件(如增加内存、升级CPU)、调整网络配置以减少延迟以及优化MongoDB配置(例如调整`oplogSize`、启用压缩)。通过这些方法可有效提升同步效率,保证系统的稳定性和性能。
43 4
|
25天前
|
存储 Linux Docker
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
关于如何在CentOS 7.6上安装Docker、介绍Docker存储引擎以及服务进程关系的实战案例。
84 3
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
|
24天前
|
Linux
CentOS 7.x时间同步服务chrony配置详解
文章详细介绍了在CentOS 7.x系统中如何安装和配置chrony服务,以及它与ntpd服务的对比,强调了chrony在时间同步方面的高效性和准确性。
42 1
CentOS 7.x时间同步服务chrony配置详解
|
1月前
|
关系型数据库 MySQL Linux
Linux(CentOS7)搭建LAMP服务环境
本文介绍了在Linux (CentOS 7) 上搭建LAMP服务环境的详细步骤,包括安装Apache HTTPd、解决编译时依赖问题、配置Apache服务、安装PHP以及处理PHP与Apache集成时遇到的问题。同时,还涉及了防火墙设置和SELinux权限调整,确保Web服务能够正常运行。
50 2
|
27天前
|
C# 开发者 Windows
全面指南:WPF无障碍设计从入门到精通——让每一个用户都能无障碍地享受你的应用,从自动化属性到焦点导航的最佳实践
【8月更文挑战第31天】为了确保Windows Presentation Foundation (WPF) 应用程序对所有用户都具备无障碍性,开发者需关注无障碍设计原则。这不仅是法律要求,更是社会责任,旨在让技术更人性化,惠及包括视障、听障及行动受限等用户群体。
47 0
|
27天前
|
UED 存储 数据管理
深度解析 Uno Platform 离线状态处理技巧:从网络检测到本地存储同步,全方位提升跨平台应用在无网环境下的用户体验与数据管理策略
【8月更文挑战第31天】处理离线状态下的用户体验是现代应用开发的关键。本文通过在线笔记应用案例,介绍如何使用 Uno Platform 优雅地应对离线状态。首先,利用 `NetworkInformation` 类检测网络状态;其次,使用 SQLite 实现离线存储;然后,在网络恢复时同步数据;最后,通过 UI 反馈提升用户体验。
44 0
|
1月前
|
网络协议 Linux
Linux——Centos8.2如何重启网卡服务
Linux——Centos8.2如何重启网卡服务
57 0
|
28天前
|
监控 网络协议 Java
Tomcat源码解析】整体架构组成及核心组件
Tomcat,原名Catalina,是一款优雅轻盈的Web服务器,自4.x版本起扩展了JSP、EL等功能,超越了单纯的Servlet容器范畴。Servlet是Sun公司为Java编程Web应用制定的规范,Tomcat作为Servlet容器,负责构建Request与Response对象,并执行业务逻辑。
Tomcat源码解析】整体架构组成及核心组件
|
1月前
|
存储 NoSQL Redis
redis 6源码解析之 object
redis 6源码解析之 object
55 6
|
13天前
|
存储 缓存 Java
什么是线程池?从底层源码入手,深度解析线程池的工作原理
本文从底层源码入手,深度解析ThreadPoolExecutor底层源码,包括其核心字段、内部类和重要方法,另外对Executors工具类下的四种自带线程池源码进行解释。 阅读本文后,可以对线程池的工作原理、七大参数、生命周期、拒绝策略等内容拥有更深入的认识。
什么是线程池?从底层源码入手,深度解析线程池的工作原理

相关产品

  • 云解析DNS