1. 程式人生 > >LVS DR模式部署

LVS DR模式部署

lvs dr linux 集群

環境

? 三臺機器,系統:centos7.3
? 分發器,也叫調度器(簡寫為dr)
? 172.16.22.220

? rs1
? 172.16.22.221

? rs2
? 172.16.22.222

? vip
? 172.16.22.219

dr

vim /usr/local/sbin/lvs_dr.sh

#!/bin/bash
echo 1 > /proc/sys/net/ipv4/ip_forward
ipv=/usr/sbin/ipvsadm
vip=172.16.22.219
rs1=172.16.22.221
rs2=172.16.22.222
#註意這裏的網卡名字
ifconfig eth0:2 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip dev eth0:2
$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
chmod +x !$  #對腳本添加執行權限
!$  #運行腳本

(1)ARP響應行為和ARP解析行為內核參數:
1)arp_annouce定義通告級別
0:默認級別,將本地的任何接口上的配置的地址都在網絡中通告
1:盡量避免向本主機上的其他網卡進行網絡通信,特殊情況下其他接口也可以
2:總是使用最佳網絡地址接口(僅使用定義的網卡接口在同網絡通信)
2)arp_ignore定義響應級別(0-8九個級別),響應時忽略方式
0:都全都響應
1:只對從本接口進入的請求響應,且本接口地址是個網絡地址
… …
註釋:一般使用arp_annouce=2,arp_ignore=1

rs1、rs2

vim /usr/local/sbin/lvs_rs.sh
#!/bin/bash
vip=172.16.22.219
#把vip綁定在lo上,是為了實現rs直接把結果返回給客戶端
ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up
route add -host $vip lo:0
#以下操作為更改arp內核參數,目的是為了讓rs順利發送mac地址給客戶端
#參考文檔www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html
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
chmod +x !$  #對腳本添加執行權限

!$ #運行腳本
運行剛才建立的shell腳本,dr,rs1,rs2都要運行各自的腳步
測試:

curl -I 172.16.22.219
~ Aiker$ curl -I 172.16.22.219
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 28 Mar 2018 14:42:09 GMT
Content-Type: text/html
Content-Length: 1326
Last-Modified: Wed, 26 Apr 2017 08:03:46 GMT
Connection: keep-alive
Vary: Accept-Encoding
ETag: "59005462-52e"
Accept-Ranges: bytes

~ Aiker$ curl -I 172.16.22.219
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Wed, 28 Mar 2018 14:42:14 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.34
location: forum.php

[root@test220 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
? -> RemoteAddress:Port ? ? ? ? ? Forward Weight ActiveConn InActConn
TCP? 172.16.22.219:80 wrr
? -> 172.16.22.221:80 ? ? ? ? ? ? Route ? 1? ? ? 2? ? ? ? ? 0? ? ? ? ?
? -> 172.16.22.222:80 ? ? ? ? ? ? Route ? 1? ? ? 2? ? ? ? ? 0? ? ? ? ?
[root@test220 ~]# ipvsadm -L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
? -> RemoteAddress:Port ? ? ? ? ? Forward Weight ActiveConn InActConn
TCP? 172.16.22.219:80 wrr
? -> 172.16.22.221:80 ? ? ? ? ? ? Route ? 1? ? ? 5? ? ? ? ? 0? ? ? ? ?
? -> 172.16.22.222:80 ? ? ? ? ? ? Route ? 1? ? ? 6? ? ? ? ? 0

通過防火墻標記來定義lvs
1.FWM防火墻標記功能
防火墻標記可以實現多個集群服務綁定為同一個,實現統一調度;將共享一組RS的集群服務統一進行定義
FWM基於iptables的mangle表實現防護墻標記功能,定義標記做策略路由

2.FWM定義集群的方式
(1)在director上netfilter的mangle表的PREROUTING定義用於"打標"的規則

[root@test220~]#iptables -t mangle -A PREROUTING -d $vip -p $protocol --dport $port -j MARK--set-mark

$vip:VIP地址
$protocol:協議
$port:協議端口

(2)基於FWM定義集群服務:

[root@test220~]#ipvsadm -A -f # -s scheduler

3.實例演示

[root@test220~]# iptables -t mangle -A PREROUTING -d 172.16.22.219 -p tcp --dport 80 -j MARK--set-mark 5
[root@test220~]# ipvsadm -A -f 5 -s rr
[root@test220~]# ipvsadm -a -f 5 -r 172.16.22.221 -g
[root@test220~]# ipvsadm -a -f 5 -r 172.16.22.222 -g

LVS持久連接功能:lvs persistence

1.lvs persistence功能
無論ipvs使用何種scheduler,其都能夠實現在指定時間範圍內始終將來自同一個ip地址的請求發往同一個RS;實現方式和lvs調度的十種算法無關,通過lvs持久連接模板(hash表)實現,當超過自定義的可持節連接時長候再根據LVS算法本身進行調度。
ipvsadm命令中-p選項實現,在-p後不指定具體數字(單位:秒),默認為300,到時候會自動延長2分鐘,對於web本身就是15秒

2.模式
(1)每端口持久(PPC)
客戶端對同一服務端口發起請求,會基於該服務的端口實現請求在一段時間內對同一RS服務器持久連接;
例如:有兩臺主機做為RS服務器做http和hssh的兩種服務的集群,僅http做每端口持久,Client請求會實現綁定在,但是22號端口請求不會綁定在同一臺RS
(2)每客戶端持久(PCC):定義tcp或udp協議的0號端口為集群服務端口
director會將用戶的任何請求都識別為集群服務,並向RS進行調度;同一客戶端的請求任何端口都發往同一臺第一次選定的RS服務器
(3)每防火墻標記持久(PFWMC)
將兩個或兩個以上服務通過防火墻打標綁定在一起,這些服務的請求實現同時定向與同一臺RS服務器,服務綁定同一RS
實例:
lvs-dr模式下以rr算法綁定http和https服務

[root@test220~]# iptables -t mangle -A PREROUTING -d 172.16.22.220 -p tcp --dport 80 -j MARK--set-mark 99
[root@test220~]# iptables -t mangle -A PREROUTING -d 172.16.22.220 -p tcp --dport 443 -j MARK--set-mark 99
[root@test220~]# ipvsadm -A -f 99 -s rr -p
[root@test220~]# ipvsadm -a -f 99 -r 172.16.22.221 -g
[root@test220~]# ipvsadm -a -f 99 -r 172.16.22.222 -g

附錄:LVS-DR類型RS腳本示例

#!/bin/bash
vip=172.16.22.219
interface="lo:0"
case$1 in
start)
echo1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig$interface $vip broadcast $vip netmask 255.255.255.255 up
routeadd -host $vip dev $interface
;;
stop)
echo0 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo0 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo0 > /proc/sys/net/ipv4/conf/all/arp_announce
echo0 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig$interface down
;;
status)
ififconfig lo:0 |grep $vip &> /dev/null; then
echo"ipvs is running."
else
echo"ipvs is stopped."
fi
;;
*)
echo"Usage: `basename $0` {start|stop|status}"
exit1
esac

LVS DR模式部署