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下。node
VRRP學習資料參考於:
http://zhaoyuqiang.blog.51cto.com/6328846/1166840
http://hugnew.com/?p=745算法
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服務器的配置等等,例如:
[plain] view plain copyide
global_defs { notification_email { admin@example.com } notification_email_from admin@example.com smtp_server 127.0.0.1 stmp_connect_timeout 30 lvs_id my_hostname }
##VRRP配置
VRRP配置時keepalived核心,就是IP漂移相關的配置。舉例以下:
[plain] view plain copy模塊化
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的配置以下:
[plain] view plain copyoop
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服務器的高可用。