LVS原理詳解及部署之四:keepalived介紹

artType01.jpg LVS原理詳解及部署之四:keepalived介紹

2014-01-14 13:36:27

標籤:LVS LVS調度算法 keepalived原理介紹 keepalived部署

big.png

原創作品,允許轉載,轉載時請務必以超鏈接形式標明文章 原始出處 、作者信息和本聲明。否則將追究法律責任。http://atong.blog.51cto.com/2393905/1351479

-------------------LVS專題------------------------

LVS原理詳解及部署之一:ARP原理準備

LVS原理詳解及部署之二:LVS原理詳解(3種工作方式8種調度算法)

LVS原理詳解及部署之三:手動部署LVS

LVS原理詳解及部署之四:keepalived介紹

LVS原理詳解及部署之五:LVS+keepalived實現負載均衡&高可用

-------------------------------------------------

之前已經講解LVS原理,並且介紹瞭如果手動部署LVS。但由於我們需要進行RS節點服務器的健康檢查,還有要做LVS的HA。此文就主要介紹keepalived的原理,並且介紹如何部署keepalived做作爲web服務器的HA。本文的目錄如下:

一、keepalived原理介紹

二、部署keepalived作爲web服務器的HA

三、腳本實現監控httpd服務


一、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頭認證的方式提供了更高的安全性,能夠防止報文重放和修改等***


二、部署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 {  #設置報警郵件地址,可多行每行一個。

  [email protected]

   }

  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 {

  [email protected]

   }

  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


三、腳本實現監控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.


本文出自 “從頭開始” 博客,請務必保留此出處http://atong.blog.51cto.com/2393905/1351479


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章