VRRP協議及Keepalived原理使用

1.VRRP
       VRRP,Virtual Router Redundancy Protocol,虛擬路由器冗餘協議。VRRP由IETF提出,目的是爲了解決局域網中配置默認網關的單點失效問題,1998年已推出正式的RFC2338協議標準。VRRP廣泛應用在邊緣網絡中,它的設計目標是支持特定情況下IP數據流量失敗轉移不會引起混亂,允許主機使用單路由器,以及及時在實際第一跳路由器使用失敗的情形下仍能夠維護路由器間的連通性。
       VRRP將局域網的一組路由器(包括一個Master即活動路由器和若干個Backup即備份路由器)組織成一個虛擬路由器,稱之爲一個備份組。這個虛擬的路由器擁有自己的IP地址10.100.10.1(這個IP地址可以和備份組內的某個路由器的接口地址相同,相同的則稱爲ip擁有者),備份組內的路由器也有自己的IP 地址(如Master的IP地址爲10.100.10.2,Backup 的IP地址爲10.100.10.3)。局域網內的主機僅僅知道這個虛擬路由器的IP地址10.100.10.1,而並不知道具體的Master路由器的IP地址10.100.10.2以及Backup路由器的IP地址10.100.10.3。它們將自己的缺省路由下一跳地址設置爲該虛擬路由器的IP地址10.100.10.1。於是,網絡內的主機就通過這個虛擬的路由器來與其它網絡進行通信。如果備份組內的Master路由器壞掉,Backup路由器將會通過選舉策略選出一個新的Master路由器,繼續向網絡內的主機提供路由服務,從而實現網絡內的主機不間斷地與外部網絡進行通信。
       VRRP說白了就是實現IP地址漂移的,是一種容錯協議。在下圖中,Router A、Router B和Router C組成一個虛擬路由器。各虛擬路由器都有自己的IP地址。局域網內的主機將虛擬路由器設置爲缺省網關。Router A、Router B和Router C中優先級最高的路由器作爲Master路由器,承擔網關的功能。其餘兩臺路由器作爲Backup路由器。當master路由器出故障後,backup路由器會根據優先級重新選舉出新的master路由器承擔網關功能。Master路由器週期性地發送VRRP報文,在虛擬路由器中公佈其配置信息(優先級等)和工作狀況。Backup路由器通過接收到VRRP報文的情況來判斷Master路由器是否工作工常。

備註:
配置VRRP時,需要路由器支持VRRP功能。同時VRRP管理的機器,要在同一個二層網絡下,或同一個VLAN下。

VRRP學習資料參考於:

2.keepalived
(1)keepalived簡介
keepalived使用的是VRRP協議方式。簡單的說就是,Keepalived的目的是模擬路由器的高可用,Heartbeat或Corosync的目的是實現Service的高可用。
keepalived是模塊化設計,不同模塊負責不同的功能,下面是keepalived的組件 :
A)core
是keepalived的核心,負責主進程的啓動和維護,全局配置文件的加載解析等 。
B)check
負責healthchecker(健康檢查),包括了各種健康檢查方式,以及對應的配置的解析包括LVS的配置解析 。
C)vrrp
VRRPD子進程,VRRPD子進程就是來實現VRRP協議的 。
D)libipfwc
iptables(ipchains)庫,配置LVS會用到 。
F)libipvs*
配置LVS會用到 。
備註:keepalived和LVS完全是兩碼事,只不過他們各負其責相互配合而已。

(2)keepalived安裝和配置
編譯keepalived時,如果不加參數可以編譯,那麼將只包含VRRP相關的功能,用來搭建HA集羣,實現IP漂移。當加上--with-kernel-dir=可以將IPVS相關的特性編譯進去,用於配置LVS。直白地說,我們將LVS相關的配置(例如realserver、調度算法、工作模式等)寫入到keepalived配置中,由keepalived幫配置LVS,其他這部分配置工作和使用ipvsadm是差不多的。

keepalived的配置主要有全局配置段和VRRP配置段兩部分,如果需要配置lvs,還需要有lvs相關的配置:

##全局配置段
包括郵件報警、SMTP服務器的配置等等,例如:
global_defs  { 
    notification_email { 
        [email protected] 
    } 
    notification_email_from [email protected] 
    smtp_server 127.0.0.1 
    stmp_connect_timeout 30 
    lvs_id my_hostname 
} 

