高可用服務(wù)之Keepalived高可用LVS集群
點(diǎn)擊上方藍(lán)色字體,選擇“標(biāo)星公眾號(hào)”
優(yōu)質(zhì)文章,第一時(shí)間送達(dá)
? 作者?|??Linux-1874
來源 |? urlify.cn/JN7vim
66套java從入門到精通實(shí)戰(zhàn)課程分享
我們知道一個(gè)服務(wù)通常是以一個(gè)套接字形式對(duì)外提供服務(wù),所謂套接字就是ip+端口;前面的博客中我們主要聊到了keepalived對(duì)ip地址的高可用,但通常對(duì)ip地址高可用沒有多大實(shí)質(zhì)的作用,重要的是我們高可用的ip地址后端對(duì)應(yīng)的服務(wù)才是根本,這一篇博客主要講怎么利用keepalived高可用LVS集群,生成ipvs規(guī)則,以及對(duì)LVS集群的rs做健康狀態(tài)檢測(cè);
環(huán)境說明
| 名稱 | ip地址 | 端口 |
| keepalived-node01(master) | 192.168.0.41 | \ |
| keepalived-node02(backup) | 192.168.0.42 | \ |
| LVS-RS1 | 192.168.0.43 | 80 |
| LVS-RS2 | 192.168.0.44 | 80 |
| VIP | 192.168.0.111 | 80 |
準(zhǔn)備LVS集群RS1和RS2
1、安裝webserver
1 |
|
提示:rs1和rs2上都要安裝nginx服務(wù),用于后端rs提供的服務(wù);
2、提供測(cè)試頁

3、啟動(dòng)rs1和rs2上的nginx服務(wù)

4、編寫修改內(nèi)核參數(shù),并配置vip給RS1和RS2的腳本

#/bin/bash
#
vip='192.168.0.111'
mask='255.255.255.255'
interface='lo:0'
?
case?$1?in
start)
????????echo?2?>?/proc/sys/net/ipv4/conf/all/arp_announce
????????echo?2?>?/proc/sys/net/ipv4/conf/lo/arp_announce
????????echo?1?>?/proc/sys/net/ipv4/conf/all/arp_ignore
????????echo?1?>?/proc/sys/net/ipv4/conf/lo/arp_ignore
????????ifconfig?$interface??$vip?netmask?$mask?broadcast?$vip?up
????????route?add?-host?$vip?dev?$interface
????????;;
stop)
????????ifconfig?$interface?down
????????echo?0?>/proc/sys/net/ipv4/conf/all/arp_announce
????????echo?0?>/proc/sys/net/ipv4/conf/lo/arp_announce
????????echo?0?>/proc/sys/net/ipv4/conf/all/arp_ignore
????????echo?0?>/proc/sys/net/ipv4/conf/lo/arp_ignore
????????;;
*)
????????echo?"Usage:bash?$0?start|stop"
????????exit?1
????????;;
esac
提示:以上腳本主要實(shí)現(xiàn)了兩個(gè)參數(shù),給定start參數(shù)就把對(duì)應(yīng)的內(nèi)核參數(shù)修改以后,并把vip配置到指定的接口;給stop參數(shù)就把vip從指定的端口上刪除,并還原內(nèi)核參數(shù)的設(shè)定;
在rs1和rs2上執(zhí)行設(shè)置內(nèi)核參數(shù)的腳本


提示:到此后端兩個(gè)RS的環(huán)境就準(zhǔn)備好了;
配置keepalived,生成lvs規(guī)則

