高可用keepalived实例
提要:本文主要以案例為主,讓你在實踐中學習
目錄
?一. Keepalived的介紹
?二.基本Keepalived的示例
?1.準備三臺虛擬機
2.服務安裝如下:
3.部署keepalived服務
4.測試
三.Keepalived+LVS服務器示例
1.配置網絡環境
2.調度器安裝Keepalived與ipvsadm軟件
3.部署Keepalived實現LVS-DR模式調度器的高可用
4.測試
一. Keepalived的介紹
通常使用keepalived技術配合LVS對director和存儲進行雙機熱備,防止單點故障,keepalived專為LVS和HA設計的一款健康檢查工具,但演變為后來不僅僅為LVS提供方案,Keepaliced支持故障自動切換(Failover),支持節點健康狀態檢查(Health Checking)
Keepalived采用VRRP的熱備份協議實現Linux服務器的多機熱備功能,VRRP,虛擬路由冗余協議,是針對路由器一種備份解決方案,由多臺路由器組成一個人熱備組,通過共用的虛擬IP地址對外提供服務,每個熱備組內同一時刻只有一臺主路由器提供服務,其他路由器處于冗余狀態,若當前在線的路由器失效,則其他路由器會根據設置的優先級自動接替虛擬IP地址,繼續提供服務
?官方網站http://www.keepalived.org/
?二.基本Keepalived的示例
?1.準備三臺虛擬機
????????兩臺做后端服務器,一臺做調度器????????
????????這里web服務器ip分別寫: 192.168.1.100/24 ???????? 192.168.1.200/24
????????proxy調度器ip為:192.168.1.5/24
2.服務安裝如下:
web1 ~]# yum -y install httpd?? echo "192.168.1.100" > /var/www/html/index.html????#創建網頁文件 systemctl restart httpd????????#啟動服務器 yum install -y keepalived #安裝Keepalived軟件web2 ~]# yum -y install httpd echo "192.168.1.200" > /var/www/html/index.html #創建網頁文件 systemctl restart httpd #啟動服務器 yum install -y keepalived #安裝Keepalived軟件3.部署keepalived服務
1)修改后臺web1服務器keepalived配置文件
[root@web1 ~]# vim /etc/keepalived/keepalived.conf global_defs {router_id web1???????#12行,設置路由ID號(實驗需要修改)vrrp_iptables??????#原本沒有這一行)清除防火墻的攔截規則(手動添加該行) } vrrp_instance VI_1 {state MASTER????????????#主服務器為MASTER(備服務器需要修改為BACKUP)interface eth0????????????#VIP配在哪個網卡(實驗需要修改,不能照抄網卡名)virtual_router_id 51????????#主備服務器VRID號必須一致priority 100????????????#服務器優先級,優先級高優先獲取VIPadvert_int 1authentication {auth_type passauth_pass 1111 ???? ????????????????}virtual_ipaddress {????????#誰是主服務器誰獲得該VIP(實驗需要修改) 192.168.1.80/24(網卡名不能照抄) } }?? [root@web1 ~]# systemctl start keepalived??????
??
?2)修改后臺web2服務器keepalived配置文件
[root@web2 ~]# vim /etc/keepalived/keepalived.conf global_defs {router_id web2????????#設置路由ID號(實驗需要修改)vrrp_iptables????????????#清除防火墻的攔截規則(實驗需要修改,手動添加該行) } vrrp_instance VI_1 {state BACKUP????????????#備服務器為BACKUP(實驗需要修改)interface eth0????????????#VIP配在哪個網卡(實驗需要修改,不能照抄網卡名)virtual_router_id 51????????#主輔VRID號必須一致priority 50????????????????#服務器優先級(實驗需要修改)advert_int 1authentication {auth_type passauth_pass 1111 ???? ????????????}virtual_ipaddress {????????#誰是主服務器誰配置VIP(實驗需要修改) 192.168.1.80/24 } }[root@web2 ~]# systemctl start keepalived
3)關閉放火墻,SElinux
[root@web1 ~]# firewall-cmd --set-default-zone=trusted [root@web1 ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config [root@web1 ~]# setenforce 0[root@web2 ~]# firewall-cmd --set-default-zone=trusted [root@web2 ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config [root@web2 ~]# setenforce 04.測試
1)登錄兩臺Web服務器查看VIP信息
[root@web1 ~]# ip addr show [root@web2 ~]# ip addr show2) 客戶端訪問
curl http://192.168.1.80 客戶端使用curl命令連接http://192.168.1.80,查看Web頁面;給Web1關機,客戶端再次訪問http://192.168.1.80,驗證是否可以正常訪問服務三.Keepalived+LVS服務器示例
1.配置網絡環境
1)運用以上案例的ip地址,在加一臺proxy調度器,也就是如下配置
web1:192.168.1.100/24 ???? web2: 192.168.1.200/24
兩臺服務器分別操作 yum -y install httpd????????#安裝軟件 echo "192.168.1.100" > /var/www/html/index.html????#創建網頁文件 systemctl restart httpd????????#啟動服務器proxy: 192.168.1.5/24
proxy: 192.168.1.6/24
2).接下來給web1后臺服務器配置VIP地址
[root@web1 ~]# cd /etc/sysconfig/network-scripts/ [root@web1 ~]# cp ifcfg-lo ifcfg-lo:0 [root@web1 ~]# vim ifcfg-lo:0 DEVICE=lo:0 #設備名稱 IPADDR=192.168.1.15 #IP地址 NETMASK=255.255.255.255 #子網掩碼 NETWORK=192.168.1.15 #網絡地址 BROADCAST=192.168.1.15 #廣播地址 ONBOOT=yes #開機是否激活該網卡 NAME=lo:0 #網卡名稱注意:這里的子網掩碼必須是32(也就是全255),網絡地址與IP地址一樣,廣播地址與IP地址也一樣。
[root@web1 ~]# vim /etc/sysctl.conf #手動寫入如下4行內容 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_announce = 2 寫入下面這四行的主要目的就是訪問192.168.4.15的數據包,只有調度器會響應,其他主機都不做任何響應。 [root@web1 ~]# sysctl -p #刷新,讓配置文件立刻生效 重啟網絡服務 [root@web1 ~]# systemctl restart network #重啟網絡服務 [root@web1 ~]# ip a s #查看IP地址3).接下來給web2后臺服務器配置VIP地址
[root@web2 ~]# cd /etc/sysconfig/network-scripts/ [root@web2 ~]# cp ifcfg-lo ifcfg-lo:0 [root@web2 ~]# vim ifcfg-lo:0 DEVICE=lo:0 IPADDR=192.168.1.15 NETMASK=255.255.255.255 NETWORK=192.168.1.15 BROADCAST=192.168.1.15 ONBOOT=yes NAME=lo:0注意:這里因為web2也配置與代理一樣的VIP地址,默認肯定會出現地址沖突
[root@web2 ~]# vim /etc/sysctl.conf #手動寫入如下4行內容,英語詞匯:ignore(忽略、忽視),announce(宣告、廣播通知) net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_announce = 2 #arp_ignore(防止進站沖突) #arp_announce(防出站沖突) [root@web2 ~]# sysctl -p #刷新,讓配置文件立刻生效寫入這四行的主要目的就是訪問192.168.4.15的數據包,只有調度器會響應,其他主機都不做任何響應。
[root@web2 ~]# sysctl -p #刷新,讓配置文件立刻生效 [root@web2 ~]# systemctl restart network????????#重啟網絡服務 [root@web2 ~]# ip a s????????????????????????????#查看IP地址2.調度器安裝Keepalived與ipvsadm軟件
兩臺調度器都操作 [root@proxy ~]# yum install -y keepalived [root@proxy ~]# systemctl enable keepalived [root@proxy ~]# yum install -y ipvsadm [root@proxy ~]# ipvsadm -C3.部署Keepalived實現LVS-DR模式調度器的高可用
1)LVS1調度器設置Keepalived,并啟動服務(在192.168.4.5主機操作)
[root@proxy ~]# vim /etc/keepalived/keepalived.conf global_defs {router_id lvs1????????#12行,設置路由ID號(實驗需要修改)vrrp_iptables????????????#13行,清除防火墻的攔截規則(實驗需要修改,手動添加) } vrrp_instance VI_1 {state MASTER????????????#21行,主服務器為MASTERinterface eth0????????????#22行,定義網絡接口(不能照抄網卡名)virtual_router_id 51????????#23行,主輔VRID號必須一致priority 100????????????#24行,服務器優先級advert_int 1authentication {auth_type passauth_pass 1111 ???? ????????????????}virtual_ipaddress {????????#30~32行,配置VIP(實驗需要修改) 192.168.1.15/24 } } virtual_server 192.168.1.15 80 {????????#設置ipvsadm的VIP規則(實驗需要修改)delay_loop 6????????????????????????#默認健康檢查延遲6秒lb_algo rr????????????????????????????#設置LVS調度算法為RR sh,dhlb_kind DR????????????????????????????#設置LVS的模式為DR(實驗需要修改)#persistence_timeout 50????????????????#(實驗需要刪除)(相同的客戶端50秒訪問相同服務端) #注意persistence_timeout的作用是保持連接 #開啟后,客戶端在一定時間內(50秒)始終訪問相同服務器protocol TCP????????????????????????#TCP協議real_server 192.168.1.100 80 {????????#設置后端web服務器真實IP(實驗需要修改)weight 1????????????????????????????#設置權重為1TCP_CHECK {????????????????????????#對后臺real_server做健康檢查(實驗需要修改)connect_timeout 3????????????????#健康檢查的超時時間3秒nb_get_retry 3????????????????????#健康檢查的重試次數3次delay_before_retry 3????????????????#健康檢查的間隔時間3秒}}real_server 192.168.1.200 80 {????????#設置后端web服務器真實IP(實驗需要修改)weight 2????????????????????????#設置權重為2TCP_CHECK {????????????????????#對后臺real_server做健康檢查(實驗需要修改)connect_timeout 3????????????#健康檢查的超時時間3秒nb_get_retry 3????????????????#健康檢查的重試次數3次delay_before_retry 3????????????#健康檢查的間隔時間3秒}} } [root@proxy1 ~]# systemctl start keepalived [root@proxy1 ~]# ipvsadm -Ln????????#查看LVS規則 [root@proxy1 ~]# ip a s????????????#查看VIP配置2)LVS2調度器設置Keepalived(在192.168.4.6主機操作)
[root@proxy2 ~]# vim /etc/keepalived/keepalived.conf global_defs {router_id lvs2???????????????????? #12行,設置路由ID號(實驗需要修改)vrrp_iptables #13行,清除防火墻的攔截規則(實驗需要修改,手動添加) } vrrp_instance VI_1 {state BACKUP ???????? ????????????????#21行,從服務器為BACKUP(實驗需要修改)interface eth0????????????????????????#22行,定義網絡接口(不能照抄網卡名)virtual_router_id 51???????????????? #23行,主輔VRID號必須一致priority 50 ???????????????????? #24行,服務器優先級(實驗需要修改)advert_int 1authentication {auth_type passauth_pass 1111 }virtual_ipaddress { #30~32行,設置VIP(實驗需要修改) 192.168.1.15/24 } } virtual_server 192.168.1.15 80 { ???? #自動設置LVS規則(實驗需要修改)delay_loop 6lb_algo rr ???????????????? #設置LVS調度算法為RRlb_kind DR ???????????????? ????????#設置LVS的模式為DR(實驗需要修改)# persistence_timeout 50 #(實驗需要刪除該行) #注意persistence_timeout的作用是保持連接 #開啟后,客戶端在一定時間內(50秒)始終訪問相同服務器protocol TCP????????????????????????#TCP協議real_server 192.168.1.100 80 { #設置后端web服務器的真實IP(實驗需要修改)weight 1 ???????????????? #設置權重為1TCP_CHECK {???????????????????? #對后臺real_server做健康檢查(實驗需要修改)connect_timeout 3 #健康檢查的超時時間3秒nb_get_retry 3 #健康檢查的重試次數3次delay_before_retry 3 #健康檢查的間隔時間3秒}}real_server 192.168.1.200 80 { #設置后端web服務器的真實IP(實驗需要修改)weight 2 ???????????????? #設置權重為2,權重可以根據需要修改TCP_CHECK {????????????????????????#對后臺real_server做健康檢查(實驗需要修改)connect_timeout 3 #健康檢查的超時時間3秒nb_get_retry 3 #健康檢查的重試次數3次delay_before_retry 3 #健康檢查的間隔時間3秒}} [root@proxy2 ~]# systemctl start keepalived [root@proxy2 ~]# ipvsadm -Ln #查看LVS規則 [root@proxy2 ~]# ip a s #查看VIP設置4.測試
curl http://192.168.1.15 客戶端使用curl命令反復連接http://192.168.1.15,查看訪問的頁面是否會輪詢到不同的后端真實服務器。總結
以上是生活随笔為你收集整理的高可用keepalived实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LVS的运用
- 下一篇: HAProxy负载平衡集群实例