dhcp容災方案(主備)所遇到的問題以及解決方案

今天折騰了dhcp主從服務器

從官方http://www.isc.org/software/dhcp下載了dhcp-4.2.3-P2.tar.gz

然後開了兩臺虛擬機,分別編譯安裝

shell命令用紅色註明,其他爲系統輸出

1、編譯安裝

 

tar -xvzf dhcp-4.2.3-P2.tar.gz -C /usr/local/src      
cd /usr/local/src/dhcp-4.2.3-P2     
./configure --prefix=/usr/local/dhcp4
make && make install

2、設置配置文件dhcpd.conf

主服務器dhcpd.conf的配置如下,該Server eth0接口ip爲192.168.0.2

cp /usr/local/dhcp4/etc/dhcpd.conf /etc/
vim /etc/dhcpd.conf 
cat /etc/dhcpd.conf
default-lease-time 200;
max-lease-time 400;
log-facility local7;


failover peer "my" {
        primary;
        address 192.168.153.2;
        port 647;

        peer address 192.168.153.3;
        peer port 647;
        max-response-delay 30;
        max-unacked-updates 10;
        load balance max seconds 3;
        mclt 1800;
        split 129;
}


subnet 192.168.153.0 netmask 255.255.255.0 {
  pool {
    failover peer "my";
    range 192.168.153.4 192.168.153.254;
  }
}



由該配置也可以看出來從服務器ip爲192.168.0.3。

從服務器配置如下:

[root@localhost ~]#cat /etc/dhcpd.conf 
default-lease-time 200;
max-lease-time 400;
log-facility local7;


failover peer "my" {
        secondary;
        address 192.168.153.3;
        port 647;
        peer address 192.168.153.2;
        peer port 647;
        max-response-delay 30;
        max-unacked-updates 10;
        load balance max seconds 3;
}
subnet 192.168.153.0 netmask 255.255.255.0 {
  pool {
    failover peer "my";
    range 192.168.153.4 192.168.153.254;
  }
}

可以看出,不同點在從服務器沒有 mclt 和 split 字段屬性。爲主服務器特有,然後是主服務器有primary聲明,從有相應的secondary,其他基本一致。


至此配置結束

 

3、啓動Master和Slave Server並測試客戶端平滑切換

由於我們編譯安裝在/usr/local/dhcp4/

而默認啓動dhcp的時候是從根下etc讀取dhcpd.conf文件

所以纔有之前cp  /usr/local/dhcp4/etc/dhcpd.conf  /etc/ 這裏步驟

當然你不想這麼多也是可以的,只不過每次啓動的時候要指定配置文件所在

[root@localhost ~]#/usr/local/dhcp4/sbin/dhcpd -cf /usr/local/dhcp4/etc/dhcpd.conf 

每次啓動的時就不會去/etc找配置文件啦。

然後是編譯安裝有個問題,這樣啓動還是會報錯如下:

[root@localhost ~]#/usr/local/dhcp4/sbin/dhcpd 
Internet Systems Consortium DHCP Server 4.2.3-P2
Copyright 2004-2012 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Can't open lease database /var/db/dhcpd.leases: No such file or directory --
  check for failed database rewrite attempt!
Please read the dhcpd.leases manual page if you
don't know what to do about this.

 

