DNS主從複製實現

介紹

DNS(Domain name server),是將IP地址轉換爲域名地址。當在互聯網訪問外部服務器時,其主機都是以IP地址及端口標識(被稱之爲一個套接字文件),當主機A需要與主機B通信時,A必須知道其B的IP地址,但IP地址不能方便人們的記憶,故使用其計算機名進行標識。早期的互聯網通信下,服務器的計算機名與其IP地址對應關係,被記錄在了hosts文件中,這也正是早期的域名解析模型。但隨着互聯網的服務器增加,單依靠hosts的記錄所有的計算機名映射,會導致查詢速度非常慢、計算機名的變更更新速度慢。其DNS可以解決由hosts文件來解釋域名映射的諸多問題。

DNS服務端查詢原理

正向解析: hostname —> IP

1.在瀏覽器中輸入www.qq.com域名,操作系統會先檢查自己本地的hosts文件是否有這個網址映射關係,如果有,就先調用這個IP地址映射,完成域名解析。
2. 如果hosts裏沒有這個域名的映射,則查找本地DNS解析器緩存,是否有這個網址映射關係,如果有,直接返回,完成域名解析。
3. 如果hosts與本地DNS解析器緩存都沒有相應的網址映射關係,首先會找TCP/ip參數中設置的首選DNS服務器,在此我們叫它本地DNS服務器,此服務器收到查詢時,如果要查詢的域名,包含在本地配置區域資源中,則返回解析結果給客戶機,完成域名解析,此解析具有權威性。
4. 如果要查詢的域名,不由本地DNS服務器區域解析,但該服務器已緩存了此網址映射關係,則調用這個IP地址映射,完成域名解析,此解析不具有權威性。
5. 如果本地DNS服務器本地區域文件與緩存解析都失效,則根據本地DNS服務器的設置(是否設置轉發器)進行查詢,如果未用轉發模式,本地DNS就把請求發至13臺根DNS,根DNS服務器收到請求後會判斷這個域名(.com)是誰來授權管理,並會返回一個負責該頂級域名服務器的一個IP。本地DNS服務器收到IP信息後,將會聯繫負責.com域的這臺服務器。這臺負責.com域的服務器收到請求後,如果自己無法解析,它就會找一個管理.com域的下一級DNS服務器地址(qq.com)給本地DNS服務器。當本地DNS服務器收到這個地址後,就會找qq.com域服務器,重複上面的動作,進行查詢,直至找到www.qq.com主機。
6. 如果用的是轉發模式,此DNS服務器就會把請求轉發至上一級DNS服務器,由上一級服務器進行解析,上一級服務器如果不能解析,或找根DNS或把轉請求轉至上上級,以此循環。不管是本地DNS服務器用是是轉發,還是根提示,最後都是把結果返回給本地DNS服務器,由此DNS服務器再返回給客戶機。

主從複製實現

DNS服務:
ansible-manager 10.177.96.4 主DNS服務
ansible-client1 10.177.96.14 從DNS服務

10.177.96.4 主DNS服務 上安裝配置

1、安裝DNS服務

[root@ansible-manager ~]# yum -y install bind bind-utils

2、修改配置文件 named.conf ,註釋掉如下兩行

[root@ansible-manager ~]# vim /etc/named.conf
options {
//    listen-on port 53 { 127.0.0.1; };
...
//    allow-query     { localhost; };
      allow-transfer  {10.177.96.14;};   #只允許數據傳輸到從DNS 10.177.96.14,爲了DNS數據安全,很重要!
}

3、編輯zone文件 /etc/named.rfc1912.zones,新增域 xulx.com的內容

[root@ansible-manager named]# vim  /etc/named.rfc1912.zones
zone "xulx.com" IN {
    type master;   #建立xulx.com區域的主服務,數據庫由此主機來管理
    file "xulx.com.zone";
};
....

4、編輯建立域 xulx.com的 數據庫文件 xulx.com.zone

[root@ansible-manager ~]# cd /var/named/
[root@ansible-manager named]# cp -a named.localhost  xulx.com.zone
[root@ansible-manager named]# ll
total 20
drwxrwx--- 2 named named   22 Apr 25 16:29 data
drwxrwx--- 2 named named   58 Apr 27 15:37 dynamic
-rw-r----- 1 root  named 2253 Apr  5  2018 named.ca
-rw-r----- 1 root  named  152 Dec 15  2009 named.empty
-rw-r----- 1 root  named  152 Jun 21  2007 named.localhost
-rw-r----- 1 root  named  168 Dec 15  2009 named.loopback
drwxrwx--- 2 named named    6 Aug  8  2019 slaves
-rw-r----- 1 root  named  152 Jun 21  2007 xulx.com.zone

