1、keepalived概述html
keepalived是專門針對LVS設計的一款強大的輔助工具,主要用來提供故障切換和健康檢查功能——判斷LVS負載調度器,節點服務器的可用性,及時隔離並替換爲新的服務器,當故障主機恢復後將其從新加入羣集。web
一、keepalived的熱備原理概述算法
keepalived採用VRRP(虛擬路由冗餘協議)熱備份協議,以軟件的方式實現Linux服務器的多機熱備功能。VRRP是針對路由器的一種備份解決方案——有多臺路由組成一個熱備組,經過共用的虛擬IP地址對外提供服務;每一個熱備組內同一時刻只有一臺主路由器提供服務 ,其餘路由器處於冗餘狀態,若當前在線路由器失敗,則其餘路由器會自動接替(優先級決定接替順序)虛擬IP地址,以繼續提供服務。熱備組內的每臺路由器都有可能成爲主路由器,虛擬路由器的IP地址能夠在熱備組內的路由器之間進行轉移,因此也稱爲漂移IP地址。使用keepalived時,漂移地址的實現不須要手動創建虛接口配置文件,而是由keepalived根據配置文件自動管理。vim
二、安裝keepalived所須要支持的軟件包服務器
在編譯安裝keepalived以前,必須先安裝內核開發包kernel-devel,以及openssl-devel和popt-devel等支持庫。負載均衡
[root@localhost /]#yum -y install kernel-devel openssl-devel popt-devel
三、編譯安裝keepalived
ide
使用指定Linux內核位置對keepalived進行配置,並將安裝路徑指定爲根目錄,這樣就無需額外建立連接文件了。工具
[root@localhost /]#tar zxf keepalived-1.2.2.tar.gz -C /usr/src/ [root@localhost /]#cd /usr/src/keepalived-1.2.2 [root@localhost keepalived-1.2.2]#./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-131.0.15.e16.i686 [root@localhost keepalived-1.2.2]#make && make install
四、啓動keepalived服務進程oop
執行make install操做之後,會自動生成「/etc/init.d/keepalived」腳本文件,但還須要手動添加爲系統服務,這樣就可使用service,chkconfig工具來對keepalived服務進程進行管理了。測試
[root@localhost /]#chkconfig --add keepalived [root@localhost /]#chkconfig keepalived on
2、配置LVS+Keepalived高可用羣集
keepalived的設計目標是構建可用的LVS負載均衡羣集,能夠調用ipvsadm工具來建立虛擬服務器,管理服務器池,而不只僅用來作雙擊熱備。使用keepalived構建LVS羣集更加簡便易用,主要優點體如今:對LVS負載調度器實現熱備切換,提升可用性,對服務器池中的節點進行健康檢查,自動移除失效節點,恢復後再從新加入。在基於LVS-Keepalived實現的LVS羣集結構中,至少包括兩臺熱備的負載調度器,兩臺以上的節點服務器,本例將以DR模式的LVS羣集爲基礎,增長一臺從負載調度器,使用Keepalived來實現主、從調度器的熱備,從而構建建有負載均衡、高可用兩種能力的LVS網站羣集平臺。拓撲圖以下:
實驗環境:參照上圖可知每臺主機網卡的IP地址,以下所示:共7臺主機
VIP(虛擬IP地址):172.16.16.172/24
主調度器:eth0 172.16.16.173/24 eth1: 192.168.7.173/24
從調度器:eth0 172.16.16.174/24 eth1: 192.168.7.174/24
WEB節點1:eth0 172.16.16.177/24 eth1: 192.168.7.177/24
WEB節點2:eth0 172.16.16.178/24 eth1: 192.168.7.178/24
WEB節點3:eth0 172.16.16.179/24 eth1: 192.168.7.179/24
WEB節點4:eth0 172.16.16.180/24 eth1: 192.168.7.180/24
NFS共享存儲:eth0 192.168.7.250/24
具體操做步驟以下:
一、配置各服務器的IP地址以及相應的軟件包
調度器:主調度器和從調度器上分別安裝keepalived和ipvsadm等軟件包,並安裝這些軟件包的依賴包,具體操做參考文章的上述部分。
WEB服務器:在各WEB服務器上分別安裝httpd軟件包,並將NFS服務器上的共享存儲掛載到本地。
NFS存儲:安裝NFS軟件包,並提供相應的共享源。
二、配置主調度器
Keepalived服務的配置目錄位於/etc/keepalived。其中keepalived.conf是主配置文件,另外包括一個子目錄samples/,提供了許多配置樣列做爲參考。在keepalived的配置文件中,使用」global_defs {……}」區段指定全局參數。使用」vrrp_instance 實例名稱 {……}」區段指定VRRP熱備參數,註釋文字以」!」符號開頭。
[root@localhost /]#vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived #!表示註釋 global_defs notification_email { root@example.com #接收警報的郵箱,能夠添加多個 } notification_email_from root@localhost smtp_server 127.0.0.1 #使用本機轉發 email smtp_connect_timeout 30 router_id LVS_HA_R1 #本服務器的名稱,備份組內惟一 } vrrp_instance VI_1 { #定義VRRP熱備實例 state MASTER #熱備狀態,MASTER(主);SLAVE(從);BACKUP(備份) interface eth0 #承載VIP地址的物理接口 virtual_router_id 50 #虛擬路由器的ID號,組內保存一致 priority 100 #優先級,數值越大優先級越高。 advert_int 1 #主備之間的通告間隔秒數(心跳頻率) authentication { #認證信息,每一個熱備組保持一致 auth_type PASS #認證類型,主備切換時的驗證 auth_pass 1111 #密碼字串 } virtual_ipaddress { #指定漂移地址(VIP),能夠有多個 172.16.16.172 #HA 虛擬 ip,可加多個 } } virtual_server 172.16.16.172 80 { #虛擬服務器地址(VIP)、端口 delay_loop 6 #健康檢查的間隔時間(秒) lb_algo rr #lvs 調度算法,這裏使用輪詢 lb_kind DR #lvs 負載均衡機制,這裏使用直連路由 ! persistence_timeout 50 #同一IP鏈接50秒內被分配到同一臺服務器 protocol TCP #用 TCP 協議檢查 realserver 狀態 real_server 172.16.16.177 80 { #第一個WEB節點的地址、端口 weight 1 #節點的權重 TCP_CHECK { #健康檢查方式 connect_port 80 #檢查的目標端口 connect_timeout 3 #故障重試秒數(即鏈接超時) nb_get_retry 3 #重試延遲(即重試次數) delay_before_retry 3 #重試間隔(秒) } } real_server 172.16.16.178 80 { #第二個WEB節點的地址、端口 weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 172.16.16.179 80 { #第三個WEB節點的地址、端口 weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 172.16.16.180 80 { #第四個WEB節點的地址、端口 weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } } [root@localhost /]#service keeplaived restart //重啓keepalived服務
配置完keepalived後,還須要配置負載調度器,加載ip_vs模塊,安裝ipvsadm軟件包.這裏使用的是LVS-DR模式,須要調整/proc系統的內核響應參數。
[root@localhost /]#modprobe ip_vs [root@localhost /]#rpm -ivh /media/Packages/ipvsadm-1.25-9.e16.i686.rpm [root@localhost /]#vim /etc/sysctl.conf ......//省略部份內容 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.eth0.send_redirects = 0 net.ipv4.conf.eth1.send_redirects = 0 [root@localhost /]#sysctl -p
三、配置從調度器
從調度器的配置與主調度器基本相同,也包括全局參數、熱備參數、服務器池配置,只須要調整router_id、state、prority參數便可,其他內容徹底相同,配置完成之後重啓keepalived服務。
[root@localhost /]#vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived global_defs notification_email { root@example.com } notification_email_from root@localhost smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_HA_R2 } vrrp_instance VI_1 { state SLAVE interface eth0 virtual_router_id 50 priority 99 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.16.16.172 } } virtual_server 172.16.16.172 80 { delay_loop 6 lb_algo rr lb_kind DR ! persistence_timeout 50 protocol TCP real_server 172.16.16.177 80 { #第一個WEB節點的地址、端口 weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 172.16.16.178 80 { #第二個WEB節點的地址、端口 weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 172.16.16.179 80 { #第三個WEB節點的地址、端口 weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 172.16.16.180 80 { #第四個WEB節點的地址、端口 weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } } [root@localhost /]#service keeplaived restart //重啓keepalived服務
配置完keepalived後,還須要配置負載調度器,加載ip_vs模塊,安裝ipvsadm軟件包.這裏使用的是LVS-DR模式,須要調整/proc系統的內核響應參數。
[root@localhost /]#modprobe ip_vs [root@localhost /]#rpm -ivh /media/Packages/ipvsadm-1.25-9.e16.i686.rpm [root@localhost /]#vim /etc/sysctl.conf ......//省略部份內容 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.eth0.send_redirects = 0 net.ipv4.conf.eth1.send_redirects = 0 [root@localhost /]#sysctl -p
當主從服務器的keepalived服務都起來以後,咱們可使用「ip addr show dev eth0」命令來查看VIP所在的位置,在主調度器上執行此命令時,發現VIP當前是在主調度器上的。當將主調度器的eth0網卡宕掉時,VIP會轉移到從調度器上。
四、配置web節點服務器
因爲咱們羣集使用的是DR模式,因此咱們的web節點服務器的配置也和做者前一篇文章DR負載均衡羣集裏面配置的同樣。
配置虛接口
[root@localhost /]#cd /etc/sysconfig/network-scripts/ [root@localhost network-scripts]#cp ifcfg-lo ifcfg-lo:0 [root@localhost network-scripts]#vim ifcfg-lo:0 ......//省略部份內容 DEVICE=lo:0 ONBOOT=yes IPADDR=172.16.16.172 NETMASK=255.255.255.255 [root@localhost network-scripts]#service network restart [root@localhost network-scripts]#vim /etc/rc.local ......//省略部份內容 /sbin/route add -host 172.16.16.172 dev lo:0 [root@localhost network-scripts]#route add -host 172.16.16.172 dev lo:0
調整/proc響應參數
[root@localhost /]#vim /etc/sysctl.conf ......//省略部份內容 net.ipv4.conf.all.arp_ignore = 1 net.ipve.conf.all.arp_announce = 2 net.ipv4.conf.default.arp_ignore = 1 net.ipve.conf.default.arp_announce = 2 net.ipv4.conf.lo.arp_ignore = 1 net.ipve.conf.lo.arp_announce = 2 [root@localhost /]#sysctl -p
掛載NFS共享存儲,並安裝httpd服務
[root@localhost /]#yum -y install httpd [root@localhost /]#mount 192.168.7.250:/var/www/html /var/www/html [root@localhost /]#vim /var/www/html/index.html <h1>負載均衡測試網頁!!!</h1> [root@localhost /]#service httpd start [root@localhost /]#chkcofnig httpd on
注意:全部web節點服務器的配置均和此同樣。
五、配置NFS共享存儲
如何配置NFS共享存儲請你們參考文章http://cshbk.blog.51cto.com/5685776/1307880
六、測試LVS+Keepalived高可用羣集
安排多臺測試機,從internet中直接訪問http://172.16.16.172,將可以看到由真實服務器提供的網頁內容
在LVS負載調度器中,經過「ipvsadm -Ln」或「ipvsadm -Lnc」命令查看節點狀態能夠觀察當前的負載分配狀況,對於輪詢算法來講,每一個節點所得到的鏈接負載應大體至關。
至此有關LVS+keepalived羣集配置完畢,這樣即實現了lvs負載平衡又實現了調度器的熱備。