Lvs
一、lvs集群的類型:4類工作模式
1.1、lvs-nat
特點:通過將請求報文中的目標地址和目標端口修改為挑選出的某RS的RIP和PORT實現轉發。
客戶端訪問lvs集群服務,此時報文的源地址為cip,目標地址為vip,通過lvs進行dnat轉發后端服務器主機,此時,報文的源地址為cip,目標地址為rip;后端主機響應時,報文源地址為rip,目標地址為cip,后端的各個真實主機,必須把網關指向lvs集群服務的dip;這樣,才能保證響應給lvs集群服務主機;響應報文到達lvs集群服務進行地址轉換,此時,源地址為vip,目標地址為cip,最終,響應給客戶端;其實,還支持端口映射,即可修改端口進行端口轉換;
此lvs工作類型,由于使用nat,鏈接跟蹤機制不可避免的啟用;所以,并發數量是受限的;
注意:
(1)RIP和DIP必須在同一IP網絡,且應該使用私有地址;RS的網關必須指向DIP
(2)請求報文和響應報文都經由Director轉發,高負載下,vs易于成為系統性能瓶頸;
(3)支持端口映射;后端真實主機盡量為同一端口;
(4)VS必須是Linux,RS可以是任意OS(操作系統);
1.1.1、設計要點:
(1) RIP與DIP在同一IP網絡, RIP的網關要指向DIP;
(2) 支持端口映射;
1.1.2、實驗環境:
RS1:1.1.1.2 RS2:1.1.1.3 DIP:1.1.1.1
VIP:10.1.72.20
——————-VS服務器———————————
[root@centos6 ~]# ipvsadm -A -t 10.1.72.20:80 -s rr
[root@centos6 ~]# ipvsadm -a -t 10.1.72.20:80 -r 1.1.1.2 -m
[root@centos6 ~]# ipvsadm -a -t 10.1.72.20:80 -r 1.1.1.3 -m
[root@centos6 ~]# echo 1 > /proc/sys/net/ipv4/ip_forward
[root@centos6 ~]# cat /proc/sys/net/ipv4/ip_forward
1
[root@centos6 ~]# ipvsadm -ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 10.1.72.20:80 rr
-> 1.1.1.2:80 Masq 1 0 1
-> 1.1.1.3:80 Masq 1 0 2
[root@centos6 ~]# ntpdate 10.1.0.1 //最好要同步時間
27 Oct 12:07:09 ntpdate[4088]: step time server 10.1.0.1 offset 41536.506821 sec
——————————-RS———————————
=====================使用sh調度算法==================
[root@centos6 ~]# ipvsadm -E -t 10.1.72.20:80 -s sh
[root@centos6 ~]# ipvsadm -e -t 10.1.72.20:80 -r 1.1.1.2 -m
[root@centos6 ~]# ipvsadm -e -t 10.1.72.20:80 -r 1.1.1.3 -m
[root@centos6 ~]# !curl
curl 10.1.72.20/index.html
this 1.1.1.3
[root@centos6 ~]# curl 10.1.72.20/index.html
this 1.1.1.3
[root@centos6 ~]# curl 10.1.72.20/index.html
this 1.1.1.3
===================使用wrr調度算法=====================
[root@centos6 ~]# ipvsadm -E -t 10.1.72.20:80 -s wrr
[root@centos6 ~]# ipvsadm -e -t 10.1.72.20:80 -r 1.1.1.2 -m -w 3
[root@centos6 ~]# ipvsadm -e -t 10.1.72.20:80 -r 1.1.1.3 -m -w 1
[root@centos6 ~]# curl 10.1.72.20/index.html
this is 1.1.1.2
[root@centos6 ~]# curl 10.1.72.20/index.html
this 1.1.1.3
[root@centos6 ~]# curl 10.1.72.20/index.html
this is 1.1.1.2
[root@centos6 ~]# curl 10.1.72.20/index.html
this is 1.1.1.2
[root@centos6 ~]# curl 10.1.72.20/index.html
this is 1.1.1.2
[root@centos6 ~]# curl 10.1.72.20/index.html
this 1.1.1.3
[root@centos6 ~]# curl 10.1.72.20/index.html
this is 1.1.1.2
[root@centos6 ~]# curl 10.1.72.20/index.html
this is 1.1.1.2
[root@centos6 ~]# curl 10.1.72.20/index.html
this is 1.1.1.2
[root@centos6 ~]# curl 10.1.72.20/index.html
this 1.1.1.3
1.1.3、利用防火墻標記配置lvs
借助于防火墻標記來分類報文,而后基于標記定義集群服務;可將多個不同的應用使用同一個集群服務進行調度;
[root@centos6 ~]# iptables -t mangle -A PREROUTING -d 1.1.1.1 -p tcp –dport 80 -j MARK –set-mark 1
[root@centos6 ~]# ipvsadm -A -f 1 -s rr
[root@centos6 ~]# ipvsadm -a -f 1 -r 1.1.1.2 -m
[root@centos6 ~]# ipvsadm -a -f 1 -r 1.1.1.3 -m
1.2、lvs-dr
通過修改請求報文的MAC地址,重新封裝一個MAC首部進行轉發;源MAC是DIP所在接口的MAC地址,目標MAC是挑選出的某RS的RIP所在接口的MAC地址;IP首部不會發生變化(依然是CIP<–>VIP)
lvs服務主機與后端服務器主機接在同一交換機上,且每個后端主機都配有vip,為了避免地址沖突,把各后端主機配置的vip進行隔離;隔離的方法有3種:
方法一:可使用arptables命令,專門控制進行arp廣播隔離;
方法二:在RS上修改內核參數以限制arp通告及應答級別;
arp_announce
arp_ignore
方法三:在前端lvs服務器上游的路由器上綁定lvs的MAC地址與lvs的vip地址;此方法,較為不便,一般路由器有運營商負責,且lvs服務器主機會有兩個,所以綁定MAC后,當一臺壞了時,另一臺則不能通過路由器與外界通信;
特點:
(1)確保前端路由器將目標IP為VIP的請求報文轉發往調度服務器;
(2)RS的RIP可以使用私有地址,也可以使用公網地址;
(3)RS跟Director必須在同一物理網絡(基于MAC地址轉發);RS的網關必須不能指向DIP;
(4)請求報文必須由Directory調度,但響應報文必須不能經由Director;
(5)不支持端口映射;
1.2.1、注意事項:
dr模型中,各主機上均需要配置VIP,解決地址沖突,方法:
在各RS修改內核參數,來限制arp響應和通告的級別;
限制響應級別:arp_ignore
0:默認值,表示可使用本地任意接口上配置的任意地址進行響應;
1: 在請求的目標IP配置在本地主機的接收到請求報文接口上時,給予響應;
限制通告級別:arp_announce
0:默認值,把本機上的所有接口的所有信息向每個接口上的網絡進行通告;
1:盡量避免向非直接連接網絡進行通告;
2:必須避免向非本網絡通告;
設計要點:
(1)各主機一個接口即可,但需要在同一物理網絡中;
(2)RIP的網關不能指向DIP,RIP和DIP通常應在同一網絡,但此二者未必會與VIP在同一網絡;
(3)各RS需要先設置內核參數,再設置VIP和路由
1.2.2、實驗環境
VS:VIP 10.1.72.21 DIP:10.1.72.20
RS1:VIP 10.1.72.21 RIP1 10.1.72.70
RS2:VIP 10.1.72.21 RIP2 10.1.72.10
—————————–RS1—————————–
[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@localhost ~]# ifconfig lo:0 10.1.72.21 netmask 255.255.255.255 broadcast 10.1.72.21 up
[root@centos6 ~]# route add -host 10.1.72.21 dev lo
[root@localhost ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
10.1.72.21 0.0.0.0 255.255.255.255 UH 0 0 0 lo
10.1.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
0.0.0.0 10.1.0.1 0.0.0.0 UG 0 0 0 eth0
—————————RS2——————————
[root@centos6 ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
[root@centos6 ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
[root@centos6 ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
[root@centos6 ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
[root@centos6 ~]# ip addr add 10.1.72.21/32 broadcast 10.1.72.21 dev lo:0
[root@centos6 ~]# route add -host 10.1.72.21 dev lo
———————–VS——————————-
[root@centos6 ~]#ip addr add 10.1.72.21/32 broadcast 10.1.72.21 dev eth0
(地址16位掩碼仍然可以成功) [root@centos6 ~]# ip addr add 10.1.72.21/16 dev eth0
[root@centos6 ~]# ipvsadm -A -t 10.1.72.21:80 -s rr
[root@centos6 ~]# ipvsadm -a -t 10.1.72.21:80 -r 10.1.72.10 -g
[root@centos6 ~]# ipvsadm -a -t 10.1.72.21:80 -r 10.1.72.70 –g
1.3、lvs-tun
轉發方式:
不修改請求報文的IP首部(源IP為CIP,目標IP為VIP),而是源IP首部之外再封裝一個IP首部(源IP為DIP,目標IP為挑選出的RS的RIP);
請求報文源IP為cip,目標IP為vip,到到達lvs服務進入INPUT鏈上,在整個ip報文外又加了一層ip首部,即IP報文傳輸IP報文所以叫IP隧道,此時外層源IP為dip,目標IP為某一個被挑選出來遠端的rip,遠端的服務主機收到報文經過不斷拆包后,將響應報文發給客戶端,構建響應報文的源IP為cip,目標IP為cip;
特點:
(1)RIP,DIP,VIP全得是公網地址;
(2)RS網關不能指向也不可能指向DIP;
(3)請求報文經由Director轉發,但響應報文將直接發往CIP;
(4)不支持端口映射;
(5)RS的OS必須支持隧道功能;
二、調度方法:
2.1、靜態調度方法
2.1.1、RR:輪詢,只考慮起點不考慮終點,一個一個交替向后發送
2.1.2、WRR:加權輪詢,根據后端服務器性能,設置權重值,也就是可響應性能好的服務器,被選中的次數多;
2.1.3:SH:根據客戶端請求的源地址調度,調度服務器中會有一個緩存表,當客戶端請求來時,查詢此表,如果與表中的ip一樣,那就選擇與上次分配的真是服務器相同的服務器,如果表中沒有匹配項,那么根據wrr的方式,來調度
2.1.4、DH:當調度服務器后端為緩存服務器時,緩存服務器緩存著不同網站的內容,當有客戶端請求到來時,查詢客戶端請求的地址,如果緩存服務器中有需要的緩存內容,那么不管客戶端是誰,都調度到那個緩存服務器上,如果沒有匹配到內容,則根據wrr調度算法,調度到后端,此時,這個調度服務器的表中會增加一條記錄
2.2、動態調度方法:根據后端每個RS服務器的負載狀態進行調度
2.2.1、LC:最少連接算法, 活動x256+非活動計算的值小的被選中;
2.2.2、WLC:加權最少連接算法,(活動連接*256+非活動連接)/權重 缺陷:權重小的服務器在前面,客戶端第一次請求時會始終先調度給前面的服務器,而不是性能好、權重大的服務器;
2.2.3、SED:解決了WLC的缺陷,(活動連接+1)*256/權重,使得權重大的結果一定會小于權重小的,這樣能保證權重大的先接受響應任務;缺陷:使得權重大的始終保持響應任務,而權重小的始終沒有任務;
2.2.4:NQ:永不排隊,改進了sed,開始時,保證每個服務器都輪詢響應任務,之后再安裝sed的方法進行計算;
2.2.5、LBLC(動態dh):基于本地的最少連接,其實就是動態的dh算法,做dh時會考慮后端服務器負載狀態,結果是有可能新請求被發往負載較小的服務器上,如果沒有任何匹配,使用WLC算法進行調度,但始終會影響負載均衡效果,因為dh算法就決定了,請求只要是同一目標地址就被綁定在一個RS上;
2.2.6:LBLCR:被調度的多臺緩存服務器之間,可以復制部分內容,這樣,在后端緩存服務器極不平衡的的狀態下,通過復制部分內容來實現調度相對平衡的效果
三、配置命令格式
3.1、ipvsadm命令:
ipvsadm -A|E -t|u|f service-address [-s scheduler]
ipvsadm -D -t|u|f service-address
ipvsadm -C
ipvsadm -R
ipvsadm -S [-n]
ipvsadm -a|e -t|u|f service-address -r server-address [options]
ipvsadm -d -t|u|f service-address -r server-address
ipvsadm -L|l [options]
ipvsadm -Z [-t|u|f service-address]
3.2、管理集群服務:增、改、刪;
增、改:ipvsadm -A|E -t|u|f service-address [-s scheduler]
service-address:VIP
-t|u|f:
-t: TCP協議的端口,VIP:TCP_PORT
-u: TCP協議的端口,VIP:UDP_PORT
-f:firewall MARK,是一個數字;
[-s scheduler]:指定集群的調度算法,默認為wlc;
刪:ipvsadm -D -t|u|f service-address
3.3、管理集群上的RS:增、改、刪;
增、改:ipvsadm -a|e -t|u|f service-address -r server-address [-g|i|m] [-w weight]
刪:ipvsadm -d -t|u|f service-address -r server-address
server-address:
rip[:port]
選項:
lvs類型:
-g: gateway, dr類型
-i: ipip, tun類型
-m: masquerade, nat類型
-w weight:權重;
清空定義的所有內容:
ipvsadm -C
3.4、查看:
ipvsadm -L|l [options]
–numeric, -n:numeric output of addresses and ports
–exact:expand numbers (display exact values)
–connection, -c:output of current IPVS connections
–stats:output of statistics information
–rate :output of rate information
保存和重載:
ipvsadm -S = ipvsadm-save
ipvsadm -R = ipvsadm-restore
原創文章,作者:landanhero,如若轉載,請注明出處:http://www.www58058.com/55023