背景
上篇講了LVS DR模式的負載均衡模式搭建革半,而負載均衡可以說就是高并發(fā)的主要解決方案,那高可用呢阅爽?這就是今天要玩的真竖。
關(guān)于keepalived
keepalived的基礎(chǔ)是VRRP協(xié)議,全稱Virtual Router Redundancy Protocol详幽,即虛擬路由冗余協(xié)議筛欢。
虛擬路由冗余協(xié)議,所謂冗余妒潭,那肯定需要有多臺機器悴能。該協(xié)議將多臺相同功能的路由器當成一個路由器組揣钦,組里包含一個master和多個backup雳灾,對外提供服務的VIP配置在master上。工作時冯凹,master發(fā)送組播谎亩,可理解為心跳。當backup收不到vrrp包就認為master服務不可用宇姚,此時其余backup根據(jù)VRRP的優(yōu)先級選舉master匈庭,并將VIP配置到該備機上,從而保證路由器的高可用浑劳。
keepalived有三個核心模塊阱持,分別是core、check和vrrp魔熏,
core模塊為keepalived的核心衷咽,負責主進程的啟動、維護以及全局配置文件的加載和解析
check負責后端機器的健康檢查蒜绽,包括常見的各種健康檢查方式
vrrp模塊即VRRP協(xié)議的實現(xiàn)镶骗。
keepalived主從配置
所謂主從配置,也就是說同一時刻只有一臺機器在工作躲雅,其余機器當做是備機鼎姊,不工作。
1相赁、環(huán)境準備
機器? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?作用
192.168.0.100? ? ? LVS調(diào)度器對外服務IP相寇,同時也是LVS主機
192.168.0.101? ? ? LVS備機
192.168.0.200? ? ? RIP,后端web服務器之一
192.168.0.300? ? ? RIP钮科,后端web服務器之二
2唤衫、后端web服務器,即RS配置
該部分配置參考負載均衡——LVS DR模式中的**《后端RS配置》**進行操作跺嗽,主要是虛ip的配置以及系統(tǒng)參數(shù)的配置战授。
當然页藻,一般這部分的操作我們都會寫成腳本。
3植兰、LVS主機配置
首先安裝keepalived份帐,
yum install -y keepalived
keepalived的配置文件路徑是/etc/keepalived/keepalived.conf,對于主LVS楣导,做如下配置废境,
! Configuration File for keepalived
global_defs {
? router_id LVS_1? ? ? ? ? ? ? ? ? ? ? #機器ID,用于區(qū)分機器設備
}
vrrp_instance VI_1 {? ? ? ? ? ? ? ? ? ? #LVS集群實例筒繁,可以配置多個
? ? state MASTER ? ? ? ? #MASTER表示這臺是主LVS噩凹,備機則是BACKUP
? ? interface eth0 ? ? ? ? ? ? #對外IP的網(wǎng)卡名稱
? ? virtual_router_id 51? ? ? ? ? ? ? ? #虛擬路由ID
? ? priority 100 ? ? ? ? ? ? #優(yōu)先級指數(shù),主機要比備機高
? ? advert_int 1? ? ? ? ? ? ? ? ? ? ? ? #vrrp通告的時間間隔毡咏,即組播發(fā)送時間間隔
? ? authentication {? ? ? ? #vrrp組鑒權(quán)認證驮宴,VRRPv2已經(jīng)不能使用
? ? ? ? auth_type PASS ? ? ? ? #認證方式,密碼
? ? ? ? auth_pass 1111 ? ? ? ? ? ? #密碼呕缭,最多只接受前8位字符堵泽,集群內(nèi)所有機器要設置一致
? ? }
? ? virtual_ipaddress {? ? ? ? ? ? ? ? ? #對外提供服務的虛擬IP,也就是用戶訪問的IP
? ? ? ? 192.168.0.100?
? ? }
}
virtual_server 192.168.0.100 80 {? #虛擬IP后端配置
? ? delay_loop 2 ? ? ? ? #后端健康檢查時間間隔s
? ? lb_algo rr ? ? ? ? #負載均衡算法恢总,rr|wrr|lc|wlc|lblc|sh|dh可選
? ? lb_kind DR? ? ? ? ? ? ? ? ? ? ? ? ? #表示LVS DR模式
? ? persistence_timeout 0? ? ? ? ? ? ? ? #連接保持時間迎罗,即同個IP在設置時間內(nèi)訪問同個后端負載,我們不開啟片仿,否則不好看到負載均衡效果
? ? protocol TCP
? ? real_server 192.168.0.200 80 {? ? ? #后端RS1
? ? ? ? weight 1? ? ? ? ? ? ? ? ? ? ? ? #輪詢權(quán)重
? ? ? ? TCP_CHECK {? ? ? ? ? ? ? ? ? ? ? #后端健康檢查方式? ? ? ? ? ?
? ? ? ? ? ? connect_timeout 1? ? ? ? ? ? #連接超時時間s纹安,根據(jù)網(wǎng)絡狀況設置
? ? ? ? ? ? retry 1? ? ? ? ? ? ? ? ? ? ? #重試次數(shù),達到重試次數(shù)仍失敗砂豌,后端將被從服務池中移除
? ? ? ? ? ? delay_before_retry 1? ? ? ? #重試時間間隔s
? ? ? ? ? ? connect_port 80? ? ? ? ? ? ? #檢測端口
? ? ? ? }
? ? }
? ? real_server 192.168.0.300 80 { #后端RS2
? ? ? ? weight 1
? ? ? ? TCP_CHECK {? ? ? ? ? ? ? ? ? ?
? ? ? ? ? ? connect_timeout 1?
? ? ? ? ? ? retry 1
? ? ? ? ? ? delay_before_retry 1
? ? ? ? ? ? connect_port 80
? ? ? ? }
? ? }
}
接著啟動keepalived服務史翘,
systemctl start keepalived
然后我們就能查看到我們配置的負載均衡策略胸囱,
[root@CentOS-7-2 ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
? -> RemoteAddress:Port? ? ? ? ? Forward Weight ActiveConn InActConn
TCP? 192.168.0.100:80 rr
? -> 192.168.0.200:80? ? ? ? ? ? Route? 1? ? ? 0? ? ? ? ? 0? ? ? ?
? -> 192.168.0.300:80? ? ? ? ? ? Route? 1? ? ? 0? ? ? ? ? 0
同時,出口網(wǎng)卡eth0上也能看到我們配置的虛擬ip,192.168.0.100上鞠,
[root@CentOS-7-2 ~]# ip a show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
? ? link/ether 00:0c:29:2e:74:89 brd ff:ff:ff:ff:ff:ff
? ? inet 192.168.0.140/24 brd 192.168.0.255 scope global eth0
? ? ? valid_lft forever preferred_lft forever
? ? inet 192.168.0.100/32 scope global eth0
? ? ? valid_lft forever preferred_lft forever
? ? inet6 fe80::20c:29ff:fe2e:7489/64 scope link
? ? ? valid_lft forever preferred_lft forever
4橘茉、配置備LVS
同樣需要安裝keepalived嘲驾,備機配置和主機的差別主要在于vrrp_instance段落绢要,
vrrp_instance VI_1 {? ? ? ? ? ? ? ? ? ? #LVS集群實例,可以配置多個
? ? state BACKUP #BACKUP表示這是個備機
? ? interface eth0 ? ? ? ? ? ? #對外IP的網(wǎng)卡名稱
? ? virtual_router_id 51? ? ? ? ? ? ? ? #虛擬路由ID
? ? priority 80 ? ? ? ? ? ? ? ? #優(yōu)先級指數(shù)蓄拣,備機要低于主機
? ? advert_int 1? ? ? ? ? ? ? ? ? ? ? ? #vrrp通告的時間間隔扬虚,即組播發(fā)送時間間隔
? ? authentication {? ? ? ? #vrrp組鑒權(quán)認證,VRRPv2已經(jīng)不能使用
? ? ? ? auth_type PASS ? ? ? ? #認證方式球恤,密碼
? ? ? ? auth_pass 1111 ? ? ? ? ? ? #密碼辜昵,最多只接受前8位字符,集群內(nèi)所有機器要設置一致
? ? }
? ? virtual_ipaddress {? ? ? ? ? ? ? ? ? #對外提供服務的虛擬IP咽斧,也就是用戶訪問的IP
? ? ? ? 192.168.0.100?
? ? }
}
其他段落均一致堪置,就不再粘貼躬存。
配置完,同樣需要啟動keepalived服務舀锨。
5岭洲、故障模擬
我們停掉注LVS上的keepalived服務,以模擬主LVS故障的情況坎匿,
systemctl stop keepalived
然后觀察LVS備機的/var/log/messages打印盾剩,
Jun 27 06:04:38 CentOS-7-3 Keepalived_vrrp[12710]: VRRP_Instance(VI_1) Transition to MASTER STATE
Jun 27 06:04:39 CentOS-7-3 Keepalived_vrrp[12710]: VRRP_Instance(VI_1) Entering MASTER STATE
Jun 27 06:04:39 CentOS-7-3 Keepalived_vrrp[12710]: VRRP_Instance(VI_1) setting protocol VIPs.
Jun 27 06:04:39 CentOS-7-3 Keepalived_vrrp[12710]: Sending gratuitous ARP on eth0 for 192.168.0.100
Jun 27 06:04:39 CentOS-7-3 avahi-daemon[506]: Registering new address record for 192.168.0.100 on eth0.IPv4.
Jun 27 06:04:39 CentOS-7-3 Keepalived_vrrp[12710]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on eth0 for 192.168.0.100
Jun 27 06:04:39 CentOS-7-3 Keepalived_vrrp[12710]: Sending gratuitous ARP on eth0 for 192.168.0.100
Jun 27 06:04:39 CentOS-7-3 Keepalived_vrrp[12710]: Sending gratuitous ARP on eth0 for 192.168.0.100
Jun 27 06:04:39 CentOS-7-3 Keepalived_vrrp[12710]: Sending gratuitous ARP on eth0 for 192.168.0.100
Jun 27 06:04:39 CentOS-7-3 Keepalived_vrrp[12710]: Sending gratuitous ARP on eth0 for 192.168.0.100
Jun 27 06:04:44 CentOS-7-3 Keepalived_vrrp[12710]: Sending gratuitous ARP on eth0 for 192.168.0.100
Jun 27 06:04:44 CentOS-7-3 Keepalived_vrrp[12710]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on eth0 for 192.168.0.100
Jun 27 06:04:44 CentOS-7-3 Keepalived_vrrp[12710]: Sending gratuitous ARP on eth0 for 192.168.0.100
Jun 27 06:04:44 CentOS-7-3 Keepalived_vrrp[12710]: Sending gratuitous ARP on eth0 for 192.168.0.100
Jun 27 06:04:44 CentOS-7-3 Keepalived_vrrp[12710]: Sending gratuitous ARP on eth0 for 192.168.0.100
Jun 27 06:04:44 CentOS-7-3 Keepalived_vrrp[12710]: Sending gratuitous ARP on eth0 for 192.168.0.100
可見,備機上位替蔬,成為了MASTER告私。再看備機的出口網(wǎng)卡信息,
[root@CentOS-7-3 ~]# ip a? show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
? ? link/ether 00:0c:29:36:e5:80 brd ff:ff:ff:ff:ff:ff
? ? inet 192.168.0.145/24 brd 192.168.0.255 scope global eth0
? ? ? valid_lft forever preferred_lft forever
? ? inet 192.168.0.100/32 scope global eth0
? ? ? valid_lft forever preferred_lft forever
? ? inet6 fe80::20c:29ff:fe36:e580/64 scope link
? ? ? valid_lft forever preferred_lft forever
可見承桥,VIP已經(jīng)漂移至備LVS驻粟,此時對外服務保持正常,實現(xiàn)了服務的高可用快毛,避免了單點故障格嗅。
但是番挺,主從模式也就意味著有一半的資源是沒有利用的唠帝,對于資源緊張的情況,甚是可惜玄柏,因此還可以采用雙主模式襟衰,也就是互為主備。