它說找不到/var/db/dhcpd.leases文件,這個是dhcp的租約文件
那我們手動touch即可
[root@localhost ~]# touch /var/db/dhcpd.leases
[root@localhost ~]# /usr/local/dhcp4/sbin/dhcpd
Internet Systems Consortium DHCP Server 4.2.3-P2
Copyright 2004-2012 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/
Wrote 0 leases to leases file.
Listening on LPF/eth0/00:0c:29:42:c5:f8/192.168.153.0/24
Sending on   LPF/eth0/00:0c:29:42:c5:f8/192.168.153.0/24
Sending on   Socket/fallback/fallback-net
failover peer my: I move from recover to startup
[root@localhost ~]#netstat -anp | grep dhc
tcp        0      0 192.168.153.3:647           0.0.0.0:*                   LISTEN      3425/dhcpd          
tcp        0      0 192.168.153.3:647           192.168.153.2:58360         ESTABLISHED 3425/dhcpd          
udp        0      0 0.0.0.0:11905               0.0.0.0:*                               3425/dhcpd          
udp        0      0 0.0.0.0:67                  0.0.0.0:*                               3425/dhcpd          
udp        0      0 :::50794                    :::*                                    3425/dhcpd          
raw        0      0 0.0.0.0:1                   0.0.0.0:*                   7           3425/dhcpd          
unix  2      [ ]         DGRAM                    11298  3425/dhcpd          
[root@localhost ~]# 
可以看到這樣dhcp就啓動了包括67號端口和647(主從通信端口,自定義的)


啓動正常後,從服務器也同樣按這樣來,然後是打開一個客戶端,即另一臺linux虛擬機測試:

可以看到客戶端接收到服務端的DHCPREQUEST包

並且客戶端發出請求192.168.153.101地址的數據包

但是沒有收到服務端的offer(DHCPOFFERS)

4、解決碰到的問題

然後我一直在配置文件中找錯...兩個小時過去了

我先監控日誌文件/var/log/messages

然後再運行dhclient


[root@localhost ~]#tail -f /var/log/messages
Mar  4 00:12:23 localhost dhcpd: Failover CONNECT to my rejected:Connection rejected, time mismatch too great.
發現很多這樣的錯誤
大致意思就是錯誤的連接,時間不匹配太大
於是想到時區時間問題就把所有主從服務器包括客戶端的時間全部統一了
然後重啓服務就搞定了

5、留下來的疑問

這個時間不匹配究竟是誰和誰呢?我表示很疑惑

於是先把主從的時間 統一了

主:

[root@localhost ~]#date
Sun Mar  4 00:24:21 CST 2012
[root@localhost ~]#cp /usr/share/zoneinfo/Asia/Chongqing /etc/localtime
cp: overwrite `/etc/localtime'? y
[root@localhost ~]#date
Sun Mar  4 00:24:41 CST 2012
[root@localhost ~]# 
從:

[root@localhost ~]#date
Sat Mar  4 00:24:31 CST 2012
[root@localhost ~]#cp /usr/share/zoneinfo/Asia/Chongqing /etc/localtime
cp: overwrite `/etc/localtime'? y
[root@localhost ~]#date
Sat Mar  4 00:24:43 CST 2012

重啓主從dhcp服務
...
還是老樣子...和上面一樣的錯誤
strong>於是初步下定結論,時間不同步是服務器和客戶端之間的時間不同步
然後修改客戶端時區,選一個與服務器不同時區的地區
服務器是 亞洲/重慶
那麼客戶端我就選日本吧


再次運行dhclient還是如此
Mar  4 00:32:50 localhost dhcpd: Failover CONNECT to my rejected: Connection rejected, time mismatch too great.

然後修改爲客戶端時區爲重慶,運行dhclient,發現依然是這個問題?很邪門

重啓兩臺DHCP Server,然後再次運行dhclient
Mar  5 00:02:16 localhost dhcpd: DHCPDISCOVER from 00:0c:29:5e:f5:d7 via eth0: not responding (recover wait)
 
strong>現在就推翻了之前的理論了,客戶端時區已經和服務端一致
 
這就詭異了。。。最後我


echo "" > /var/db/dhcpd.leases
killall dhcpd
. .bash_profile

重啓了dhcpd服務,然後再次使用客戶端獲取IP就沒問題了

原來是租約文件影響了結果

那麼之前的結論就無效了

 

實驗環境已經破壞

本人也不想去整個時區錯誤了。

 

總之時區、租約文件都會影響到客戶端獲取IP。

折騰久了別忘了清掉dhcpd.leases文件即可。
重啓了dhcpd服務重啓了dhcpd服務

 

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