Keepalived配置和測試過程for linux

ywxj_001發表於2016-06-29

Keepalived配置和測試過程for linux

安裝環境:

兩臺serverSystem x3650 M3

Node1:硬碟:130G   CPU2E5620  @ 2.40GHz     記憶體:4G

Node2:硬碟:130G   CPU2E5620  @ 2.40GHz     記憶體:8G

1、  安裝redhat 6.4系統

U盤安裝rhel-server-6.4-x86_64-dvd.iso

分割槽:

/boot        200M

/boot/efi     200M

Swap        4096M

/            13000M

只安裝Basic版本,不要安裝桌面

需要在language裡面選擇chinese

安裝系統完成後設定網路卡eth0


2、  設定keepalived

Node1


! Configuration File for keepalived

global_defs {

   router_id 234567       #router_id,配置一個網路唯一的ID

}

vrrp_instance VI_3 {        #為keeplived例項號,一般一臺伺服器只有1個例項,不用更改

    state BACKUP         #為keepalived初始狀態,此處需要設定成BACKUP

    nopreempt           #配置為非搶佔模式,在node1切到node2,vip從node1飄到node2後,node1恢復後,服務不會再切回node1,而是繼續讓node2做MASTER,服務在node2上面繼續跑

    interface eth0          #為啟用keepalived的介面,根據實際情況設定

    virtual_router_id 40    #為keepalived虛擬ID,同一叢集必須相同

    priority 100          #服務優先順序,MASTER設定為100,BACKUP設定為90

    advert_int 1          #心跳區間設定為1秒

    authentication {

        auth_type PASS

        auth_pass 10101010       #設定驗證密碼,同一叢集必須相同

    }

    virtual_ipaddress {

        172.16.0.120 dev eth0 label eth0:0   #設定服務IP,dev label可省略

    }

    notify_master "/etc/keepalived/notify.sh master"    #切換成master,執行一次指令碼

    notify_backup "/etc/keepalived/notify.sh backup"    #切換成backup,執行一次指令碼

    notify_fault "/etc/keepalived/notify.sh fault"        #切換成fault,執行一次指令碼

}

Node2


! Configuration File for keepalived

global_defs {

   router_id 123456

}

vrrp_instance VI_3 {

    state BACKUP

    nopreempt

    interface eth0

    virtual_router_id 40

    priority 90

    advert_int 1

    authentication {

        auth_type PASS

        auth_pass 10101010

    }

    virtual_ipaddress {

        172.16.0.120 dev eth0 label eth0:0

    }

    notify_master "/etc/keepalived/notify.sh master"

    notify_backup "/etc/keepalived/notify.sh backup"

    notify_fault "/etc/keepalived/notify.sh fault"

}

3、  設定notify. sh

Node1:


#!/bin/bash

#

case $1 in

    master)

        service httpd restart      #此行為應用啟動指令碼,根據應用更改

    echo "master" >>/etc/keepalived/log

        ;;

    backup)

        service httpd stop        #此行為應用啟動指令碼,根據應用更改

        echo "backup" >>/etc/keepalived/log

        ;;

    fault)

        service httpd stop        #此行為應用啟動指令碼,根據應用更改

        echo "fault" >>/etc/keepalived/log

        ;;

esac
Node2:



#!/bin/bash

#

case $1 in

    master)

        service httpd restart

    echo "master" >>/etc/keepalived/log

        ;;

    backup)

        service httpd stop

        echo "backup" >>/etc/keepalived/log

        ;;

    fault)

        service httpd stop

        echo "fault" >>/etc/keepalived/log

        ;;

esac

4、  其他設定

關閉兩個系統的防火牆


設定keepalived服務開機啟動:chkconfig keepalived on

5、  進行keepalived服務切換試驗

初始狀態:

Node1


Node2



重啟Node1上的keepalived服務:Vipnode1漂移到了node2





VIP掉了一個包(advert_int 1          #心跳區間設定為1秒)間隔是1

Node1上的httpd服務停止,Node1變成backup


Node2上的httpd服務啟動,Node2變成master

 

重啟Node2上的keepalived服務:

Vipnode2漂移到了node1



在重啟keepalived的時候,每個節點的VIP會進行漂移,在VIP漂移到某個節點的時候,這個節點的httpd服務也相應會起來。而沒有VIP節點的httpd服務會關閉。

比如:

Node1IP172.16.0.121

Node2IP172.16.0.122

VIP172.16.0.120

Httpd的服務在哪個節點,那麼就可以透過那個節點的IPVIP共同訪問Apache的測試網頁。


6、  用插拔網線來測試服務漂移情況

拔出Node1上的網線:


服務漂到Node2


插上Node1上的網線:






Node2VIP沒有漂回到Node1,因為在Node1上設定了非搶佔模式

拔出Node2的網線



VIP漂到了Node1


插上Node2的網線




VIP仍然在node1上,沒有漂到node2

測試OK

表示keepalived的非搶佔模式成功

如果遇到非搶佔模式不成功的話,因為這兩臺伺服器都是透過交換機連線的,可以把連線交換機的埠設定為快速轉發即可

int eth 1/0/1
stp disable
stp edged-port enable

因為可能是網路埠的延遲導致了非搶佔不生效,比如說拔下node1的網線再插上,可能系統認為網路埠已經起來了,但是因為stp的存在,導致兩臺伺服器網路之間的互信有延遲,node1可能認為node2是非存活狀態,就把自己當做master拉起來了,等兩端網路互信完成,就沒有透過非搶佔,而是直接比較優先順序,node1優先順序高,繼續維持master狀態。

所以這裡加快了網路埠的轉發速度,使網路埠在第一時間實現互通,node1第一時間認為node2是存活的,就應用了非搶佔模式,node1變成了backupnode2還是做master


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22996654/viewspace-2121215/,如需轉載,請註明出處,否則將追究法律責任。

相關文章