[root@ansible-manager named]# cat /var/named/xulx.com.zone
$TTL 1D     
@    IN SOA   xulx.com. admin.xulx.com. (    
                    0    ; serial      
                    1D    ; refresh   
                    1H    ; retry     
                    1W    ; expire     
                    3H )    ; minimum  
       NS  master
master A  10.177.96.4
www  CNAME  test  
slave  A  10.177.96.14
test  A  10.177.96.51
@    A   10.177.96.4

5、檢查語法

#檢查named.conf的語法
[root@ansible-manager named]# named-checkconf
[root@ansible-manager named]# 
#檢查zone文件的語法
[root@ansible-manager named]# named-checkzone  xulx.com /var/named/xulx.com.zone
zone xulx.com/IN: loaded serial 0
OK

6、啓動服務

[root@ansible-manager named]# systemctl  restart named

7、簡單測試

[root@ansible-manager named]# host xulx.com 10.177.96.4
Using domain server:
Name: 10.177.96.4
Address: 10.177.96.4#53
Aliases:

xulx.com has address 10.177.96.4

10.177.96.14 從DNS服務 安裝配置

1、安裝DNS服務

[root@ansible-client1~]# yum -y install bind bind-utils

2、修改配置文件 named.conf ,註釋掉如下兩行

[root@ansible-client1 ~]# vim /etc/named.conf
options {
//    listen-on port 53 { 127.0.0.1; };
...
//    allow-query     { localhost; };
      allow-transfer  {none;};   #從DNS數據傳輸,不允許任何主機訪問查看,從DNS服務 只需要同步主DNS數據,也不需要將數據同步到其他主機
}

3、編輯zone文件 /etc/named.rfc1912.zones,新增域 xulx.com 的從域

[root@ansible-client1 ~]# vim /etc/named.rfc1912.zones
zone "xulx.com" IN{
  type slave;
  masters {10.177.96.4;};
  file "slaves/xulx.com.zone.slave";
};
...

4、檢測配置文件語法是否正確

[root@ansible-client1 ~]# named-checkconf
[root@ansible-client1 ~]#

5、啓動服務

[root@ansible-client1 ~]# systemctl  start named
[root@ansible-client1 ~]#

6、此時查看 xulx.com配置的數據庫文件 slaves/xulx.com.zone.slave ,發現已經進行了數據同步,查看的話,會發現被加密了

[root@ansible-client1 ~]# cat /var/named/slaves/xulx.com.zone.slave
^§͜NQ
xulxcom.xulxcomadminxulxcomQ    :*01Q
xulxcommasterxulxcom$Q
xulxcom
±`+Qmasterxulxcom
±`*Qslavexulxcom
±`)Qtestxulxcom
±`33Qwwwxulxcomtestxulxcom

7、查看從DNS的解析 是否生效

[root@ansible-client1 ~]# host xulx.com 10.177.96.14
Using domain server:
Name: 10.177.96.14
Address: 10.177.96.14#53
Aliases:

xulx.com has address 10.177.96.4

至此,基本的主從DNS服務,已經實現

而主從DNS 數據庫同步有兩種方式 : 推和拉

推 :主服務器數據庫一旦發生變化,立即推送到從服務器上

Note: 如果想要實現推的動作,需要注意如下兩點:

1、將所有從服務的記錄加上去,表明這是域名服務器,同步時 需要同步

2、每次修改數據庫後,需要手動修改版本號

示例

[root@ansible-manager ~]# vim  /var/named/xulx.com.zone
$TTL 1D     
@    IN SOA   xulx.com. admin.xulx.com. (    
                    1    ; serial   #2、修改版本號    
                    1D    ; refresh   
                    1H    ; retry     
                    1W    ; expire     
                    3H )    ; minimum  
       NS  master
       NS  slave   #1、增加從DNS服務
master A  10.177.96.4
www  CNAME  test  
slave  A  10.177.96.14
@    A   10.177.96.4

#重新加載主DNS服務
[root@ansible-manager ~]# rndc reload
server reload successful
-------------------------------
#從DNS數據庫文件已經發生變化
[root@ansible-client1 slaves]# ll
total 4
-rw-r--r-- 1 named named 364 Apr 28 14:27 xulx.com.zone.slave
[root@ansible-client1 slaves]# ll
total 4
-rw-r--r-- 1 named named 341 Apr 28 15:06 xulx.com.zone.slave

拉: 則通過refresh 定義拉取的時間間隔,如下,默認是一天拉取一次

[root@ansible-manager ~]# cat /var/named/xulx.com.zone
$TTL 1D     
@    IN SOA   xulx.com. admin.xulx.com. (    
                    0    ; serial      
                    1D    ; refresh    #拉取同步時間 一天一次
                    1H    ; retry     
                    1W    ; expire     
                    3H )    ; minimum  
       NS  master
master A  10.177.96.4

Note

智能DNS實現 :文章路徑

Mariadb 編譯安裝:文章路徑

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章