下文給大家?guī)鞮VS+Keepalived應(yīng)該如何實(shí)現(xiàn)高可用負(fù)載均衡,希望能夠給大家在實(shí)際運(yùn)用中帶來一定的幫助,負(fù)載均衡涉及的東西比較多,理論也不多,網(wǎng)上有很多書籍,今天我們就用創(chuàng)新互聯(lián)在行業(yè)內(nèi)累計(jì)的經(jīng)驗(yàn)來做一個(gè)解答。
創(chuàng)新互聯(lián)堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的登封網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
用LVS+Keepalived實(shí)現(xiàn)高可用負(fù)載均衡,簡(jiǎn)單來說就是由LVS提供負(fù)載均衡,keepalived通過對(duì)rs進(jìn)行健康檢查、對(duì)主備機(jī)(director)進(jìn)行故障自動(dòng)切換,實(shí)現(xiàn)高可用。
1. LVS NAT模式配置
準(zhǔn)備三臺(tái)云服務(wù)器,一臺(tái)director, 兩臺(tái)real server
dr1: 外網(wǎng)ip 192.168.75.130,內(nèi)網(wǎng)ip 10.1.1.10
兩臺(tái)real server
rs1: 內(nèi)網(wǎng)ip 10.1.1.11
rs2: 內(nèi)網(wǎng)ip 10.1.1.12
兩臺(tái)real server的內(nèi)網(wǎng)網(wǎng)關(guān)設(shè)置為dr1的內(nèi)網(wǎng)ip 10.1.1.10
兩個(gè)real server上都安裝apache或者nginx(詳細(xì)安裝方法請(qǐng)參考之前的LAMP環(huán)境搭建)
dr1上安裝ipvsadm
yum install -y ipvsadm
vi /usr/local/sbin/lvs_nat.sh
增加
#! /bin/bash
# director 服務(wù)器上開啟路由轉(zhuǎn)發(fā)功能:
echo 1 > /proc/sys/net/ipv4/ip_forward
# 關(guān)閉icmp的重定向
echo 0 > /proc/sys/net/ipv4/conf/all/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/default/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth0/send_redirects
echo 0 > /proc/sys/net/ipv4/conf/eth3/send_redirects
# director 設(shè)置nat防火墻
iptables -t nat -F
iptables -t nat -X
iptables -t nat -A POSTROUTING -s 10.1.1.0/24 -j MASQUERADE
# director設(shè)置ipvsadm
IPVSADM='/sbin/ipvsadm'
$IPVSADM -C
$IPVSADM -A -t 192.168.75.130:80 -s wrr
$IPVSADM -a -t 192.168.75.130:80 -r 10.1.1.11:80 -m -w 1
$IPVSADM -a -t 192.168.75.130:80 -r 10.1.1.12:80 -m -w 1
運(yùn)行腳本
/bin/bash /usr/local/sbin/lvs_nat.sh
通過瀏覽器測(cè)試兩臺(tái)機(jī)器上的web內(nèi)容,為了區(qū)分開,我們可以把a(bǔ)pache的默認(rèn)頁修改一下:
rs1上: echo "<html><body><h3>This is web1!</h3></body></html>" > /usr/local/apache2/htdocs/index.html
rs2上: echo "<html><body><h3>This is web2!</h3></body></html>" > /usr/local/apache2/htdocs/index.html
找一臺(tái)電腦測(cè)試:
[root@local ~]# curl 192.168.75.130
<html><body><h3>This is web1!</h3></body></html>
[root@local ~]# curl 192.168.75.130
<html><body><h3>This is web2!</h3></body></html>
[root@local ~]# curl 192.168.75.130
<html><body><h3>This is web1!</h3></body></html>
[root@local ~]# curl 192.168.75.130
<html><body><h3>This is web2!</h3></body></html>
在dr1上查看當(dāng)前連接情況
[root@dr1 ~]# 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.75.130:80 wrr
-> 10.1.1.11:80 Masq 1 0 2
-> 10.1.1.12:80 Masq 1 0 2
2. LVS DR模式配置
準(zhǔn)備三臺(tái)服務(wù)器:
dr1
eth0 192.168.75.130
vip eth0:0: 192.168.75.100
rs1
eth0 rip: 192.168.75.131
vip lo:0: 192.168.75.100
rs2
eth0 rip: 192.168.75.132
vip lo:0: 192.168.75.100
在dr1上操作
vi /usr/local/sbin/lvs_dr.sh
增加
#! /bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/sbin/ipvsadm
vip=192.168.75.100
rs1=192.168.75.131
rs2=192.168.31.132
ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev eth0:0
$ipv -C
$ipv -A -t $vip:80 -s wrr
$ipv -a -t $vip:80 -r $rs1:80 -g -w 1
$ipv -a -t $vip:80 -r $rs2:80 -g -w 1
兩臺(tái)rs上:
vi /usr/local/sbin/lvs_dr_rs.sh
增加
#! /bin/bash
vip=192.168.75.100
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
然后dr1上執(zhí)行
bash /usr/local/sbin/lvs_dr.sh
兩臺(tái)rs上執(zhí)行
bash /usr/local/sbin/lvs_dr_rs.sh
找一臺(tái)電腦測(cè)試:
[root@local ~]# curl 192.168.75.100
<html><body><h3>This is web2!</h3></body></html>
[root@local ~]# curl 192.168.75.100
<html><body><h3>This is web1!</h3></body></html>
[root@local ~]# curl 192.168.75.100
<html><body><h3>This is web2!</h3></body></html>
[root@local ~]# curl 192.168.75.100
<html><body><h3>This is web1!</h3></body></html>
在dr1上查看當(dāng)前連接情況
[root@dr1 ~]# 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.75.100:80 wrr
-> 192.168.75.131:80 Route 1 0 2
-> 192.168.75.132:80 Route 1 0 2
3. LVS主要的調(diào)度算法
1:輪詢算法(RR)就是按依次循環(huán)的方式將請(qǐng)求調(diào)度到不同的服務(wù)器上,該算法最大的特點(diǎn)就是實(shí)現(xiàn)簡(jiǎn)單。輪詢算法假設(shè)所有的服務(wù)器處理請(qǐng)求的能力都是一樣的,調(diào)度器會(huì)將所有的請(qǐng)求平均分配給每個(gè)真實(shí)服務(wù)器。
2:加權(quán)輪詢算法(WRR)主要是對(duì)輪詢算法的一種優(yōu)化與補(bǔ)充,LVS會(huì)考慮每臺(tái)服務(wù)器的性能,并給每臺(tái)服務(wù)器添加一個(gè)權(quán)值,如果服務(wù)器A的權(quán)值為1,服務(wù)器B的權(quán)值為2,則調(diào)度到服務(wù)器B的請(qǐng)求會(huì)是服務(wù)器A的兩倍。權(quán)值越高的服務(wù)器,處理的請(qǐng)求越多。
3:最小連接調(diào)度算法(LC)將把請(qǐng)求調(diào)度到連續(xù)數(shù)量最小的服務(wù)器上。
4:加權(quán)最小連接算法(WLC)則是給每臺(tái)服務(wù)器一個(gè)權(quán)值,調(diào)度器會(huì)盡可能保持服務(wù)器連接數(shù)量與權(quán)值之間的平衡。
5:基于局部性的最少連接調(diào)度算法(lblc)是請(qǐng)求數(shù)據(jù)包的目標(biāo)IP地址的一種調(diào)度算法,該算法先根據(jù)請(qǐng)求的目標(biāo)IP地址尋找最近的該目標(biāo)IP地址所有使用的服務(wù)器,如果這臺(tái)服務(wù)器依然可用,并且用能力處理該請(qǐng)求,調(diào)度器會(huì)盡量選擇相同的服務(wù)器,否則會(huì)繼續(xù)選擇其他可行的服務(wù)器。
6:帶復(fù)雜的基于局部性最少的連接算法(lblcr)激勵(lì)的不是一個(gè)目標(biāo)IP與一臺(tái)服務(wù)器之間的連接記錄,他會(huì)維護(hù)一個(gè)目標(biāo)IP到一組服務(wù)器之間的映射關(guān)系,防止單點(diǎn)服務(wù)器負(fù)責(zé)過高。
7:目標(biāo)地址散列調(diào)度算法(DH)也是根據(jù)目標(biāo)IP地址通過散列函數(shù)將目標(biāo)IP與服務(wù)器建立映射關(guān)系,出現(xiàn)服務(wù)器不可用或負(fù)載過高的情況下,發(fā)往該目標(biāo)IP的請(qǐng)求會(huì)固定發(fā)給該服務(wù)器。
8:源地址散列調(diào)度算法(SH)與目標(biāo)地址散列調(diào)度算法類似,但它是根據(jù)源地址散列算法進(jìn)行靜態(tài)分配固定的服務(wù)器資源。
4. LVS + keepalived實(shí)現(xiàn)高可用負(fù)載均衡(DR模式)
前面lvs已經(jīng)成功實(shí)現(xiàn)了負(fù)載均衡,如果某臺(tái)real server發(fā)生故障該怎么辦呢?
這時(shí)就用到了keepalived,它可以對(duì)后端服務(wù)器進(jìn)行健康檢查,保證了后端服務(wù)器的高可用;同時(shí),keepalived還使用了VRRP協(xié)議保證了主備機(jī)(Director)之間的高可用。
下面我們就開始配置LVS+keepalived
在剛才“LVS DR模式配置”的基礎(chǔ)上增加一臺(tái)備用director(dr2)
清除之前的配置,在dr1上執(zhí)行
ipvsadm -C
ifconfig eth0:0down
yum install -y keepalived
安裝好后,編輯配置文件
vi /etc/keepalived/keepalived.conf
清空原文,加入如下內(nèi)容:
vrrp_instance VI_1 {
state MASTER #備用服務(wù)器上為 BACKUP
interface eth0
virtual_router_id 51
priority 100 #備用服務(wù)器上為90
advert_int 1
authentication {
auth_type PASS
auth_pass 1234
}
virtual_ipaddress {
192.168.75.100
}
}
virtual_server 192.168.75.100 80 {
delay_loop 6 #(每隔10秒查詢r(jià)ealserver狀態(tài))
lb_algo wlc #(lvs 算法)
lb_kind DR #(Direct Route)
persistence_timeout 60 #(同一IP的連接60秒內(nèi)被分配到同一臺(tái)realserver)
protocol TCP #(用TCP協(xié)議檢查realserver狀態(tài))
real_server 192.168.75.131 80 {
weight 100 #(權(quán)重)
TCP_CHECK {
connect_timeout 10 #(10秒無響應(yīng)超時(shí))
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.75.132 80 {
weight 100
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
在dr2上執(zhí)行
yum install -y keepalived
yum install -y ipvsadm
把dr1上的配置文拷貝過來
scp 192.168.75.130:/etc/keepalived/keepalived.conf /etc/keepalived/keepalived.conf
vi /etc/keepalived/keepalived.conf
從director的配置文件只需要修改
state MASTER -> state BACKUP
priority 100 -> priority 90
配置完keepalived后,需要開啟端口轉(zhuǎn)發(fā)(主從都要做):
echo 1 > /proc/sys/net/ipv4/ip_forward
然后,兩個(gè)rs上執(zhí)行 /usr/local/sbin/lvs_dr_rs.sh 腳本
最后,分別在兩個(gè)director上啟動(dòng)keepalived服務(wù),先主后從
/etc/init.d/keepalived start
注:?jiǎn)?dòng)keepalived服務(wù)會(huì)自動(dòng)生成vip和ipvsadm規(guī)則,不需要再去執(zhí)行上面提到的/usr/local/sbin/lvs_dr.sh 腳本。
測(cè)試
找一臺(tái)電腦用crul測(cè)試:
[root@local ~]# curl 192.168.75.100
<html><body><h3>This is web2!</h3></body></html>
[root@local ~]# curl 192.168.75.100
<html><body><h3>This is web1!</h3></body></html>
[root@local ~]# curl 192.168.75.100
<html><body><h3>This is web2!</h3></body></html>
[root@local ~]# curl 192.168.75.100
<html><body><h3>This is web1!</h3></body></html>
模擬主director出現(xiàn)故障:
把主director上的keepalived服務(wù)停掉
[root@dr1 ~]# /etc/init.d/keepalived stop
停止 keepalived: [確定]
在從director上查看日志
[root@dr2 ~]# tail -f /var/log/messages
May 18 12:10:56 dr2 Keepalived_vrrp[1641]: VRRP_Instance(VI_1) Transition to MASTER STATE
May 18 12:10:57 dr2 Keepalived_vrrp[1641]: VRRP_Instance(VI_1) Entering MASTER STATE
May 18 12:10:57 dr2 Keepalived_vrrp[1641]: VRRP_Instance(VI_1) setting protocol VIPs.
May 18 12:10:57 dr2 Keepalived_vrrp[1641]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.75.100
May 18 12:10:57 dr2 Keepalived_healthcheckers[1640]: Netlink reflector reports IP 192.168.75.100 added
May 18 12:11:02 dr2 Keepalived_vrrp[1641]: VRRP_Instance(VI_1) Sending gratuitous ARPs on eth0 for 192.168.75.100
已經(jīng)成功切換到從節(jié)點(diǎn)上
模擬real server出現(xiàn)故障:
把rs2上的httpd服務(wù)停掉
[root@rs2 ~]# /etc/init.d/httpd stop
找一臺(tái)電腦用crul測(cè)試
[root@local ~]# curl 192.168.75.100
<html><body><h3>This is web1!</h3></body></html>
[root@local ~]# curl 192.168.75.100
<html><body><h3>This is web1!</h3></body></html>
[root@local ~]# curl 192.168.75.100
<html><body><h3>This is web1!</h3></body></html>
[root@local ~]# curl 192.168.75.100
<html><body><h3>This is web1!</h3></body></html>
只有rs1可以訪問到,rs2已被移除
看了以上關(guān)于LVS+Keepalived應(yīng)該如何實(shí)現(xiàn)高可用負(fù)載均衡,如果大家還有什么地方需要了解的可以在創(chuàng)新互聯(lián)行業(yè)資訊里查找自己感興趣的或者找我們的專業(yè)技術(shù)工程師解答的,創(chuàng)新互聯(lián)技術(shù)工程師在行業(yè)內(nèi)擁有十幾年的經(jīng)驗(yàn)了。
網(wǎng)站名稱:LVS+Keepalived應(yīng)該如何實(shí)現(xiàn)高可用負(fù)載均衡
標(biāo)題路徑:http://chinadenli.net/article24/jsijje.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站改版、建站公司、外貿(mào)網(wǎng)站建設(shè)、服務(wù)器托管、品牌網(wǎng)站設(shè)計(jì)、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
移動(dòng)網(wǎng)站建設(shè)知識(shí)