##VRRP配置
VRRP配置時keepalived核心,就是IP漂移相關的配置。舉例如下:
vrrp_instance VI_1 { 
    state BACKUP  #爲BACKUP節點
    interface eth0 
    virtual_router_id 51 
    priority 100 
    nopreempt 
    advert_int 1 
    authentication { 
        auth_type PASS 
        auth_pass 123456 
    } 
    virtual_ipaddress { 
        192.168.1.199/24  #VIP爲192.168.1.199
    } 
}
備註:如上是一個VRRP的配置,該實例是BACKUP節點,還需要再另外臺機器上配置MASTER節點,這樣才能達到IP漂移的效果。

##LVS配置(備註:如果我們是需要IP漂移的HA集羣,LVS相關的配置可以沒有哦)
LVS配置只在要使用keepalived來配置和管理LVS時使用,如果僅僅使用keepalived做HA的話就可以完全不用配置LVS。keepalived關於LVS的配置如下:
virtual_server 192.168.1.199 80 {  #LVS的VIP
    delay_loop 6 
    lb_algo rr 
    lb_kind NAT 
    nat_mask 255.255.255.0 
    persistence_timeout 10 
    protocol TCP 

    real_server 192.168.1.13 80 {   #RealServer的機器
        weight 1 
        TCP_CHECK {  #健康檢查
            connect_timeout 3 
            nb_get_retry 3 
            delay_before_retry 3 
            connect_port 80 
        } 
    } 

    real_server 192.168.1.14 80 {   #RealServer的機器
        weight 1 
        TCP_CHECK {    #健康檢查
            connect_timeout 3 
            nb_get_retry 3 
            delay_before_retry 3 
            connect_port 80 
        } 
    } 
} 

(3)lvs、keepalived即ipvsadm三者的關係
lvs , 在功能層面,已經被集成進了當前流行的Linux kernel ,  隨時可用。
keepalived和ipvsadm都是lvs的管理工具,功能層面作用相同,二選一即可。keepalived是第三方的,支持lvs node本身的HA以及real server故障檢測等功能,而ipvsadm是lvs作者原創的, 只支持lvs自身的功能管理。
通常情況下,我們安裝了lvs的內核模塊後,需要再安裝ipvsadm工具來配置LVS。而使用keepalived時,可以將lvs的配置寫入keepalived的配置文件keepalived.conf中,然後由keepalived加載即可,不需要再使用ipvsadm來配置了。
keepalived和lvs結合使用,keepalived可以完成兩項工作,一是對Real Server中的機器進行健康檢查,如果有問題,從服務器池中剔除;二是在LoadBalance間進行容災切換。
keepalived編譯的時候,可以將lvs的管理接口編譯到keepalived中,這樣keepalived就可以和LVS模塊交互,就不只有IP漂移功能了。 

(4)一些keepalived的閒雜知識
(A)keepalived的容災切換原理
keepalived中優先級高的節點爲MASTER。MASTER其中一個職責就是響應VIP的ARP包,將VIP和MAC地址映射關係告訴局域網內其他主機,同時,它還會以多播的形式向局域網中發送VRRP通告,告知自己的優先級。網絡中的所有BACKUP節點只負責處理MASTER發出的多播包,當發現MASTER的優先級沒自己高,或者沒收到MASTER的VRRP通告時,BACKUP將自己切換到MASTER狀態,然後做MASTER該做的事(1.響應ARP包;2.發送VRRP通告)。
備註:響應ARP包,告訴本機的MAC地址,也意味着告訴發送方,本機纔是虛擬IP的擁有者。這個IP漂移的關鍵哦。
(B)keepalived啓動進程的說明
keepalived啓動後會有三個進程,如下:
父進程:內存管理,子進程管理等
子進程:VRRP子進程
子進程:healthchecker子進程
(C)在HA架構中,如果出現兩個節點同時認爲自已是唯一處於活動狀態的服務器從而出現爭用資源的情況,這種爭用資源的場景即是所謂的"腦裂"(split-brain)或"partitioned cluster"。在兩個節點共享同一個物理設備資源的情況下,腦裂會產生相當可怕的後果。
(D)keepalived/heartbeat/HAProxy的比較
keepalived主要是控制IP的漂移,其配置、應用簡單,而heartbeat則不但可以控制IP漂移,更擅長對資源服務的控制,其配置、應用比較複雜。
一般Keepalived是實現前端高可用,常用的前端高可用的組合有,就是我們常見的LVS+Keepalived、Nginx+Keepalived、HAproxy+Keepalived。而Heartbeat或Corosync是實現服務的高可用,常見的組合有Heartbeat v3(Corosync)+Pacemaker+NFS+Httpd實現Web服務器的高可用,Heartbeat v3(Corosync)+Pacemaker+NFS+MySQL實現MySQL服務器的高可用。


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