前言
前面說過基于heartbeat的LVS高可用方案,今天帶來另一種解決方案:基于Keepalived實現LVS雙主高可用集群。什么是Keepalived呢,keepalived觀其名可知,保持存活,在網絡里面就是保持在線了, 也就是所謂的高可用或熱備,用來防止單點故障的發生。本文將詳細講述Keepalived工作原理及高可用解決方案的實現。
相關介紹
Keepalived簡介
Keepalived采用VRRP(virtual router redundancy protocol,虛擬路由冗余協議)熱備份協議,以軟件的方式實現linux服務器的多機熱備功能。VRRP是針對路由器的一種備份解決方案——由多臺路由器組成一個熱備組。通過共用的虛擬IP地址對外提供服務;每個熱備組內同一時刻只有一臺主服務器提供服務,其他服務器處于冗余狀態,若當前在線的服務器失敗,其他服務器會自動接替(優先級決定接替順序)虛擬IP地址,以繼續提供服務。
工作原理
Keepalived組件介紹
core:keepalived的核心,復雜主進程的啟動和維護,全局配置文件的加載解析等
check:負責healthchecker(健康檢查),包括了各種健康檢查方式,以及對應的配置的解析包括LVS的配置解析
vrrp:VRRP子進程,VRRP子進程就是來實現VRRP協議的
libip*:LVS相關
由圖可知,兩個子進程都被系統WatchDog看管,兩個子進程各自負責自己的事,healthchecker子進程負責檢查各自服務器的健康程度,例如HTTP,LVS等等,如果healthchecker子進程檢查到MASTER上服務不可用了,就會通知本機上的VRRP子進程,讓他刪除通告,并且去掉虛擬IP,轉換為BACKUP狀態。
高可用解決方案
實驗拓撲
配置過程
HA集群配置前提
時間同步、基于主機名互相通信、SSH互信
請確保兩個節點時間同步,可用ntpdate向時間服務器同步
[root@node1 ~]# ntpdate cn.pool.ntp.org
基于主機名互相通信
[root@node1 ~]# vim /etc/hosts 172.16.10.123 node1.scholar.com node1 172.16.10.124 node2.scholar.com node2 [root@node1 ~]# vim /etc/sysconfig/network HOSTNAME=node1.scholar.com [root@node1 ~]# uname -n node1.scholar.com #兩個節點都需如上操作
SSH互信
[root@node1 ~]# ssh-keygen -t rsa -P '' [root@node1 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node2 [root@node2 ~]# ssh-keygen -t rsa -P '' [root@node2 ~]# ssh-copy-id -i .ssh/id_rsa.pub root@node1 [root@node1 ~]# date; ssh node2 'date' #測試 Tue Jun 16 13:31:39 CST 2015 Tue Jun 16 13:31:39 CST 2015
安裝所需程序
[root@node1 ~]# yum install keepalived -y #兩個節點都需安裝
配置keepalived
[root@node1 ~]# vim /etc/keepalived/keepalived.conf vrrp_instance VI_1 { #定義VRRP實例,實例名自定義 state MASTER #指定Keepalived的角色,MASTER為主服務器,BACKUP為備用服務器 interface eth0 #指定HA監測的接口 virtual_router_id 51 #虛擬路由標識(1-255),在一個VRRP實例中主備服務器ID必須一樣 priority 100 #優先級,數字越大越優先,主服務器優先級必須高于備服務器 advert_int 1 #設置主備之間同步檢查時間間隔,單位秒 authentication { #設置驗證類型和密碼 auth_type PASS #驗證類型 auth_pass ab007 #設置驗證密碼,同一實例中主備密碼要保持一致 } virtual_ipaddress { #定義虛擬IP地址 192.168.12.23 } } vrrp_instance VI_2 { state BACKUP interface eth0 virtual_router_id 61 priority 99 advert_int 1 authentication { auth_type PASS auth_pass sr200 } virtual_ipaddress { 192.168.13.23 } } virtual_server 192.168.12.23 80 { #設置虛擬服務器 delay_loop 6 #設置健康狀態檢查時間 lb_algo rr #設置負載調度算法 lb_kind DR #設置LVS實現負載均衡的機制 nat_mask 255.255.255.0 #設置掩碼 persistence_timeout 50 #會話保持時間 protocol TCP #指定轉發協議類型 sorry_server 127.0.0.1 80 #設置應急服務器 real_server 172.16.10.125 80 { #后端服務器節點 weight 1 #設置服務節點的權重 HTTP_GET { #設置檢測方式 url { path / status_code 200 #設定返回狀態碼為200表示Realserver存活 } connect_timeout 2 #設置響應超時時間 nb_get_retry 3 #設置超時重試次數 delay_before_retry 1 #設置超時重試間隔 } } real_server 172.16.10.126 80 { weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 2 nb_get_retry 3 delay_before_retry 1 } } } virtual_server 192.168.13.23 80 { delay_loop 6 lb_algo rr lb_kind DR nat_mask 255.255.255.0 persistence_timeout 50 protocol TCP sorry_server 127.0.0.1 80 real_server 172.16.10.125 80 { weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 2 nb_get_retry 3 delay_before_retry 1 } } real_server 172.16.10.126 80 { weight 1 HTTP_GET { url { path / status_code 200 } connect_timeout 2 nb_get_retry 3 delay_before_retry 1 } } }
將配置文件同步給另一個節點
[root@node1 ~]# scp /etc/keepalived/keepalived.conf node2:/etc/keepalived/ keepalived.conf 100% 2196 2.1KB/s 00:00
修改另一個節點配置文件
[root@node2 ~]# vim /etc/keepalived/keepalived.conf vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 51 priority 99 advert_int 1 authentication { auth_type PASS auth_pass ab007 } virtual_ipaddress { 192.168.12.23 } } vrrp_instance VI_2 { state MASTER interface eth0 virtual_router_id 61 priority 100 advert_int 1 authentication { auth_type PASS auth_pass sr200 } virtual_ipaddress { 192.168.13.23 } } #其他配置不變
Real Server配置
配置內核參數及VIP
準備測試頁面
#兩個RS節點都執行以上操作
測試頁面
keepalived節點準備應急頁面
#兩節點都需執行此操作
測試
啟動keepalived
查看兩節點的ip和ipvs規則情況
#兩個節點各生成了兩組規則,因為VIP只有一組,所以只有一組生效
訪問測試
模擬其中一個主節點故障
[root@node1 ~]# service keepalived stop
再次查看兩節點的ip和ipvs規則情況
由此可見,一個主節點掛掉以后所有的VIP和ipvs規則都會轉移到另一個節點,所以訪問也不會受到任何影響,這里就不再測試。如果故障節點重新上線,資源還會再次回到工作節點。
下面我們模擬兩個RS節點全部故障,看一下sorry_server是否可以工作
[root@scholar ~]# service httpd stop #兩個RS全部停止服務
查看ipvs規則
real server已全部下線,應急服務器上線
sorry_server響應成功,至此,基于Keepalived實現LVS雙主高可用集群實驗完成
The end
基于Keepalived實現LVS雙主高可用解決方案就說到這里了,通過實驗可以看出使用keepalived構建LVS群集更加簡便易用,如果實驗過程中遇到問題可留言交流。以上僅為個人學習整理,如有錯漏,大神勿噴~~~
原創文章,作者:書生,如若轉載,請注明出處:http://www.www58058.com/5396