轉自:http://essun.blog.51cto.com/721033/1405642
------本文大綱
簡介
keepalived原理
keepalived配置文件註解
---------------------------------
一、簡介
Keepalived:它的誕生最初是爲ipvs(一些服務,內核中的一些規則)提供高可用性的,最初最主要目的是能夠自主調用ipvsadm來生成規則,並且能夠自動實現將用戶訪問的地址轉移到其他節點上進行實現的。
Keepalived:核心包含兩個ckeckers和VRRP協議。
ckeckers
檢查服務檢查reserved的健康狀況的,基於腳本也可檢查服務本身的健康狀況。這裏是實現ipvs後端健康狀況的檢測的。
VRRP
是一種容錯協議,它保證當主機的下一跳路由器出現故障時,由另一臺路由器來代替出現故障的路由器進行工作,從而保持網絡通信的連續性和可靠性。VRRP中每個節點之間都有優先級的一般爲0-255(0,255有特殊用法)數字越大優先級越高。
相關術語解析
虛擬路由器
由一個Master路由器和多個Backup路由器組成。主機將虛擬路由器當作默認網關;
VRID
虛擬路由器的標識。有相同VRID的一組路由器構成一個虛擬路由器;
Master路由器
虛擬路由器中承擔報文轉發任務的路由器;
Backup路由器
Master路由器出現故障時,能夠代替Master路由器工作的路由器;
虛擬IP 地址
虛擬路由器的IP 地址。一個虛擬路由器可以擁有一個或多個IP地址;
IP地址擁有者
接口IP地址與虛擬IP地址相同的路由器被稱爲IP地址擁有者;
虛擬MAC地址
一個虛擬路由器擁有一個虛擬MAC地址。通常情況下,虛擬路由器迴應ARP請求使用的是虛擬MAC地址,只有虛擬路由器做特殊配置的時候,纔回應接口的真實MAC地址;
優先級
VRRP根據優先級來確定虛擬路由器中每臺路由器的地位;
非搶佔方式
如果Backup路由器工作在非搶佔方式下,則只要Master路由器沒有出現故障Backup路由器即使隨後被配置了更高的優先級也不會成爲Master路由器;
搶佔方式
如果Backup路由器工作在搶佔方式下,當它收到VRRP報文後,會將自己的優先級與通告報文中的優先級進行比較。如果自己的優先級比當前的Master路由器的優先級高,就會主動搶佔成爲Master路由器;否則,將保持Backup狀態.
二、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啓動後會有三個進程
父進程:內存管理,子進程管理等等
子進程:VRRP子進程
子進程:checkers子進程
兩 個子進程都被系統WatchDog看管,兩個子進程各自複雜自己的事,checkers子進程複雜檢查各自服務器的健康程度,例如HTTP,LVS等等, 如果checkers子進程檢查到MASTER上服務不可用,就會通知本機上的兄弟VRRP子進程,讓他刪除通告,並且去掉虛擬IP,轉換爲BACKUP 狀態
三、keepkeepalived配置文件介紹
安裝
1 | [root@essun yum.repos.d] # yum install -y keepalived |
只有一個配置文件/etc/keepalived/keepalived.conf,裏面主要包括以下幾個比較常用的配置區域,分別是global_defs、vrrp_script、vrrp_instance和virtual_server。
global_defs區域主要是配置故障發生時的通知對象以及機器標識
1 2 3 4 5 6 7 8 9 10 11 | global_defs { notification_email { } notification_email_from [email protected] smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL } |
notification_email
故障發生時給誰發郵件通知
notification_email_from
通知郵件從哪個地址發出
smpt_server
通知郵件的smtp地址
smtp_connect_timeout
連接smtp服務器的超時時間
router_id
標識本節點的字條串,通常爲hostname,但不一定非得是hostname。故障發生時,郵件通知會用到
vrrp_instance區域
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | vrrp_script switch { script "[[ -f /etc/keepalived/down ]] && exit 1 || exit 0" interval 1 weight 2 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } track_script { switch } virtual_ipaddress { 192.168.200.16 192.168.200.17 192.168.200.18 } notify_master /path/to/to_master .sh notify_backup /path_to/to_backup .sh notify_fault "/path/fault.sh VG_1" } |
vrrp_script
定義vrrp_script 區域名稱
script
所要執行的腳本
interval
腳本執行間隔時間
weight
腳本結果導致的優先級變更:2表示優先級+2;-2則表示優先級-2
vrrp_instance
用來定義對外提供服務的VIP區域及其相關屬性
state
可以是MASTER或BACKUP,不過當其他節點keepalived啓動時會將priority比較大的節點選舉爲MASTER,因此該項其實沒有實質用途
interface
節點固有IP(非VIP)的網卡,用來發VRRP包
virtual_router_id
取值在0-255之間,用來區分多個instance的VRRP組播。
注意: 同一網段中virtual_router_id的值不能重複,否則會出錯。
priority
用來選舉master的,要成爲master,那麼這個選項的值最好高於其他機器50個點,該項取值範圍是1-255(在此範圍之外會被識別成默認值100)
advert_int
檢查間隔,默認爲1秒
authentication
這裏設置認證
auth type
認證方式,可以是PASS或AH兩種認證方式
auth pass認證密碼
track_script
對vrrp_script定義的腳本進行追蹤
switch
對那一個區域進行追蹤
notify_master
/path/to/to_master
.sh
切換到主狀態要發的通知
notify_backup
/path_to/to_backup
.sh
切換到備狀態要執行的通知
notify_fault
"/path/fault.sh VG_1"
故障時要執行的通知(如果路徑中有空格,需要加雙引號引用)
注:
以上三個參數指的腳本要自定義
virtual_server區域
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | virtual_server 192.168.200.100 443 { delay_loop 6 lb_algo rr lb_kind NAT nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP real_server 192.168.201.100 443 { weight 1 SSL_GET { url { path / digest ff20ad2481f97b1754ef3e12ecd3a9cc } url { path /mrtg/ digest 9b3a0c85a887a256d6939da88aabd8cd } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } } |
virtual_server 192.168.200.100 443
對外通過ip地址192.168.200.100 提供443端口的服務
delay_loop
延遲輪詢時間(s)
lb_algo
後端指定的調度算法
lb_kind
調度模式
nat_mask
網絡地址
persistence_timeout
會話保持時間(秒爲單位),用戶在50秒內被分配到同一個後端realserver
protocol TCP
健康檢查用的是TCP還是UDP
real_server <IPADDR> <PORT>
後端真實節點主機的權重等設置,主要,後端有幾臺這裏就要設置幾個
weight
每一臺realserver的權重
SSL_GET
健康檢查方式
url
要堅持的URL,可以有多個
path
具體的路徑
digest
表示用genhash算出的結果
connect_timeout
超時時長
nb_get_retry
重試次數
delay_before_retry
下次重試的時間延遲
在realserver也可自定義服務器狀態發生變化後所執行的腳本
notify_up <STRING> | <QUOTED-STRING>
檢查服務器正常(UP)後,要執行的腳本
notify_down <STRING> | <QUOTED-STRING>
檢查服務器失敗(down)後,要執行的腳本
以上則常用到的參數,更多參數及用法請man keepalived.conf