超詳細!一文帶你了解LVS四層負載均衡企業(yè)級實踐!

隨著時代發(fā)展,LVS在中小企業(yè)作為單獨Web集群負載均衡用的已經(jīng)極少了,更多被更簡單的Nginx替代。
在今天(2022年)的運維工作中,LVS更多的是放在Nginx7層負載前面做4層負載,目的是支持大并發(fā),另外,TCP負載依然有用武之地,例如MySQL集群負載、K8S集群負載,因此LVS是運維人員一個重要技術(shù)棧內(nèi)容。
01
LVS介紹
LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集群系統(tǒng),可以在Unix/Linux平臺下實現(xiàn)負載均衡集群功能。
該項目是中國國內(nèi)最早出現(xiàn)的自由軟件項目之一。
LVS的具體實現(xiàn)是IPVS內(nèi)核模塊,因此,可簡單將LVS和IPVS作為一個東西稱呼。早在Linux2.2內(nèi)核時,IPVS就已經(jīng)以內(nèi)核補丁的形式出現(xiàn)了。
從2.4.23版本開始,IPVS軟件就是合并到Linux內(nèi)核的常用版本的內(nèi)核補丁的集合。從2.4.24以后IPVS已經(jīng)成為Linux官方標準內(nèi)核的一部分。

從上圖我們看出,LVS負載均衡調(diào)度技術(shù)是在Linux內(nèi)核中實現(xiàn)的,因此,被稱之為Linux虛擬服務器(Linux Virtual Server)。
使用該軟件配置LVS時候,不能直接配置內(nèi)核中的ipvs,而需要使用ipvs的管理工具ipvsadm進行管理,當然還可通過Keepalived軟件直接管理ipvs,ipvs的基礎(chǔ)配置工具是ipvsadm。
真正實現(xiàn)調(diào)度的工具是IPVS,工作在Linux內(nèi)核層面。
LVS自帶的IPVS命令行管理工具是ipvsadm。
Keepalived可更好實現(xiàn)管理IPVS(配置文件)及負載均衡器高可用。
Red hat工具Piranha WEB管理實現(xiàn)調(diào)度的工具IPVS。
02
LVS的4種工作模式原理

LVS負載均衡器實支持下面四種負載工作模式:
網(wǎng)絡地址轉(zhuǎn)換模式,即NAT模式(Network Address Translation)
IP隧道模式,即TUN模式(IP Tunneling)
直接路由模式,即DR模式(Direct Routing)
完全網(wǎng)絡地址轉(zhuǎn)換模式,即FULLNAT模式(FULL Network Address Translation)
簡單說就是生活中收費站,大多數(shù)商業(yè)化IP負載均衡調(diào)度器產(chǎn)品都是使用NAT方法,如F5、Netscaler。
NAT模式是通過網(wǎng)絡地址轉(zhuǎn)換,由LB重寫請求報文目標地址,根據(jù)預設調(diào)度算法,將請求分派給后端真實服務器;服務器響應并處理,報文返回時必須要通過調(diào)度器,經(jīng)過調(diào)度器時報文的源地址被重寫,再返回給客戶完成整個負載調(diào)度過程。
NAT模式原理圖如下:


在這里需要指出:根據(jù)缺省的TCP/IP協(xié)議棧處理,請求報文的目標地址為VIP,響應報文的源地址肯定也為VIP,所以響應報文不需要作任何修改。
可以直接返回給客戶,客戶認為得到正常的服務,而不會知道究竟是哪一臺服務器處理的,所以LVS才叫虛擬服務器。
NAT模式原理圖如下:

DR模式是通過改寫請求報文的目標MAC地址,將請求發(fā)給真實服務器的,而真實服務器將響應后的處理結(jié)果直接返回給客戶端用戶。
同TUN技術(shù),DR技術(shù)可極大地提高集群系統(tǒng)伸縮性。但是這種DR模式?jīng)]有IP隧道的開銷,對集群中的真實服務器也沒有必須支持IP隧道協(xié)議的要求,但是要求調(diào)度器LB與真實服務器RS都有一塊網(wǎng)卡連在同一物理網(wǎng)段上,即必須在同一個局域網(wǎng)環(huán)境。
NAT模式原理圖如下:

FULLNAT模式是后期淘寶網(wǎng)開源的模式,LVS應用主要采用DR和NAT模式,但這2種模式要求RealServer和LVS在同一個vlan中,導致部署成本過高。
TUNNEL模式雖然可以跨vlan,但RealServer上需要部署ipip隧道模塊等,網(wǎng)絡拓撲上需要連通外網(wǎng),較復雜,不易運維。
為了解決上述問題,F(xiàn)ULLNAT誕生。
該模式和NAT模式區(qū)別是:數(shù)據(jù)包進入時,除了做DNAT,還做SNAT(用戶ip->內(nèi)網(wǎng)ip),數(shù)據(jù)包出時,除了做SNAT,還做DNAT(內(nèi)網(wǎng)ip–>用戶ip)從而實現(xiàn)LVS-RealServer間可以跨vlan通訊,RealServer只需要連接到內(nèi)網(wǎng)。
和NAT比,正常轉(zhuǎn)發(fā)性能下降<10%,但是LB可以多臺同時負載均衡工作;
FNAT模式原理圖如下:


03
LVS不同模式優(yōu)缺點

04
LVS調(diào)度算法
LVS的調(diào)度算法決定了如何在集群節(jié)點之間分布工作負荷。
當Director調(diào)度器收到來自客戶端計算機訪問它的VIP上的集群服務的入站請求時,Director調(diào)度器必須決定哪個集群節(jié)點應該處理請求。
Director調(diào)度器可用于做出該決定的調(diào)度方法分成兩個基本類別:
固定調(diào)度算法:rr,wrr,dh,sh
動態(tài)調(diào)度算法:wlc,lc,lblc,lblcr,SED,NQ
常用算法為rr,wrr,wlc,10種調(diào)度算法見如下:

05
LVS負載均衡安裝
yum?install?ipvsadm?-y
rpm?-qa?ipvsadm???#ipvsadm-1.27-8.el7.x86_64
modprobe?ip_vs????#把ipvs加入到內(nèi)核
lsmod|grep?ip_vs??#檢查內(nèi)核是否有ip_vs
uname?-r??????????#3.10.0-1160.31.1.el7.x86_64
ln?-s?/usr/src/kernels/3.10.0-1160.31.1.el7.x86_64?/usr/src/linux??#yum?install?kernel-devel?-y
ls?-l?/usr/src/
#lrwxrwxrwx??1?root?root?44?8月???1?18:04?linux?->?/usr/src/kernels/3.10.0-1160.31.1.el7.x86_6
特別注意:
1)ln命令鏈接路徑要和uname -r輸出結(jié)果內(nèi)核版本對應。
2)如果沒有/usr/src/kernels/xx路徑,可通過yum install kernel-devel -y安裝。06
實現(xiàn)MySQL負載均衡
1、配置LVS虛擬IP(VIP)
ifconfig?eth1:18?172.16.1.18/24?up?????#==>簡便寫法
#route add -host 172.16.1.18 dev eth1 ?#==添加主機路由,也可不加此行。
③配置后的檢查結(jié)果:
ifconfig?eth1:0
C:\Users\oldboy>ping?172.16.1.18
正在?Ping?172.16.1.18?具有?32?字節(jié)的數(shù)據(jù):
來自?172.16.1.18?的回復:?字節(jié)=32?時間<1ms?TTL=64
#提示:到這里說明VIP地址已經(jīng)配好,并可以使用了。
2、手工執(zhí)行配置添加LVS服務并增加兩臺RS ipvsadm
ipvsadm?-C?????????????????????????#<==????-C????????clear?the?whole?table
ipvsadm?--set?30?5?60??????????????#<==?--set?tcp?tcpfin?udp????????set?connection?timeout?values
ipvsadm?-A?-t?172.16.1.18:3306?-s?wrr???#--add-service???-A???add?virtual?service?with?options
#ipvsadm?-A?-t?172.16.1.18:3306?-s?wrr?-p?20
ipvsadm?-a?-t?172.16.1.18:3306?-r?172.16.1.51:3306?-g?-w?1?#dr模式
ipvsadm?-a?-t?172.16.1.18:3306?-r?172.16.1.7:3306?-g?-w?1
#?ipvsadm?-a|e?-t|u|f?service-address?-r?server-address?[options]
[root@lb4-01?~]#?ipvsadm?-Ln
IP?Virtual?Server?version?1.2.1?(size=4096)
Prot?LocalAddress:Port?Scheduler?Flags
??->?RemoteAddress:Port???????????Forward?Weight?ActiveConn?InActConn
TCP??172.16.1.18:3306?wrr
??->?172.16.1.7:3306??????????????Route???1??????0??????????0?????????
??->?172.16.1.51:3306?????????????Route???1??????0??????????0?
[root@lb4-01?~]#?ipvsadm?-Ln?--stats
IP?Virtual?Server?version?1.2.1?(size=4096)
Prot?LocalAddress:Port???????????????Conns???InPkts??OutPkts??InBytes?OutBytes
??->?RemoteAddress:Port
TCP??172.16.1.18:3306????????????????????0????????0????????0????????0????????0
??->?172.16.1.7:3306?????????????????????0????????0????????0????????0????????0
??->?172.16.1.51:3306????????????????????0????????0????????0????????0????????0
【刪除方法】
#ipvsadm?-D?-t?172.16.1.18:3306?-s?wrr
#ipvsadm?-D?-t?172.16.1.18:3306
#ipvsadm?-d?-t?172.16.1.18:3306?-r?172.16.1.18:3306?<==正確
#ipvsadm?-d?-t?172.16.1.18:3306?-r?172.16.1.18:3306?-g?-w?1?<==不好用
【相關(guān)參數(shù)說明】
[root@oldboy?~]#?ipvsadm?-help
#?--clear???????????-C????????clear?the?whole?table
#?--add-service?????-A????????add?virtual?service?with?options
#?--tcp-service?????-t?service-address???service-address?is?host[:port]
#?--scheduler???????-s?scheduler?????????one?of?rr|wrr|lc|wlc|lblc|lblcr|dh|sh|sed|nq,
#?--add-server????-a???????????????????add?real?server?with?options
#?--real-server???-r?server-address????server-addres?s?is?host?(and?port)
#?--masquerading??-m???????????????????masquerading?(NAT)
#?--gatewaying????-g???????????????????gatewaying?(direct?routing)?(default)
#?--delete-server?-d?????????delete?real?server
#?--persistent????-p?[timeout]?????????persistent?service(會話保持功能)
#?--set?tcp?tcpfin?udp????????set?connection?timeout?values
#?--weight???????-w?weight????????????capacity?of?real?server
#?--ipip?????????-i???????????????????ipip?encapsulation?(tunneling)
#提示:更多參數(shù)請ipvsadm -help自行查看
#⑤命令執(zhí)行過程及檢查配置的執(zhí)行結(jié)果
ipvsadm?-C?
ipvsadm?--set?30?5?60??
ipvsadm?-A?-t?172.16.1.18:3306?-s?wrr?-p?20
ipvsadm?-a?-t?172.16.1.18:3306?-r?172.16.1.51:3306?-g?-w?1
ipvsadm?-a?-t?172.16.1.18:3306?-r?172.16.1.7:3306?-g?-w?1???
ipvsadm?-L?-n?--sort
ipvsadm?-d?-t?172.16.1.18:3306?-r?172.16.1.51:80?#==>刪除測試
ipvsadm?-L?-n?--sort
ipvsadm?-a?-t?172.16.1.18:3306?-r?172.16.1.51:80?
ipvsadm?-L?-n?--sort
#此時,可以打開瀏覽器訪問http://172.16.1.18體驗結(jié)果,如果沒意外,是無法訪問的。
3、手工在RS端綁定lo網(wǎng)卡及抑制ARP
⑥每臺real?server端執(zhí)行
命令:
ifconfig?lo:18?172.16.1.18/32?up
#route?add?-host?172.16.1.18?dev?lo
#工作中寫到配置文件見后文
#centos7
ip?addr?add?172.16.1.18/32?dev?lo?label?lo:50
#route?add?-host?172.16.1.18?dev?lo
每個集群節(jié)點上的環(huán)回接口(lo)設備上被綁定VIP地址(其廣播地址是其本身,子網(wǎng)掩碼是255.255.255.255,采取可變長掩碼方式把網(wǎng)段劃分成只含一個主機地址的目的是避免ip地址沖突)允許LVS-DR集群中的集群節(jié)點接受發(fā)向該VIP地址的數(shù)據(jù)包,這會有一個非常嚴重的問題發(fā)生,集群內(nèi)部的真實服務器將嘗試回復來自正在請求VIP客戶端的ARP廣播,這樣所有的真實服務器都將聲稱自己擁有該VIP地址,這時客戶端將有可能直接發(fā)送請求數(shù)據(jù)包到某臺真實服務器上,從而破壞了DR集群的負載均衡策略。因此,必須要抑制所有真實服務器響應目標地址為VIP的ARP廣播,而把客戶端ARP廣播響應交給負載均衡器。
4、手工在RS端抑制ARP響應
⑦抑制ARP響應方法如下:
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
以RS1為例演示執(zhí)行過程如下:
ifconfig?lo:18?172.16.1.18?netmask?255.255.255.255?up
#route?add?-host?172.16.1.18?dev?lo
cat?/proc/sys/net/ipv4/conf/lo/arp_ignore
cat?/proc/sys/net/ipv4/conf/all/arp_ignore??
cat?/proc/sys/net/ipv4/conf/all/arp_announce?
cat?/proc/sys/net/ipv4/conf/lo/arp_announce????
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
#測試最終LVS對數(shù)據(jù)庫負載是否成功:
#采用web02測試:
#??phpmyadmin
#??mysql?測試成功
windows:navicat...需要vmware?映射
實際教學使用mysql客戶端測試,在web02上
yum?install?mariadb?-y
mysql?-ublog?-poldboy123?-h172.16.1.18?#18是VIP,用戶密碼為前面課程提前設置。
####停掉了51,發(fā)現(xiàn)連不了
lvs沒有健康檢查功能,51停掉了,仍然請求發(fā)給51,需要手工清理51
[root@lb4-01?~]#?ipvsadm?-Ln
IP?Virtual?Server?version?1.2.1?(size=4096)
Prot?LocalAddress:Port?Scheduler?Flags
??->?RemoteAddress:Port???????????Forward?Weight?ActiveConn?InActConn
TCP??172.16.1.18:3306?wrr?persistent?20
??->?172.16.1.7:3306??????????????Route???1??????0??????????0?????????
??->?172.16.1.51:3306?????????????Route???1??????0??????????4?????????
[root@lb4-01?~]#?ipvsadm?-d?-t?172.16.1.18:3306?-r?172.16.1.51:3306
[root@lb4-01?~]#?ipvsadm?-Ln
IP?Virtual?Server?version?1.2.1?(size=4096)
Prot?LocalAddress:Port?Scheduler?Flags
??->?RemoteAddress:Port???????????Forward?Weight?ActiveConn?InActConn
TCP??172.16.1.18:3306?wrr?persistent?20
??->?172.16.1.7:3306??????????????Route???1??????0??????????0???
重連成功,LVS的健康檢查要靠keepalved配合實現(xiàn),后文講
5、抑制ARP腳本實現(xiàn)
開發(fā)腳本配置LVS?RS真實服務器端
#!/bin/bash
#?Written?by?oldboy?([email protected])
#?QQ:31333741
#?description:?Config?realserver?lo?and?apply?noarp?
VIP=(
????????172.16.1.18
?????)
.?/etc/rc.d/init.d/functions
case?"1"?in
start)
????????for?((i=0;?i<`echo{#VIP[*]}`;?i++))
????????do
???????????interface="lo:`echo?{VIP[i]}|awk?-F?.?'{print?4}'`"
???????????/sbin/ifconfiginterface?{VIP[i]}?broadcast?{VIP[i]}?netmask?255.255.255.255?up
????????done
????????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
???????action?"Start?LVS?of?RearServer.by?old1boy"
????????;;
stop)
????????for?((i=0;?i<`echo?{#VIP[*]}`;?i++))
????????do
????????????interface="lo:`echo{VIP[i]}|awk?-F?.?'{print4}'`"
????????????/sbin/ifconfig?interface{VIP[i]}?broadcast{VIP[i]}?netmask?255.255.255.255?down
????????done
????????echo?"close?LVS?Directorserver"
????????if?[{#VIP[*]}?-eq?1];then
??????????echo?"0"?>/proc/sys/net/ipv4/conf/lo/arp_ignore
??????????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/all/arp_announce
????????fi
???????action?"Close?LVS?of?RearServer.by?old2boy"
????????;;
*)
????????echo?"Usage:?$0?{start|stop}"
????????exit?1
esac
#工作中可以將lo網(wǎng)卡綁定寫到配置文件:
cp?/etc/sysconfig/network-scripts/ifcfg-eth0?/etc/sysconfig/network-scripts/ifcfg-lo:18
[root@db01?network-scripts]#?cat?ifcfg-lo:18
TYPE="Ethernet"
PROXY_METHOD="none"
BROWSER_ONLY="no"
BOOTPROTO="none"
DEFROUTE="yes"
NAME="lo:18"
DEVICE="lo:18"
ONBOOT="yes"
IPADDR="172.16.1.18"
PREFIX="32
6、arp抑制技術(shù)參數(shù)說明
arp_ignore-?INTEGER
定義對目標地址為本地IP的ARP詢問不同的應答模式
0?-(默認值):?回應任何網(wǎng)絡接口上對任何本地IP地址的arp查詢請求。
1 -只回答目標IP地址是來訪網(wǎng)絡接口本地地址的ARP查詢請求。
2 -只回答目標IP地址是來訪網(wǎng)絡接口本地地址的ARP查詢請求,且來訪IP必須在該網(wǎng)絡接口的子網(wǎng)段內(nèi)。
3 -不回應該網(wǎng)絡界面的arp請求,而只對設置的唯一和連接地址做出回應。
4-7 -保留未使用。
8 -不回應所有(本地地址)的arp查詢。
arp_announce?-?INTEGER
對網(wǎng)絡接口上,本地IP地址的發(fā)出的,ARP回應,作出相應級別的限制:??
確定不同程度的限制,宣布對來自本地源IP地址發(fā)出Arp請求的接口
0?-(默認)?在任意網(wǎng)絡接口(eth0,eth1,lo)上的任何本地地址
1 -盡量避免不在該網(wǎng)絡接口子網(wǎng)段的本地地址做出arp回應. 當發(fā)起ARP請求的源IP地址是被設置應該經(jīng)由路由達到此網(wǎng)絡接口的時候很有用.此時會檢查來訪IP是否為所有接口上的子網(wǎng)段內(nèi)ip之一。如果該來訪IP不屬于各個網(wǎng)絡接口上的子網(wǎng)段內(nèi),那么將采用級別2的方式來進行處理.
2 -對查詢目標使用最適當?shù)谋镜氐刂?,在此模式下將忽略這個IP數(shù)據(jù)包的源地址并嘗試選擇能與該地址通信的本地地址,首要是選擇所有的網(wǎng)絡接口的子網(wǎng)中外出訪問子網(wǎng)中包含該目標IP地址的本地地址。如果沒有合適的地址被發(fā)現(xiàn),將選擇當前的發(fā)送網(wǎng)絡接口或其他的有可能接受到該ARP回應的網(wǎng)絡接口來進行發(fā)送.限制了使用本地的vip地址作為優(yōu)先的網(wǎng)絡接口07
實現(xiàn)MySQL高可用
1、實現(xiàn)LVS+keepalived db高可用
lb4-01配置:
[root@lb4-01?keepalived]#?cat?keepalived.conf
global_defs?{
???router_id?lb01
}
vrrp_instance?VI_2?{
????state?MASTER
????interface?eth1
????virtual_router_id?52
????priority?150
????advert_int?1
????authentication?{
????????auth_type?PASS
????????auth_pass?1111
????}
????virtual_ipaddress?{
??????172.16.1.18/24?dev?eth1?label?eth1:18
????}
}
#port?3306
##oldboy?service??virtual_server?
virtual_server?172.16.1.18?3306?{
????delay_loop?6????????????
????lb_algo?wrr????????????????
????lb_kind?DR
????persistence_timeout?20?????
????protocol?TCP???????
real_server?172.16.1.7?3306?{
????weight?1??????????????
????TCP_CHECK?{
????connect_timeout?5???????
????#nb_get_retry?3
????delay_before_retry?3
????connect_port?3306
????}
}
real_server?172.16.1.51?3306?{
????weight?1
????TCP_CHECK?{
????connect_timeout?5
???#?nb_get_retry?3
????delay_before_retry?3
????connect_port?3306
????}
??}
}
lb4-02配置:
[root@lb4-02?keepalived]#?cat?keepalived.conf
global_defs?{
???router_id?lb4-02
}
vrrp_instance?VI_2?{
????state?BACKUP
????interface?eth1
????virtual_router_id?52
????priority?50
????advert_int?1
????authentication?{
????????auth_type?PASS
????????auth_pass?1111
????}
????virtual_ipaddress?{
??????172.16.1.18/24?dev?eth1?label?eth1:18
????}
}
#port?3306
##oldboy?service??virtual_server?
virtual_server?172.16.1.18?3306?{
????delay_loop?6????????????
????lb_algo?wrr????????????????
????lb_kind?DR
????persistence_timeout?20?????
????protocol?TCP??????
real_server?172.16.1.7?3306?{
????weight?1??????????????
????TCP_CHECK?{
????connect_timeout?5???????
????#nb_get_retry?3
????delay_before_retry?3
????connect_port?3306
????}
}
real_server?172.16.1.51?3306?{
????weight?1
????TCP_CHECK?{
????connect_timeout?5
???#?nb_get_retry?3
????delay_before_retry?3
????connect_port?3306
????}
??}
}
重啟keep完成
08
Web4層負載及后端7層反代+節(jié)點
| L4+L7+WEB大規(guī)模web負載均衡
L4:
10.0.0.15 172.16.1.15 LVS調(diào)度器(Director) 對外提供服務的VIP為10.0.0.17
10.0.0.16 172.16.1.16 LVS調(diào)度器(Director) 對外提供服務的VIP為10.0.0.17
L7:
10.0.0.5 172.16.1.5 nginx lb01 測好了。
10.0.0.6 172.16.1.6 nginx lb02
10.0.0.7 172.16.1.7 RS1(真實服務器) web01
10.0.0.8 172.16.1.8 RS2(真實服務器) web02
1、測試節(jié)點可用性
[root@lb4-02?keepalived]#?curl?-H"host:www.etiantian.org"?172.16.1.7
web01
[root@lb4-02?keepalived]#?curl?-H"host:www.etiantian.org"?172.16.1.8
web02,老男孩Linux77最優(yōu)班級
remote_addr:?172.16.1.16
2、配置keepalived?lb4-01
[root@lb4-01?keepalived]#?cat?keepalived.conf
global_defs?{
???router_id?lb01
}
vrrp_instance?VI_1?{
????state?BACKUP
????interface?eth0
????virtual_router_id?53
????priority?50
????advert_int?1
????authentication?{
????????auth_type?PASS
????????auth_pass?1111
????}
????virtual_ipaddress?{
??????10.0.0.17/24?dev?eth0?label?eth0:17
????}
}
#web
##oldboy?service??virtual_server?
virtual_server?10.0.0.17?80?{
????delay_loop?6????????????
????lb_algo?wrr????????????????
????lb_kind?DR
????persistence_timeout?20?????
????protocol?TCP
real_server?10.0.0.5?80?{
????weight?1??????????????
????TCP_CHECK?{
????connect_timeout?5???????
????#nb_get_retry?3
????delay_before_retry?3
????connect_port?80
????}
}
real_server?10.0.0.6?80?{
????weight?1
????TCP_CHECK?{
????connect_timeout?5
???#?nb_get_retry?3
????delay_before_retry?3
????connect_port?80
????}
}
}
;===============================================
vrrp_instance?VI_2?{
????state?MASTER
????interface?eth1
????virtual_router_id?52
????priority?150
????advert_int?1
????authentication?{
????????auth_type?PASS
????????auth_pass?1111
????}
????virtual_ipaddress?{
??????172.16.1.18/24?dev?eth1?label?eth1:18
????}
}
#port?3306
##oldboy?service??virtual_server?
virtual_server?172.16.1.18?3306?{
????delay_loop?6????????????
????lb_algo?wrr????????????????
????lb_kind?DR
????persistence_timeout?20?????
????protocol?TCP?
????real_server?172.16.1.7?3306?{
????weight?1??????????????
????TCP_CHECK?{
????connect_timeout?5???????
????#nb_get_retry?3
????delay_before_retry?3
????connect_port?3306
????}
}
real_server?172.16.1.51?3306?{
????weight?1
????TCP_CHECK?{
????connect_timeout?5
???#?nb_get_retry?3
????delay_before_retry?3
????connect_port?3306
????}
??}
}
3、配置keepalived?lb4-02
[root@lb4-02?keepalived]#?cat?keepalived.conf
global_defs?{
???router_id?lb4-02
}
vrrp_instance?VI_1?{
????state?MASTER
????interface?eth0
????virtual_router_id?53
????priority?150
????advert_int?1
????authentication?{
????????auth_type?PASS
????????auth_pass?1111
????}
????virtual_ipaddress?{
??????10.0.0.17/24?dev?eth0?label?eth0:17
????}
}
#web
##oldboy?service??virtual_server?
virtual_server?10.0.0.17?80?{
????delay_loop?6????????????
????lb_algo?wrr????????????????
????lb_kind?DR
????persistence_timeout?20?????
????protocol?TCP????????????????
real_server?10.0.0.5?80?{
????weight?1??????????????
????TCP_CHECK?{
????connect_timeout?5???????
????#nb_get_retry?3
????delay_before_retry?3
????connect_port?80
????}
}
real_server?10.0.0.6?80?{
????weight?1
????TCP_CHECK?{
????connect_timeout?5
???#?nb_get_retry?3
????delay_before_retry?3
????connect_port?80
????}
}
}
vrrp_instance?VI_2?{
????state?BACKUP
????interface?eth1
????virtual_router_id?52
????priority?50
????advert_int?1
????authentication?{
????????auth_type?PASS
????????auth_pass?1111
????}
????virtual_ipaddress?{
??????172.16.1.18/24?dev?eth1?label?eth1:18
????}
}
#port?3306
##oldboy?service??virtual_server?
virtual_server?172.16.1.18?3306?{
????delay_loop?6????????????
????lb_algo?wrr????????????????
????lb_kind?DR
????persistence_timeout?20?????
????protocol?TCP
????real_server?172.16.1.7?3306?{
????weight?1??????????????
????TCP_CHECK?{
????connect_timeout?5???????
????#nb_get_retry?3
????delay_before_retry?3
????connect_port?3306
????}
}
real_server?172.16.1.51?3306?{
????weight?1
????TCP_CHECK?{
????connect_timeout?5
???#?nb_get_retry?3
????delay_before_retry?3
????connect_port?3306
????}
}
}
4、web節(jié)點分別(web01,web02)配置VIP綁定,及抑制ARP(腳本實現(xiàn))
[root@lb01?conf.d]#?mkdir?/server/scripts?-p
[root@lb01?conf.d]#?cd?/server/scripts/
[root@lb01?scripts]#?vim?ipvs.sh
#!/bin/bash
#?Written?by?oldboy?([email protected])
#?QQ:31333741
#?description:?Config?realserver?lo?and?apply?noarp?
VIP=(
????????10.0.0.17
?????)
.?/etc/rc.d/init.d/functions
case?"1"?in
start)
????????for?((i=0;?i<`echo{#VIP[*]}`;?i++))
????????do
???????????interface="lo:`echo?{VIP[i]}|awk?-F?.?'{print?4}'`"
???????????/sbin/ifconfiginterface?{VIP[i]}?broadcast?{VIP[i]}?netmask?255.255.255.255?up
????????done
????????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
???????????action?"Start?LVS?of?RearServer.by?old1boy"
????????;;
stop)
????????for?((i=0;?i<`echo?{#VIP[*]}`;?i++))
????????do
????????????interface="lo:`echo{VIP[i]}|awk?-F?.?'{print4}'`"
????????????/sbin/ifconfig?interface{VIP[i]}?broadcast{VIP[i]}?netmask?255.255.255.255?down
????????done
????????echo?"close?LVS?Directorserver"
????????if?[{#VIP[*]}?-eq?1];then
??????????echo?"0"?>/proc/sys/net/ipv4/conf/lo/arp_ignore
??????????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/all/arp_announce
????????fi
???????????action?"Close?LVS?of?RearServer.by?old2boy"
????????;;
*)
????????echo?"Usage:?$0?{start|stop}"
????????exit?1
esac
[root@lb01?scripts]#?sh?ipvs.sh?
Usage:?ipvs.sh?{start|stop}
[root@lb01?scripts]#?sh?ipvs.sh?start
Start?LVS?of?RearServer.by?old1boy?????????????????????????[??確定??]
ifconfig查看
09
LVS介紹獲取lvs+nginx+web前端用戶IP

轉(zhuǎn)自公眾號:運維基地
有收獲,點個在看?