完整的配置
[root@node01?~]#?cat?/etc/keepalived/keepalived.conf
!?Configuration?File?for?keepalived
global_defs?{
???notification_email?{
????????root@localhost
???}
???notification_email_from?node01_keepalived@localhost
???smtp_server?127.0.0.1
???smtp_connect_timeout?30
???router_id?node01
???vrrp_skip_check_adv_addr
???vrrp_strict
???vrrp_garp_interval?0
???vrrp_gna_interval?0
???vrrp_mcast_group4?224.0.12.132
}
vrrp_instance?VI_1?{
????state?MASTER
????interface?ens33
????virtual_router_id?51
????priority?100
????advert_int?1
????authentication?{
????????auth_type?PASS
????????auth_pass?12345678
????}
????virtual_ipaddress?{
????????192.168.0.111/24?brd?192.168.0.255?dev?ens33?label?ens33:1
????}
????notify_master?"/etc/keepalived/notify.sh?master"
????notify_backup?"/etc/keepalived/notify.sh?backup"
????notify_fault??"/etc/keepalived/notify.sh?fault"
}
virtual_server?192.168.0.111?80?{
????????delay_loop?3
????????lb_algo?wrr
????????lb_kind?DR
????????protocol?TCP
????????sorry_server?127.0.0.1?80
????????real_server?192.168.0.43?80?{
????????????????weight?1
????????????????nb_get_retry?2
????????????????delay_before_retry?2
????????????????connect_timeout?30
????????????????HTTP_GET?{
????????????????????url?{
????????????????????path?/index.html
????????????????????status_code?200
????????????????????}
????????????????}
????????}
????????real_server?192.168.0.44?80?{
????????????????weight?1
????????????????nb_get_retry?2
????????????????delay_before_retry?2
????????????????connect_timeout?30
????????????????HTTP_GET?{
????????????????????url?{
????????????????????path?/index.html
????????????????????status_code?200
????????????????????}
????????????????}
????????}
}
[root@node01?~]#
提示:virtual_server用于定義LVS對(duì)外集群ip地址和端口(vip),用大括號(hào)括起來,其中delay_loop用于指定對(duì)后端rs做健康狀態(tài)檢查的時(shí)間間隔;lb_algo/lvs_sched用于指定lvs的調(diào)度算法,常用的算法有rr,wrr,lc,wlc,lblc,sh,dh;lb_kind/lvs_method用于指定lvs集群的類型,常用的類型有DR,NAT,TUN,需注意這里的類型的值必須大寫,否則服務(wù)有異常;有關(guān)LVS集群類型的相關(guān)說明請(qǐng)參考https://www.cnblogs.com/qiuhom-1874/p/12327506.html;protocol用于指定4層協(xié)議,常用的4層協(xié)議有TCP ,UDP,SCTP,需注意這里的值必須大寫;sorry_server用于指定,當(dāng)后端RS都宕機(jī)情況下,臨時(shí)對(duì)用戶說sorry的服務(wù)器地址和端口;real_server:用來定義后端RS的相關(guān)配置,其中weight用于指定當(dāng)前rs的權(quán)重,nb_get_retry用指定對(duì)rs檢測(cè)的重試次數(shù),如果在指定的次數(shù)上都監(jiān)測(cè)失敗就標(biāo)記該RS為下線狀態(tài),并從當(dāng)前集群中下線;delay_before_retry用于指定重試之前延遲的時(shí)間;connect_timeout用于指定對(duì)rs檢測(cè)的超時(shí)時(shí)長(zhǎng);HTTP_GET 用于配置對(duì)rs的檢查方法,HTTP_GET表示應(yīng)用層http檢測(cè),其中path用于指定檢測(cè)到uri,status_code用于指定對(duì)指定URI檢測(cè)到狀態(tài)碼,通常為200;以上virtual_server的配置在node02上也是相同的配置;
安裝sorryserver,并配置測(cè)試頁面


啟動(dòng)keepalived

提示:到此基于keepalived高可用LVS集群就配置完成了;
驗(yàn)證:用瀏覽器對(duì)VIP訪問,看看是否能夠訪問到后端RS提供的頁面?

提示:我們用瀏覽器訪問VIP并沒有訪問到后端的rs提供的頁面;其中的原因是我們?cè)谂渲胟eepalived時(shí),開啟了嚴(yán)格遵守vrrp協(xié)議,所以啟動(dòng)keepalived它默認(rèn)會(huì)自動(dòng)生成iptables規(guī)則,禁止任何地址訪問VIP;

