LVS DR模式 负载均衡服务搭建
LVS 負(fù)載均衡
????最近在研究服務(wù)器負(fù)載均衡,閱讀了網(wǎng)上的一些資料,發(fā)現(xiàn)主要的軟件負(fù)載均衡方案有nginx(針對(duì)HTTP服務(wù)的負(fù)載均衡),LVS(針對(duì)IP層,MAC層的負(fù)載均衡)。LVS模式工作在網(wǎng)絡(luò)層,且由內(nèi)核實(shí)現(xiàn)負(fù)載轉(zhuǎn)發(fā),效率要比nginx高。?
????LVS負(fù)載均衡包含三種模式:?
1. NAT模式(類(lèi)似路由器,實(shí)現(xiàn)外網(wǎng)內(nèi)網(wǎng)地址映射,負(fù)載均衡服務(wù)器修改請(qǐng)求包的源以及目的MAC地址和IP地址,發(fā)送給實(shí)際服務(wù)器;負(fù)載均衡服務(wù)器,修改響應(yīng)包的源以及目的MAC地址和IP地址,發(fā)送給客戶(hù)端。請(qǐng)求和響應(yīng)報(bào)文都需要經(jīng)過(guò)負(fù)載均衡服務(wù)器)?
2. TUN模式(IP隧道,負(fù)載均衡服務(wù)器將外網(wǎng)傳來(lái)的數(shù)據(jù)包封裝在IP隧道中,傳給實(shí)際服務(wù)器。實(shí)際服務(wù)器的響應(yīng)直接發(fā)給客戶(hù)端,而不需要經(jīng)過(guò)負(fù)載均衡服務(wù)器。)?
3. DR模式(負(fù)載均衡服務(wù)器和后端的實(shí)際服務(wù)器擁有相同的虛擬IP地址,負(fù)載均衡服務(wù)器收到響應(yīng)包后,修改目的MAC地址發(fā)給實(shí)際服務(wù)器,實(shí)際服務(wù)器將響應(yīng)包直接發(fā)給客戶(hù)端,不需要經(jīng)過(guò)負(fù)載均衡服務(wù)器)
搭建 LVS DR模式負(fù)載均衡服務(wù)
????連接示意圖如下:
????其中,負(fù)載均衡服務(wù)器的IP地址為 10.10.10.30/24 和 10.10.10.22/32(該IP地址是用戶(hù)訪(fǎng)問(wèn)的IP地址), Real Server 1的IP地址為10.10.10.31/24, Real Server 2的IP地址為10.10.10.32/24,三者連接在同一個(gè)局域網(wǎng)中,且 RS1和 RS2的虛擬IP地址(可以在lo或者lo:0上設(shè)置該IP地址,即本地環(huán)回,這樣該虛擬IP只對(duì)該機(jī)器本身可見(jiàn),不會(huì)暴露在外部造成IP沖突)都設(shè)為負(fù)載均衡服務(wù)器的IP地址 dev-1.?
????這樣外部訪(fǎng)問(wèn)10.10.10.22時(shí),會(huì)訪(fǎng)問(wèn)到負(fù)載均衡服務(wù)器,而負(fù)載均衡服務(wù)器選擇某個(gè)實(shí)際服務(wù)器,比如RS1,然后將包的目的MAC地址修改為RS1的MAC地址,在將包送到局域網(wǎng)上。此時(shí)對(duì)于請(qǐng)求數(shù)據(jù)包來(lái)說(shuō),目的MAC地址為RS1的MAC地址,因此RS1會(huì)收到,RS1發(fā)現(xiàn)包的目的MAC為自身,且目的IP地址為10.10.10.22,也是自身的一個(gè)IP,于是就認(rèn)為數(shù)據(jù)包是發(fā)到自己的,就開(kāi)始進(jìn)行處理。
一、安裝http服務(wù)?
1. 在RS1和RS2上分別安裝httpd服務(wù)?
2. 修改/etc/httpd/conf/httpd.conf 文件,進(jìn)行相應(yīng)的配置。?
3. 啟動(dòng)httpd服務(wù),并設(shè)置防火墻開(kāi)放80端口
二、在負(fù)載均衡服務(wù)器上安裝并配置ipvsadm?
1.?yum -y install ipvsadm?
2. 設(shè)置實(shí)際ip和虛擬IP
3. 設(shè)置負(fù)載轉(zhuǎn)發(fā)
方式一,通過(guò)ipvsadm
systemctl start ipvsadmipvsadm -Cipvsadm --set 30 5 60#vip on load balanceripvsadm -A -t 10.10.10.22:80 -s wrr -p 20 #接受轉(zhuǎn)發(fā)協(xié)議ipvsadm -a -t 10.10.10.22:80 -r 10.10.10.31:80 -g -w 1 #增加轉(zhuǎn)發(fā)目的地ipvsadm -a -t 10.10.10.22:80 -r 10.10.10.32:80 -g -w 1 #增加轉(zhuǎn)發(fā)目的地ipvsadm -L -n 方式二,通過(guò)keepalived vim /etc/keepalived/keepalived.conf 修改配置文件如下 global_defs { notification_email { skc361@163.com } notification_email_from sns-lvs@gmail.com smtp_server 192.168.80.1 smtp_connection_timeout 30router_id LVS_DEVEL # 設(shè)置lvs的id,在一個(gè)網(wǎng)絡(luò)內(nèi)應(yīng)該是唯一的 } vrrp_instance VI_1 { state MASTER #指定Keepalived的角色,MASTER為主,BACKUP為備 interface eth0 #指定Keepalived的角色,MASTER為主,BACKUP為備virtual_router_id 51 #虛擬路由編號(hào),主備要一致priority 100 #定義優(yōu)先級(jí),數(shù)字越大,優(yōu)先級(jí)越高,主DR必須大于備用DR advert_int 1 #檢查間隔,默認(rèn)為1sauthentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 10.10.10.22 #定義虛擬IP(VIP)為10.10.10.22,可多設(shè),每行一個(gè)} } # 定義對(duì)外提供服務(wù)的LVS的VIP以及port virtual_server 10.10.10.22 80 { delay_loop 6 # 設(shè)置健康檢查時(shí)間,單位是秒 lb_algo wrr # 設(shè)置負(fù)載調(diào)度的算法為wlc lb_kind DR # 設(shè)置LVS實(shí)現(xiàn)負(fù)載的機(jī)制,有NAT、TUN、DR三個(gè)模式 nat_mask 255.255.255.0 persistence_timeout 0 protocol TCP real_server 10.10.10.31 80 { # 指定real server1的IP地址weight 3 # 配置節(jié)點(diǎn)權(quán)值,數(shù)字越大權(quán)重越高 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 10.10.10.32 80 { # 指定real server2的IP地址weight 3 # 配置節(jié)點(diǎn)權(quán)值,數(shù)字越大權(quán)重越高 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }啟動(dòng)keepalived服務(wù) systemctl start keepalived三、設(shè)置實(shí)際服務(wù)器的網(wǎng)卡
ifconfig lo:0 10.10.10.22 netmask 255.255.255.255 #即設(shè)置虛擬IP地址,該IP地址綁定在環(huán)回網(wǎng)卡上,不會(huì)對(duì)外暴露?
四、設(shè)置實(shí)際服務(wù)器的內(nèi)核參數(shù)
[root@dev-2 lvs]#vim /etc/sysctl.conf[root@dev-2 lvs]# sysctl -pnet.ipv4.ip_forward = 1 #打開(kāi)路由轉(zhuǎn)發(fā)net.ipv4.conf.all.arp_ignore = 1 #只回答目的IP為本網(wǎng)口IP地址的arp包的請(qǐng)求net.ipv4.conf.all.arp_announce = 2 #對(duì)查詢(xún)目標(biāo)使用最適當(dāng)?shù)谋緳C(jī)地址net.ipv4.conf.lo.arp_ignore = 1net.ipv4.conf.lo.arp_announce = 2?
上面的 arp_ignore 和 arp_announce 參見(jiàn)?lvs arp設(shè)置
五、使用客戶(hù)端進(jìn)行訪(fǎng)問(wèn)?
????此時(shí)使用客戶(hù)端訪(fǎng)問(wèn)?http://10.10.10.22, 請(qǐng)求會(huì)被轉(zhuǎn)發(fā)到RS1或者RS2上。
問(wèn)題排查
????在搭建的時(shí)候,可能出現(xiàn)?http://10.10.10.22 無(wú)法訪(fǎng)問(wèn),即HTTP請(qǐng)求沒(méi)有被轉(zhuǎn)發(fā)的情況。這種情況可以從以下情況中進(jìn)行排查:?
1. 負(fù)載均衡服務(wù)器 防火墻是否關(guān)閉,或者是否允許80端口的tcp連接?
2. RS1 和 RS2 的http配置中是否設(shè)置 Listen 80(監(jiān)聽(tīng)本機(jī)上的所有地址,如果只監(jiān)聽(tīng)機(jī)器的網(wǎng)卡地址,而虛擬ip包就會(huì)被忽略)?
3. 如果在負(fù)載均衡服務(wù)器上沒(méi)有設(shè)置VIP,只有一個(gè)IP地址 10.10.10.22/24,這樣也可以配置出來(lái)。但是此時(shí),當(dāng)負(fù)載均衡服務(wù)器要向 10.10.10.31和10.10.10.32轉(zhuǎn)發(fā)時(shí),它需要知道它們的MAC地址,于是會(huì)發(fā)送ARP請(qǐng)求報(bào)文,當(dāng)RS1或RS2收到ARP,它進(jìn)行回復(fù)的時(shí)候發(fā)現(xiàn)請(qǐng)求報(bào)文的源IP為10.10.10.22 于是直接發(fā)到本機(jī)了,就不會(huì)回復(fù)給負(fù)載均衡服務(wù)器。于是負(fù)載均衡服務(wù)器就沒(méi)法動(dòng)態(tài)獲知RS1和RS2的MAC地址。?
????此時(shí),只能手動(dòng)在負(fù)載均衡服務(wù)器上設(shè)置arp。 arp -s...?
而且這樣做也會(huì)導(dǎo)致從負(fù)載均衡服務(wù)器上不能直接訪(fǎng)問(wèn)RS1/RS2,同樣RS1/RS2也不能直接訪(fǎng)問(wèn)負(fù)載均衡服務(wù)器。所以,還是需要在負(fù)載均衡服務(wù)器上配置一個(gè)eth0和一個(gè)虛擬IP eth0:0.
總結(jié)
以上是生活随笔為你收集整理的LVS DR模式 负载均衡服务搭建的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Xcode8注释有时会失效的解决方法
- 下一篇: Google发布用于Google Clo