基於LVS-DR模型實現keepalived的主從架構
在一個系統中,常常存在一些單點服務器,為了提高整個系統的穩定性,我們常常需要對這些單點服務做高可用配置,keepalived即為一種常用的高可用配置服務。
首先我們來了解一下神馬是keepalived?
keepalived是一個基於VRRP協議來實現的WEB服務高可用方案,可以利用其來避免單點故障。使用多臺節點安裝keepalived。其他的節點用來提供真實的服務,同樣的,他們對外表現一個虛擬的IP。主服務器宕機的時候,備份服務器就會接管虛擬IP,繼續提供服務,從而保證了高可用性。
keepalived主要是模塊是VRRP Stack和Cheackers,實現HA集群 中失敗切換(Failover)功能。Keepalived通過VRRP功能能再結合LVS負載均 衡軟件即可部署一個高性能的負載均衡集群系統。,Cheackers主要實現可 實現對服務器運行狀態檢測和故障隔離。其中ipvs和realserver健康狀態檢 查通過配置文件配置就可以實現,而其他服務高可用則需要通過自己編寫腳 本,然後配置keepalived調用來實現。
Keepalived運行有3個守護進程。父進程主要負責讀取配置文件初始化 、監控2個子進程等;然後兩個子進程,一個負責VRRP,另一個負責 Cheackers健康檢查。其中父進程監控模塊為WacthDog,工作實現:每個 子進程打開一個接受unix域套接字,父進程連接到那些unix域套接字並向子 進程發送周期性(5s)hello包。 上圖是Keepalived的功能體系結構,大致分兩層:用戶空間(user space) 和內核空間(kernel space)。 內核空間:主要包括IPVS(IP虛擬服務器,用於實現網絡服務的負載均衡) 和NETLINK(提供高級路由及其他相關的網絡功能)兩個部份。
Keepalived有以下幾個特性:
配置文件簡單、穩定性強、成本低廉、應用範圍廣、支持多種類型
上面我們有提到VRRP,接下來就簡單介紹下VRRP。
VRRP(Virtual Router Redundancy Protocol,虛擬路由冗余協議) 可以認為是實現路由器高可用的協議,簡單的說,當一個路由器故障時可以 由另一個備份路由器繼續提供相同的服務。
VRRP根據優先級來確定虛擬路由器中每臺路由器的角色(Master路由 器或Backup路由器)。VRRP優先級的取值範圍為0到255(數值越大表明 優先級越高),可配置的範圍是1到254,優先級0為系統保留給路由器放棄 Master位置時候使用,255則是系統保留給IP地址擁有者使用。優先級越高 ,則越有可能成為Master路由器。當兩臺優先級相同的路由器同時競爭 Master時,比較接口IP地址大小。接口地址大者當選為Master。
這些名詞我們都已經簡單GET到了,下面我們就以一個實驗來驗證這些原理的正確性。
實驗:
一、環境準備:
兩臺centos系統做DR、一主一從,兩臺實現過基於LNMP的電子商務網站。
機器名 | Ip配置 | 服務角色 | 備註 |
Lvs-server-master | VIP:172.17.253.1 DIP:172.17.254.117 | 負載均衡器(主服務器) | 開啟路由功能 (配置leepalived) |
Lvs-server-backup | VIP:172.17.253.1 DIP:172.17.252.244 | 負載均衡器(從服務器) | 開啟路由功能 (配置leepalived) |
Lnmp-server1 | RIP:172.17.254.17 VIP:172.17.253.1 | 後端服務器 | |
Lnmp-server2 | RIP:172.17.254.107 VIP:172.17.253.1 | 後端服務器 |
主從架構圖
二、安裝步驟:
1、兩臺服務器都使用yum方式安裝keepalived服務
2、iptables -F && setenforing 清空防火墻策略,關閉selinux
三、修改keepalived主(lvs-server-master)配置文件實現virtual_instance和virtual_server:
vrrp_instance VI_1 { state MASTER interface eth1 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 172.17.253.1 } } virtual_server 172.17.253.1 80 { delay_loop 6 lb_algo wrr lb_kind DR persistence_timeout 50 protocol TCP real_server 172.17.254.17 80 { weight 1 HTTP_GET { url { path / } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 172.17.254.107 80 { weight 1 HTTP_GET { url { path / } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
四、修改keepalived從(lvs-server-backup)配置文件實現virtual_instance和virtual_server:
vrrp_instance VI_1 { state BACKUP interface ens37 virtual_router_id 51 priority 98 advert_int 1 authentication { auth_type PASS auth_pass 2222 } virtual_ipaddress { 172.17.253.1 } } virtual_server 172.17.253.1 80 { delay_loop 6 lb_algo wrr lb_kind DR persistence_timeout 50 protocol TCP real_server 172.17.254.17 80 { weight 1 HTTP_GET { url { path / } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 172.17.254.107 80 { weight 1 HTTP_GET { url { path / } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
五、測試訪問:http://172.17.253.1
1.在兩臺均衡器上都開啟keepalived服務的情況下,web網站能正常訪問。
2.在主服務器上關閉keepalived服務進行測試。
3.在從服務器上關閉keepalived服務進行測試
基於LVS-DR模型實現keepalived的主從架構