Centos에서 사용 가능한 주종 동기화 DNS 서비스 배치

배경 소개
일상적인 업무에서 네트워크 도메인 이름 해석 문제를 해결하기 위해 시간은 DNS 서비스를 설정하여 해석을 제공한다.이때 DNS 서비스는 모든 내부 서비스에 연결을 제공하는 기초를 닦았고 매우 중요하게 변했다.따라서 서비스가 시작된 후에도 서비스의 높은 가용성과 데이터의 완전성을 고려해야 한다.
네티즌들은 LVS+Keepalived+Bind의 부하 균형이 높고 사용 가능한 해결 방안이 많은데 매우 좋다.그러나 자체 DNS는 회사 내부 플랫폼 간의 호출에 많이 사용되기 때문에 부하 균형의 의미는 그리 크지 않다.물론 고가용성은 보증해야 한다.Keepalived+Bind를 통한 고가용 주종 동기화 DNS 서비스 소개
2. 기초 환경
Master DNS:10.61.100.51
Slave DNS:10.61.100.52
VIP:10.61.100.50
3. bind 설정
3.1 설치 bind(주종)
# yum install bind bind-chroot    

설치가 완료되면 다음 파일이 생성됩니다
[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 프로필 (주종은 모두 설정해야 하며, 설정은 아래에서 제시해야 한다)
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 프로필 (주종은 모두 설정하고 설정이 같기 때문에 설정에서 제공하지 않음)
[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 프로필에 따라 관련 디렉터리 만들기(주 프로필)
[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 영역 파일 만들기(주 구성)
[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 서비스 시작(주 설정)
# service named start

3.7 서버named.conf 구성서버에서도named가 필요합니다.루트 파일
[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 관련 디렉토리 파일 생성(부터)
[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 서비스 시작(부터)
# service named start

성공적으로 설정하면/var/named/chroot/etc/slave에서 테스트를 동기화합니다.com.zone 구성 파일
4. Keepalived 고가용 구성
4.1 Keepalived 설치(주종)
# yum -y install keepalived

4.2 프로필 수정
디자인 사고방식: 마스터와 슬레이브가 모두 정상적으로 작동할 때 마스터는 서비스를 책임지고 슬레이브는 Standby를 책임진다.마스터가 끊기고 슬레이브가 정상일 때 슬레이브가 서비스를 인수한다.마스터가 정상으로 돌아오면 마스터의 신분을 회복하고 순서대로 순환한다.주의해야 할 것은 수정 데이터는 마스터에서만 수정할 수 있다는 것이다.
[root@ip-10-61-100-51 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로 서비스 가용성 검사
마스터 상태가 되면 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

5. 검증
[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
[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가 마스터에 연결되어 있는 것을 볼 수 있으며 마스터 끊기를 시뮬레이션할 수 있습니다.VIP는 자동으로 슬레이브에 떠내려가 마스터를 가지고 회복되면 다시 마스터로 돌아와 서비스 가용성을 보증합니다.

좋은 웹페이지 즐겨찾기