Keepalived高可用叢集應用實踐
一,Keepalived高可用軟體
1,Keepalived介紹
1.1 Keepalived軟體起初是專門為LVS負載均衡軟體設計的,用來管理並監控LVS集群系統中各個服務節點的狀態,後來又加入了可以實現高可用的VRRP功能。
1.2 Keepalived軟體主要是通過VRRP協議實現高可用功能的。
2,Keepalived服務三個重要功能
2.1 管理LVS負載均衡軟體
2.2 實現對LVS叢集節點健康檢查功能(healthcheck)
2.3 作為系統網路服務的高可用功能(failover)
3,Keepalived高可用故障切換原理
3.1 Keepalived高可用服務之間的故障切換轉移,是通過VRRP(Virtual Router Redundancy Protocol,虛擬路由器冗餘協議)來實現的。
3.2 在Keepalived服務正常工作時,主Master節點會不斷地向備節點發送(多播的方式)心跳訊息,用以告訴備Backup節點自己還活著,當主Master節點發生故障時,就無法傳送心跳訊息,備節點也就因此無法繼續檢測到來自主Master節點的心跳了,於是呼叫自身的接管程式,接管主Master節點的IP資源及服務。而當主Master節點恢復時,備Backup節點又會釋放主節點故障時自身接管的IP資源及服務,恢復到原來的備用角色。
bond0是網絡卡繫結高可用
二,Keepalived高可用服務搭建準備
2.1 環境準備
HOSTNAME |
IP |
說明 |
lb01 |
192.168.200.138 |
Keepalived主伺服器(Nginx主負載均衡器) |
lb02 |
192.168.200.130 |
Keepalived備伺服器(Nginx備負載均衡器) |
web01 |
192.168.200.136 |
web01伺服器 |
web02 |
192.168.200.137 |
web02伺服器 |
2.2 安裝Keepalived軟體
[[email protected] ~]# yum -y install keepalived
[[email protected] ~]# rpm -qa keepalived
keepalived-1.2.7-3.el6.x86_64
注:上述安裝過程需要在lb01和lb02兩臺伺服器上同時安裝。
2.3 啟動Keepalived服務並檢查
[[email protected] ~]# /etc/init.d/keepalived start
Starting keepalived: [ OK ]
[[email protected] ~]# ps -ef | grep keep | grep -v grep
root 7111 1 0 11:18 ? 00:00:00 /usr/sbin/keepalived -D
root 7114 7111 0 11:18 ? 00:00:00 /usr/sbin/keepalived -D
root 7117 7111 0 11:18 ? 00:00:00 /usr/sbin/keepalived -D
注:啟動後有3個Keepalived程序表示安裝正確
[[email protected] ~]# ip add | grep 192.168
inet 192.168.0.221/24 brd 192.168.0.255 scope global eth0
inet 192.168.200.16/32 scope global eth0
inet 192.168.200.17/32 scope global eth0
inet 192.168.200.18/32 scope global eth0
注:預設情況會啟動三個VIP地址
[[email protected] ~]# /etc/init.d/keepalived stop
Stopping keepalived: [ OK ]
注:測試完畢後關閉服務,上述測試需要同時在lb01和lb02兩臺伺服器上進行
2.4 Keepalived配置檔案說明
2.4.1 全域性定義(Global Definitions)部分
[[email protected] ~]# head -13 /etc/keepalived/keepalived.conf | cat -n
1 ! Configuration File for keepalived
2
3 global_defs {
4 notification_email {
8 }
9 notification_email_from [email protected]
10 smtp_server 192.168.200.1
11 smtp_connect_timeout 30
12 router_id LVS_DEVEL
13 }
基礎引數說明:
第1行是註釋,!開頭和#號開發一樣,都是註釋。
第2行是空行。
第3~8行是定義服務故障報警的Email地址。作用是當服務發生切換或RS節點等有故障時,發報警郵件。這幾行是可選配置,notification_email指定在Keepalived發生事件時,需要傳送的Email地址,可以有多個,每行一個。
第9行是指定傳送郵件的傳送人,即發件人地址,也是可選的配置。
第10行smtp_server指定傳送郵件的smtp伺服器,如果本機開啟了sendmail或postfix,就可以使用上面預設配置實現郵件傳送,也是可選配置。
第11行smtp_connect_timeout是連線smtp的超時時間,也是可選配置。
注意:
第4~11行所有和郵件報警相關的引數均可以不配,在實際工作中會將監控的任務交給更加擅長監控報警的Nagios或Zabbix軟體。
第12行是Keepalived伺服器的路由標識(router_id).在一個區域網內,這個標識(router_id)應該是唯一的。
2.4.2 VRRP例項定義區塊(VRRP instance(s))部分
[[email protected] ~]# sed -n '15,30{=;p}' /etc/keepalived/keepalived.conf | xargs -L2
15 vrrp_instance VI_1 {
16 state MASTER
17 interface eth0
18 virtual_router_id 51
19 priority 100
20 advert_int 1
21 authentication {
22 auth_type PASS
23 auth_pass 1111
24 }
25 virtual_ipaddress {
26 192.168.200.16
27 192.168.200.17
28 192.168.200.18
29 }
30 }
引數說明:
第15行表示定義一個vrrp_instance例項,名字是VI_1,每個vrrp_instance例項可以認為是Keepalived服務的一個例項或者作為一個業務服務,在Keepalived服務配置中,這樣的vrrp_instance例項可以有多個。注意,存在於主節點中的vrrp_instance例項在備節點中也要存在,這樣才能實現故障切換接管。
第16行state MASTER表示當前例項VI_1的角色狀態,當前角色為MASTER,這個狀態只能有MASTER和BACKUP兩種狀態,並且需要大寫這些字元。其中MASTER為正式工作的狀態,BACKUP為備用的狀態。當MASTER所在的伺服器故障或失效時,BACKUP所在的伺服器會接管故障的MASTER繼續提供服務。
第17行interface為網路通訊介面。為對外提供服務的網路介面,如eth0,eth1。當前主流的伺服器都有2~4個網路介面,在選擇服務介面時,要搞清楚了。
第18行virtual_router_id為虛擬路由ID標識,這個標識最好是一個數字,並且要在一個keepalived.conf配置中是唯一的。但是MASTER和BACKUP配置中相同例項的virtual_router_id又必須是一致的,否則將出現腦裂問題。
第19行priority為優先順序,其後面的數值也是一個數字,數字越大,表示例項優先順序越高。在同一個vrrp_instance例項裡,MASTER的優先順序配置要高於BACKUP的。若MASTER的priority值為150,那麼BACKUP的priority必須小於150,一般建議間隔50以上為佳,例如:設定BACKUP的priority為100或更小的數值。
第20行advert_int為同步通知間隔。MASTER與BACKUP之間通訊檢查的時間間隔,單位為秒,預設為1.
第21~24行authentication為許可權認證配置。包含認證型別(auth_type)和認證密碼(auth_pass)。認證型別有PASS(Simple Passwd(suggested)),AH(IPSEC(not recommended))兩種,官方推薦使用的型別為PASS。驗證密碼為明文方式,最好長度不要超過8個字元,建議用4位數字,同一vrrp例項的MASTER與BACKUP使用相同的密碼才能正常通訊。
第25 ~ 29 行virtual_ipaddress為虛擬IP地址。可以配置多個IP地址,每個地址佔一行,配置時最好明確指定子網掩碼以及虛擬IP繫結的網路介面。否則,子網掩碼預設是32位,繫結的介面和前面的interface引數配置的一致。注意,這裡的虛擬IP就是在工作中需要和域名繫結的IP,即和配置的高可用服務監聽的IP要保持一致!