一 、keepalived簡介算法
keepalived:它的誕生最初是爲ipvs(一些服務,內核中的一些規則)提供高可用性的,最初最主要目的是可以自主調用ipvsadm來生成規則,而且可以自動實現將用戶訪問的地址轉移到其餘節點上進行實現的。 keepalived:核心包含兩個ckechers和VRRP協議。
ckeckers #檢查服務檢查reserved的健康情況的,基於腳本也能夠服務自己的健康情況。這裏是實現ipvs後端健康情況的檢測的。 VRRP # Virtual Router Redundancy Protocol 虛擬路由器冗餘協議 -----keepalived依賴的最重要的核心技術
2、VRRP協議詳解後端
(一)VRRP技術優勢安全
VRRP是一種容錯協議,它保證當主機的下一跳路由器出現故障時,由另外一臺路由器來代替出現故障的路由器進行工做,從而保持網絡通訊的連續性和可靠性, VRRP中每一個節點之間都有優先級的通常爲0-255 (0,255有特殊用法)數字越大優先級越高。 一、簡化網絡管理。 #在具備多播或廣播能力的局域網(如以太網)中,藉助VRRP 能在某臺設備出現故障時仍然提供高可靠的缺省鏈路,有效避免單一鏈路發生故障後網絡中斷的問題,而無需修改動態路由協議、路由發現協議等配置信息,也無需修改主機的默認網關配置。 二、適應性強。 #VRRP 報文封裝在IP 報文中,支持各類上層協議。 三、網絡開銷小。 #VRRP 只定義了一種報文——VRRP 通告報文,而且只有處於 Master 狀態的路由器能夠發送VRRP 報文。
(二)VRRP協議中的相關術語bash
1 虛擬路由器 #由一個 Master 路由器和多個Backup 路由器組成。主機將虛擬 路由器看成默認網關。 2 VRID #虛擬路由器的標識。有相同VRID 的一組路由器構成一個虛擬路由器。 3 Master 路由器 #虛擬路由器中承擔報文轉發任務的路由器。 4 Backup 路由器 #Master 路由器出現故障時,可以代替Master 路由器工做的路由器。 5 虛擬 IP 地址 #虛擬路由器的IP 地址。一個虛擬路由器能夠擁有一個或多個IP 地址。 6 IP 地址擁有者 #接口IP 地址與虛擬IP 地址相同的路由器被稱爲IP 地址擁有者。 7 虛擬 MAC 地址 #一個虛擬路由器擁有一個虛擬MAC 地址。虛擬MAC 地址的格式爲00-00-5E-00-01-{VRID}。一般狀況下,虛擬路由器迴應ARP 請求使用的是虛擬MAC 地址,只有虛擬路由器作特殊配置的時候,纔回應接口的真實MAC 地址。 8 優先級 # VRRP 根據優先級來肯定虛擬路由器中每臺路由器的地位。 9 非搶佔方式 #若是 Backup 路由器工做在非搶佔方式下,則只要Master 路由器沒有出現故障,Backup 路由器即便隨後被配置了更高的優先級也不會成爲Master 路由器。 10 搶佔方式 #若是Backup 路由器工做在搶佔方式下,當它收到VRRP 報文後,會將本身的優先級與通告報文中的優先級進行比較。若是本身的優先級比當前的Master 路由器的優先級高,就會主動搶佔成爲Master 路由器;不然,將保持Backup 狀態。
(三)VRRP的工做過程服務器
1 Master 路由器的選舉; 2 Master 路由器狀態的通告; 3 同時,爲了提升安全性,VRRP 還提供了認證功能;
(四) VRRP主備備份 網絡
主備備份方式表示業務僅由Master路由器承擔。當Master路由器出現故障時,纔會 由選舉出來的Backup路由器接替它工做,如圖
#初始狀況下,Device A是Master路由器並承擔轉發任務,Device B和Device C是Backup路由器且都處於就緒監聽狀態。若是Device A發生故障,則虛擬路由器內處於Backup狀態的Device B和Device C路由器將根據優先級選出一個新的Master路由器,這個新Master路由器繼續爲網絡內的主機轉發數據。
(五)VRRP負載分擔 ide
在路由器的一個接口上能夠建立多個虛擬路由器,使得該路由器能夠在一個虛擬路 由器中做爲Master路由器,同時在其餘的虛擬路由器中做爲Backup路由器。 負載分擔方式是指多臺路由器同時承擔業務,所以負載分擔方式須要兩個或者兩個 以上的虛擬路由器,每一個虛擬路由器都包括一個Master路由器和若干個Backup路 由器,各虛擬路由器的Master路由器能夠各不相同,
3、keepalived 原理詳解模塊化
#keepalived也是模塊化設計,不一樣模塊負責不一樣的功能,下面是keepalived的組件 core check vrrp libipfwc libipvs-2.4 libipvs-2.6
core #是keepalived的核心,負責主進程的啓動和維護,全局配置文件的加載解析 check #負責healthchecker(健康檢查),包括各類健康檢查方式,以及對應的配置的解析包括LVS的配置解析 vrrp #VRRPD子進程,VRRPD子進程就是來實現VRRP協議的 libipfwc #iptables(ipchains)庫,配置LVS會用到 libipvs* #配置LVS會用到
keepalived模塊化結構oop
keepalived 啓動後會啓動三個進程 以下所示: PID 111 Keepalived <--Parent process monitoring children 父進程 112 \_Keepalived <--VRRP child VRRP子進程 113 \_Keepalived <--Healthchecking child healthchecker子進程
如上圖所示: #兩個子進程都被系統WatchDog看管,兩個子進程各自複雜本身的事healthchecker子進程複雜檢查各自服務器的健康程度,例如HTTP,LVS等等,若是healthchecker子進程檢查到MASTER上服務不可用了,就會通知本機上的兄弟VRRP子進程,讓他刪除通告,而且去掉虛擬IP,轉換爲BACKUP狀態。
四 、keepalived 配置文件介紹ui
keepalived 安裝 #yum -y install keepalived
keepalived 只有一個配置文件,該配置文件中有多個配置區域 /etc/keepalived/keepalived.conf #分別爲:global_defs (全局配置區域)、vrrp_script (腳本區域)、vrrp_instance(實例區域)、virtual_server(虛擬服務器區域)
各個區域配置詳解
1 global_defs區域 :主要配置故障發生時的通知對象以及機器標識 global_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL }
上述參數解析 # notifacation_email 故障發生時給誰發郵件通知 # notifacation_email_from 通知郵件從哪一個地址發出 # smpt_server 通知郵件的smtp地址 # smtp_cnnect_timeout 鏈接smtp服務器的超時時間 # router_id 標識本節點的字條串,一般爲hostname,但不必定非得是hostname。故障發生時,郵件通知會用到
2 vrrp_script 腳本區域 vrrp_script chk_haproxy { script "killall -0 haproxy" interval 1 weight 2 }
上述參數解析 #vrrp_script 定義vrrp_script 區域名稱 #script 所要執行的腳本 #interval 腳本執行的間隔時間 #weight 腳本執行結果致使的優先級變動
3 vrrp_instance 實例區域:用來定義對外提供服務的VIP區域及相關屬性 vrrp_instance VI_1 { interface eth0 state MASTER priority 101 virtual_router_id 51 garp_master_delay 1 authentication { auth_type PASS auth_pass 1111 } track_interface { eth0 } virtual_ipaddress { 172.16.100.1/16 dev eth0 label eth0:0 } track_script { chk_haproxy } notify_master "/etc/keepalived/notify.sh master" notify_backup "/etc/keepalived/notify.sh backup" notify_fault "/etc/keepalived/notify.sh fault" }
:
上述參數解析 #vrrp_instance : 定義實例名稱 #state :能夠是MASTER或BACKUP,不過當其餘節點keepalived啓動時,會依據prioroty進行比較來選舉MASTER #interface : 節點固有IP的網卡,用來發送VRRP包 #virtual_router_id : 取值在0-255之間,用來區分多個instence之間的VRRP組播 #priority : 用來選舉master #advert_int : master向外通告VRRP信息的間隔 ,默認爲1s #garp_master_delay :轉換爲master時,對延遲設定的定時器 #authentication :設置認證信息 #auth_type PASS :認證方式,能夠是PASS或AH兩種認證方式 #auth_pass :設置認證密碼 #track_interface :追蹤的端口 #virtual_ipaddress :設置浮動ip---VIP #track_script :對vrrp_script腳本區域中定義的腳本進行追蹤 #chk_haproxy :對這個區域進行追蹤 #notify_master /path/to/to_master.sh :切換到MASTER狀態要發的通知 #notify_backup/path/to/to_backup.sh :切換到BACKUP狀態要發的通知 #notify_fault "/path/fault.sh VG_1" :故障時要執行的通知 注:以上三個參數指定的腳本須要本身定義
4 virtual_server 區域:定義與lvs相關的集羣服務和集羣服務中的realserver virtual_server 172.16.7.1 80 { delay_loop 6 lb_algo wlc lb_kind DR persistence_timeout 0 protocol TCP sorry_server 127.0.0.1 80 real_server 172.16.7.200 80 { weight 3 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 172.16.7.201 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
上述參數解析 virtual_server 172.16.7.1 80 #對外經過ip地址172.16.7.1 提供80端口的服務 delay_loop #延遲輪詢時間(s) lb_algo #後端指定的調度算法 lb_kind #調度模式 nat_mask #網絡地址 persistence_timeout #會話保持時間(s),用戶在50s內被分配到同一個後端realserver protocol TCP #健康檢查使用的TCP協議 sorry_server #當全部機器都出現故障時使用的服務器 real_server <IPADDR> <PORT> #後端真實節點主機的權重等設置,(主要),後端有幾臺這裏就要設置幾個 weight #每一臺realserver 的權重 TCP_CHECK #健康狀態檢測方式 connect_port #鏈接的端口 connect_timeout #超時時長 nb_get_retry #重試次數 delay_before_retry #下次重試的時間延遲 在realserver也能夠自定義服務器狀態發生變化後執行的腳本 notify_up <STRING> | <QUOTED-STRING> 檢查服務器正常(up)後,要執行的腳本 notify_down <STRING> | <QUOTED-STRING> 檢查服務器失敗(down)後,要執行的腳本
PS:水平有限,關於更多的參數詳解及概念請參閱官網www.keepalived.org及 man keepalived.conf 得到。