實現keepalived企業級高可用基於LVS-DR模式
一、為什麽要使用keepalived
當後端實現了負載均衡後壞掉一臺機器後可以用另一臺後臺web服務器補上,但是當前端的LVS壞掉後,整套服務就徹底廢掉,因此前端的LVS也需要實現負載均衡。
Keepalived的作用是檢測服務器的狀態,如果有一臺web服務器宕機,或工作出現故障,Keepalived將檢測到,並將有故障的服務器從系統中剔除,同時使用其他服務器代替該服務器的工作,當服務器工作正常後Keepalived自動將服務器加入到服務器群中,這些工作全部自動完成,不需要人工幹涉,需要人工做的只是修復故障的服務器。
keepalived:通過實現vrrp協議
配置文件簡單:配置文件比較簡單,可通過簡單配置實現高可用功能
穩定性強:keepalived是一個類似於layer3,4 & 7交換機制的軟件,具備我們平時說的第3層、第4層和第7層交換機的功能,常用於前端負載均衡器的高可用服務,當主服務器出現故障時,可快速進行切換,監測機制靈活,成功率高。
成本低廉:開源軟件,可直接下載配置使用,沒有額外費用。
應用範圍廣:因為keepalived可應用在多個層面,所以它幾乎可以對所有應用做高可用,包括LVS、數據庫、http服務、nginx負載均衡等等
支持多種類型:支持主從模式、主主模式高可用,可根據業務場景靈活選擇
二、原理:
1、當用戶訪問前端的VIP時,到達LVS-server上,通過keepalived根據配置文件將虛擬ip VIP綁定到LVS-server-master的網卡上,首先將訪問到主LVS服務器上,通過LVS分配後端realserver,當主LVS服務器出現故障後,keepalived可以將LVS-server-master的網卡上的VIP解除,重新綁定在LVS-server-backup的網卡上,用戶將通過LVS-server-backup去訪問後端真正的服務器。
實現一個VIP在主LVS-server和從LVS-server的漂移
2、LVS-DR工作方式
(a) 當用戶請求到達DirectorServer,此時請求的數據報文會先到內核空間的PREROUTING鏈。此時報文的源IP為CIP,目標IP為VIP
(b)PREROUTING檢查發現數據包的目標IP是本機,將數據包送至INPUT鏈
(c) IPVS比對數據包請求的服務是否為集群服務,若是,將請求報文中的源MAC地址修改為DIP的MAC地址,將目標MAC地址修改RIP的MAC地址,然後將數據包發至POSTROUTING鏈。此時的源IP和目的IP均未修改,僅修改了源MAC地址為DIP的MAC地址,目標MAC地址為RIP的MAC地址
(d) 由於DS和RS在同一個網絡中,所以是通過二層(數據鏈路層)來傳輸。POSTROUTING鏈檢查目標MAC地址為RIP的MAC地址,那麽此時數據包將會發至Real Server。
(e)RS發現請求報文的MAC地址是自己的MAC地址,就接收此報文。處理完成之後,將響應報文通過lo接口傳送給eth0網卡然後向外發出。此時的源IP地址為VIP,目標IP為CIP
(f)響應報文最終送達至客戶端
三、實驗:
1、環境準備:兩臺centos系統做DR ,一主一從,兩臺實現過基於LNMP的電子商務網站
LVS-server-master:VIP:172.17.251.239 橋接模式 開啟路由功能,配置keepalived
LVS-server-backup:VIP:172.17.251.239 橋接模式 開啟路由功能,配置keepalived
後端服務器1:RIP:172.17.251.107 橋接模式
VIP:172.17.251.239 lo:0
後端服務器2:RIP:172.17.251.110 橋接模式
VIP:172.17.251.239 lo:0
2、在後端服務器上實現LNMP
在兩個後端服務器上分別實現LNMP,實現方法如下
http://guanm.blog.51cto.com/13126952/1978354
3、安裝步驟:
(1)兩臺LVS-server都使用yum方式安裝keepalived服務
(2)iptables -F&& setenforing 0 清空防火墻策略,關閉selinux
4、配置基於DR模式的LVS負載均衡集群:
配置完成後啟動服務:
centos6:service keepalived start
centos7:ststemctl start keepalived
(1)在LVS-server-master上配置keepalived並啟動服務
vim /etc/keepalived/keepalived.conf
! Configuration File for keepalived global_defs { notification_email { root@localhost #郵件 } notification_email_from root smtp_server 127.0.0.1 smtp_connect_timeout 600 router_id KEEPAVILD_LVS } vrrp_instance VI_1 { state MASTER Master表示主 virtual_router_id 51 interface eth0 priority 101 advert_int 1 authentication { auth_type PASS auth_pass centos } virtual_ipaddress { 172.17.251.239 } } virtual_server 172.17.251.239 80{ delay_loop 6 lb_algo wrr lb_kind DR nat_mask 255.255.255.255 persistence_timeout 50 protocol TCP real_server 172.17.251.107 80 { weight 1 HTTP_GET { url { path / } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 172.17.251.110 80 { weight 1 HTTP_GET { url { path / } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
(1)在LVS-server-backup上配置keepalived
在LVS-server-master上將配置文件復制到從上
scp /etc/keepalived/keepalived.conf 172.17.251.108:/etc/keepalived
修改 vim /etc/keepalived/keepalived.conf
state BACKUP #從負載均衡器
priority 100 #優先級是100
5、在兩臺後端服務器上
要在後端的服務器上配置回環VIP,僅僅自己響應,不然和LVS
ifconfig lo:0 172.17.251.239 broadcast 172.17.251.239 netmask 255.255.255.255 up
#配置VIP到本地回環網卡lo上,並只廣播自己
routeadd -host 172.17.251.239 lo:0
#配置本地回環網卡路由
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
#1 只回答目標IP地址是來訪網絡接口本地地址的ARP查詢請求
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
#2 對查詢目標使用最適當的本地地址.在此模式下將忽略這個IP數據包的源地址並嘗試選擇與能與該地址通信的本地地址.
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
#關閉arp應答
1: 僅在請求的目標IP配置在本地主機的接收到請求報文的接口上時,才給予響應
2:必須避免將接口信息向非本網絡進行通告
開啟web、php-fpm、mysql服務
6、開啟keepalived服務後,用ip a 查看ip是否成功添加
(1)在LVS-server-master上查看 ,用ifconfig 查看不到,用ip a 查看
curl http://172.17.251.239/index.html 可以訪問成功
(2)測試
這時關閉LVS-server-master服務 service keepalived stop
在BACKUP上ip a 查看,可以看到VIP漂移到BACKUP上了。
用curl 訪問不影響訪問網站不受影響。
本文出自 “Linux 學習記錄” 博客,請務必保留此出處http://guanm.blog.51cto.com/13126952/1980089
實現keepalived企業級高可用基於LVS-DR模式