-------------------LVS專題------------------------web
LVS原理詳解及部署之二:LVS原理詳解(3種工做方式8種調度算法)apache
LVS原理詳解及部署之五:LVS+keepalived實現負載均衡&高可用服務器
-------------------------------------------------網絡
以前已經講解LVS原理,而且介紹了若是手動部署LVS。但因爲咱們須要進行RS節點服務器的健康檢查,還有要作LVS的HA。此文就主要介紹keepalived的原理,而且介紹如何部署keepalived作做爲web服務器的HA。本文的目錄以下:負載均衡
1、keepalived原理介紹tcp
2、部署keepalived做爲web服務器的HA工具
3、腳本實現監控httpd服務
1、keepalived原理介紹
1)keepalived簡介
Keepalived的功能有點像是兩我的互相看着一個工做,若是一我的離開崗位另一我的就會接替,這個keepalived就是他們之間保持這樣「替換機制」的工具。keepalived是一個相似於layer3, 4 & 5交換機制的軟件,也就是咱們平時說的第3層、第4層和第5層交換。Keepalived的做用是檢測web服務器的狀態,若是有一臺web服務器死機,或工做出現故障,Keepalived將檢測到,並將有故障的web服務器從系統中剔除,當web服務器工做正常後Keepalived自動將web服務器加入到服務器羣中,這些工做所有自動完成,不須要人工干涉,須要人工作的只是修復故障的web服務器。
Keepalived服務主要有兩大用途:heartbeat(高可用)&failover(健康檢測)
Keepalived服務主要截圖vrrp來完成這些工做的,如下我就來介紹下VRRP協議是怎樣的工做的,那麼基本上keepalived的工做原理就是如此。
2)VRRP協議(VRRP Virtual Router Redundancy Protocol,虛擬路由冗餘協議)
VRRP協議過程簡述: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。[1]它們將本身的缺省路由下一跳地址設置爲該虛擬路由器的IP 地址10.100.10.1。因而,網絡內的主機就經過這個虛擬的路由器來與其它網絡進行通訊。若是備份組內的Master 路由器壞掉,Backup 路由器將會經過選舉策略選出一個新的Master 路由器,繼續向網絡內的主機提供路由服務。從而實現網絡內的主機不間斷地與外部網絡進行通訊。
VRRP原理:
一個VRRP路由器有惟一的標識:VRID,範圍爲0—255該路由器對外表現爲惟一的虛擬MAC地址,地址的格式爲00-00-5E-00-01-[VRID]主控路由器負責對ARP請求用該MAC地址作應答這樣,不管如何切換,保證給終端設備的是惟一一致的IP和MAC地址,減小了切換對終端設備的影響[3]
VRRP控制報文只有一種:VRRP通告(advertisement)它使用IP多播數據包進行封裝,組地址爲224.0.0.18,發佈範圍只限於同一局域網內這保證了VRID在不一樣網絡中能夠重複使用爲了減小網絡帶寬消耗只有主控路由器才能夠週期性的發送VRRP通告報文備份路由器在連續三個通告間隔內收不到VRRP或收到優先級爲0的通告後啓動新的一輪VRRP選舉[3]
在VRRP路由器組中,按優先級選舉主控路由器,VRRP協議中優先級範圍是0—255若VRRP路由器的IP地址和虛擬路由器的接口IP地址相同,則稱該虛擬路由器做VRRP組中的IP地址全部者;IP地址全部者自動具備最高優先級:255優先級0通常用在IP地址全部者主動放棄主控者角色時使用可配置的優先級範圍爲1—254優先級的配置原則能夠依據鏈路的速度和成本路由器性能和可靠性以及其它管理策略設定主控路由器的選舉中,高優先級的虛擬路由器獲勝,所以,若是在VRRP組中有IP地址全部者,則它老是做爲主控路由的角色出現對於相同優先級的候選路由器,按照IP地址大小順序選舉VRRP還提供了優先級搶佔策略,若是配置了該策略,高優先級的備份路由器便會剝奪當前低優先級的主控路由器而成爲新的主控路由器[3]
爲了保證VRRP協議的安全性,提供了兩種安全認證措施:明文認證和IP頭認證實文認證方式要求:在加入一個VRRP路由器組時,必須同時提供相同的VRID和明文密碼適合於避免在局域網內的配置錯誤,但不能防止經過網絡監聽方式得到密碼IP頭認證的方式提供了更高的安全性,可以防止報文重放和修改等攻擊。
2、部署keepalived做爲web服務器的HA
1)部署兩臺apache web服務器
yum install httpd -y
/etc/init.d/httpd start
2)分別安裝keepalived軟件
#下載安裝
wget http://www.keepalived.org/software/keepalived-1.2.8.tar.gz
tar -zxf keepalived-1.2.8.tar.gz
cd keepalived-1.2.8
ll
./configure --prefix=/usr/local/keepalived
make
make install
#配置keepalived的自啓動&拷貝keepalived的執行程序
cp /usr/local/keepalive/sbin/keepalived/ /usr/sbin/
cp cp /usr/local/keepalived/sbin/keepalived /usr/sbin//usr/local/keepalived/sbin/keepalived
cp /usr/local/keepalived/sbin/keepalived /usr/sbin/
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/
3)編輯主web和備web的keepalived配置文件
主web服務器的配置文件
[root@localhost keepalived-1.2.8]# cat /etc/keepalived.conf ! Configuration File for keepalived
global_defs { notification_email { #設置報警郵件地址,可多行每行一個。 752119102@qq.com } notification_email_from keepalived@localhost #設置郵件的發送地址 smtp_server 127.0.0.1 #設置SMTP server地址 smtp_connect_timeout 30 #設置SMTP 超時時間 router_id LVS_DEVEL #運行keepalived機器的一個標識 }
vrrp_instance VI_1 { #定義一個vrrp實例,不一樣實例的實例編號不同。 state MASTER #定義在keepalived的角色MASTER表示爲主服務器,BACKUP爲備服務器。 interface eth0 #指定HA檢測的網絡接口 virtual_router_id 51 #虛擬路由標示,同一個實例裏的路由標示相同,且惟一。MASTER和BACKUP的路由標識同樣,且惟一。 priority 100 #定義此服務器在此虛擬路由器中的優先級,優先級大權限高 advert_int 1 #檢測時間間隔 authentication { #設置驗證類型和密碼,主從的密碼必須相同,要不二者不通信。 auth_type PASS auth_pass 1111 } virtual_ipaddress { #設置虛擬IP地址,能夠設置多個虛擬IP地址。 192.168.41.249 } } |
備web服務器的配置文件
[root@localhost ~]# cat /etc/keepalived.conf ! Configuration File for keepalived
global_defs { notification_email { 752119102@qq.com } notification_email_from keepalive@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL }
vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 50 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.41.249 } } |
啓動keepalived服務
/etc/init.d/keepalived start
/etc/init.d/keepalived stop
4)查看keepalived日誌信息
主web服務器
Jan 14 20:27:41 localhost Keepalived_vrrp[20840]: Opening file '/etc/keepalived/keepalived.conf'. Jan 14 20:27:41 localhost Keepalived_vrrp[20840]: Configuration is using : 36304 Bytes Jan 14 20:27:41 localhost Keepalived_vrrp[20840]: Using LinkWatch kernel netlink reflector... Jan 14 20:27:41 localhost Keepalived[20837]: Starting VRRP child process, pid=20840 Jan 14 20:27:41 localhost Keepalived_vrrp[20840]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(11,12)] Jan 14 20:27:42 localhost Keepalived_vrrp[20840]: VRRP_Instance(VI_1) Transition to MASTER STATE Jan 14 20:27:43 localhost Keepalived_vrrp[20840]: VRRP_Instance(VI_1) Entering MASTER STATE Jan 14 20:27:43 localhost Keepalived_vrrp[20840]: VRRP_Instance(VI_1) setting protocol VIPs. Jan 14 20:27:43 localhost Keepalived_vrrp[20840]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.41.249 Jan 14 20:27:43 localhost Keepalived_vrrp[20840]: Netlink reflector reports IP 192.168.41.249 added Jan 14 20:27:43 localhost avahi-daemon[3207]: Registering new address record for 192.168.41.249 on eth0. Jan 14 20:27:43 localhost Keepalived_healthcheckers[20839]: Netlink reflector reports IP 192.168.41.249 added Jan 14 20:27:44 localhost avahi-daemon[3207]: Invalid query packet. Jan 14 20:27:46 localhost last message repeated 8 times Jan 14 20:27:48 localhost Keepalived_vrrp[20840]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.41.249 Jan 14 20:27:48 localhost avahi-daemon[3207]: Invalid query packet. |
備web服務器日誌
Jan 14 19:55:26 localhost Keepalived_vrrp[19423]: Opening file '/etc/keepalived/keepalived.conf'. Jan 14 19:55:26 localhost Keepalived_vrrp[19423]: Configuration is using : 36302 Bytes Jan 14 19:55:26 localhost Keepalived_vrrp[19423]: Using LinkWatch kernel netlink reflector... Jan 14 19:55:26 localhost Keepalived[19420]: Starting VRRP child process, pid=19423 Jan 14 19:55:26 localhost Keepalived_vrrp[19423]: VRRP_Instance(VI_1) Entering BACKUP STATE Jan 14 19:55:26 localhost Keepalived_vrrp[19423]: VRRP sockpool: [ifindex(2), proto(112), unicast(0), fd(11,12)] |
當主web服務器的keepalived停掉後,及主keepalived從新啓動時的日誌:
Jan 14 20:25:57 localhost Keepalived_vrrp[19423]: VRRP_Instance(VI_1) Transition to MASTER STATE Jan 14 20:25:58 localhost Keepalived_vrrp[19423]: VRRP_Instance(VI_1) Entering MASTER STATE Jan 14 20:25:58 localhost Keepalived_vrrp[19423]: VRRP_Instance(VI_1) setting protocol VIPs. Jan 14 20:25:58 localhost Keepalived_vrrp[19423]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.41.249 Jan 14 20:25:58 localhost Keepalived_vrrp[19423]: Netlink reflector reports IP 192.168.41.249 added Jan 14 20:25:58 localhost Keepalived_healthcheckers[19422]: Netlink reflector reports IP 192.168.41.249 added Jan 14 20:26:03 localhost Keepalived_vrrp[19423]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.41.249 ###主keepalived從新啓動後 Jan 14 20:27:42 localhost Keepalived_vrrp[19423]: VRRP_Instance(VI_1) Received higher prio advert Jan 14 20:27:42 localhost Keepalived_vrrp[19423]: VRRP_Instance(VI_1) Entering BACKUP STATE Jan 14 20:27:42 localhost Keepalived_vrrp[19423]: VRRP_Instance(VI_1) removing protocol VIPs. |
而且經過tcpdump vrrp可以看到二者之間的通信
[root@localhost ~]# tcpdump vrrp tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 20:38:58.657600 IP 192.168.41.33 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20 20:38:59.658287 IP 192.168.41.33 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20 20:39:00.659280 IP 192.168.41.33 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20 20:39:01.660358 IP 192.168.41.33 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20 20:39:02.661203 IP 192.168.41.33 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20 20:39:03.662205 IP 192.168.41.33 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20 20:39:04.663129 IP 192.168.41.33 > vrrp.mcast.net: VRRPv2, Advertisement, vrid 51, prio 100, authtype simple, intvl 1s, length 20 |
3、腳本實現監控httpd服務
目前keepalived可以實現當咱們的主web宕機或者網絡出現故障時進行切換,但若是僅是httpd進程出現故障,因此咱們就須要寫一點實時監控httpd進程狀態的腳本,即若是進程出現問題咱們就進行切換。
腳本內容:
#!/bin/bash # QQ:752119102 while true do httpdpid=`ps -C httpd --no-heading |wc -l` if [ $httpdpid -eq 0 ];then /etc/init.d/httpd start sleep 5 httpdpid=`ps -C httpd --no-heading |wc -l` if [ $httpdpid -eq 0 ];then /etc/init.d/keepalive stop fi fi sleep 5 done |
即當咱們的httpd進程被中止了,而且沒法重啓咱們會將keepalived進行中止,讓備web服務器進行接管,成爲主WEB服務器提供服務。
到此咱們已經可以輕鬆的部署keepalived讓它做爲web服務器的HA.