提示:解決辦法用iptables -F清空iptables規(guī)則;這種清空iptables規(guī)則的方式只是臨時(shí)的方式,重啟以后,或者vip飄逸后,對(duì)應(yīng)的規(guī)則又會(huì)生成,永久解決辦法是在keepalived的配置文件,禁用它自動(dòng)生成iptabels規(guī)則;

提示:在/etc/keepalived/keepalived.conf的global_defs中加上vrrp_iptables這個(gè)配置,這個(gè)配置表示禁用自動(dòng)生成iptables規(guī)則;當(dāng)然我們也可配置不嚴(yán)格遵守vrrp協(xié)議,把vrrp_strict去掉也行;選擇其中一種方式即可;
驗(yàn)證:重啟keepalived,看看對(duì)應(yīng)iptables規(guī)則是否還會(huì)生成?

提示:可以看到現(xiàn)在vip所在節(jié)點(diǎn)的iptables規(guī)則就沒有在自動(dòng)生成了,對(duì)于node02也是相同的配置,重啟keepalived即可解決自動(dòng)生成iptables規(guī)則的問題;
現(xiàn)在在用瀏覽器訪問vip,看看是否能夠訪問到后端RS提供的頁面?


提示:可以看到我們?cè)跒g覽器上訪問VIP是可以正常訪問到后端rs提供的頁面;
驗(yàn)證:把node01上的keepalived停掉,看看node02是否會(huì)自動(dòng)將vip配置上對(duì)應(yīng)的接口?用瀏覽器是否還會(huì)訪問到rs提供的頁面呢?

提示:可以看到當(dāng)node01的keepalived宕機(jī)以后,對(duì)應(yīng)vip會(huì)自動(dòng)飄逸到node02上去,并且在客戶端訪問VIP幾乎不受影響;
驗(yàn)證:在node01上查看ipvs規(guī)則,看看是否都生成了ipvs規(guī)則呢?

提示:可以看到node01上并沒有生成ipvs規(guī)則,原因是keepalived停掉了,對(duì)應(yīng)的ipvs規(guī)則也就刪除了;node02上的keepalived是活躍狀態(tài),所以對(duì)應(yīng)ipvs規(guī)則也是有keepalived自動(dòng)生成;
驗(yàn)證:把rs1的web服務(wù)停掉,看看keepalived是否會(huì)檢測(cè)到rs1不再線,從而把rs1自動(dòng)從集群踢出去呢?

提示:可以看到當(dāng)rs1故障以后,keepalived會(huì)檢測(cè)到rs1故障,然后把rs1從集群中提出去,所以我們?cè)趇pvs規(guī)則表中就沒有rs1;
驗(yàn)證:把rs2停掉,看看對(duì)應(yīng)的sorryserver是否會(huì)被激活?

提示:可以看到把rs2停掉以后,對(duì)應(yīng)ipvs規(guī)則表中就沒有RS2,并且它會(huì)把我們之前配置的sorryserver 的地址和端口配置上;
驗(yàn)證:用瀏覽器訪問VIP看看對(duì)應(yīng)相應(yīng)的內(nèi)容是否是vip所在節(jié)點(diǎn)的sorryserver提供的頁面呢?

提示:可以看到當(dāng)rs都宕機(jī)以后,再次訪問VIP就會(huì)響應(yīng)我們之前在配置文件中提供的sorryserver的頁面;
驗(yàn)證:?jiǎn)?dòng)rs1或rs2看看對(duì)應(yīng)sorryserver是否會(huì)下線呢?

提示:可以看到當(dāng)rs2恢復(fù)以后,對(duì)應(yīng)的sorryserver就從集群下線;
到此基于keepalived高可用LVS集群的配置,測(cè)試就結(jié)束了;


??? ?
感謝點(diǎn)贊支持下哈?
