LVS的工作模式

LVS集羣採用IP負載均衡技術和基於內容請求分發技術。調度器具有很好的吞吐率,將請求均衡地轉移到不同的服務器上執行,且調度器自動屏蔽掉服務器的故障,從而將一組服務器構成一個高性能的、高可用的虛擬服務器。整個服務器集羣的結構對客戶是透明的,而且無需修改客戶端和服務器端的程序。爲此,在設計時需要考慮系統的透明性、可伸縮性、高可用性和易管理性。


LVS三種工作模式:


1. Virtual server via NATVS-NAT

類似於設備中的DNAT,用於內部服務器的發佈。

優點:集羣中的物理服務器可以使用任何支持TCP/IP操作系統,物理服務器可以分配Internet的保留私有地址,只有負載均衡器需要一個合法的IP地址。
缺點:擴展性有限。當服務器節點(普通PC服務器)數據增長到20個或更多時,負載均衡器將成爲整個系統的瓶頸,因爲所有的請求包和應答包都需要經過負載均衡器再生。


2. Virtual server via IP tunnelingVS-TUN

可以實現異地容災
優點:負載均衡器只負責將請求包分發給物理服務器,而物理服務器將應答包直接發給用戶。所以,負載均衡器能處理很巨大的請求量,這種方式,一臺負載均衡能爲超過100臺的物理服務器服務,負載均衡器不再是系統的瓶頸。使用VS-TUN方式,如果你的負載均衡器擁有100M的全雙工網卡的話,就能使得整個Virtual Server能達到1G的吞吐量。
不足:但是,這種方式需要所有的服務器支持"IPTunneling"(IP Encapsulation)協議。



3. Virtual Server via Direct RoutingVS-DR
優點:VSTUN一樣,負載均衡器也只是分發請求,應答包通過單獨的路由方法返回給客戶端。與VS-TUN相比,VS-DR這種實現方式不需要隧道結構,因此可以使用大多數操作系統做爲物理服務器,其中包括:Linux 2.0.362.2.92.2.102.2.12Solaris 2.5.12.62.7FreeBSD 3.13.23.3NT4.0無需打補丁;IRIX 6.5HPUX11等。

不足:要求負載均衡器的網卡必須與物理網卡在一個物理段上。




案例一:NAT模型

拓撲:

164649450.jpg

實驗前準備:配置好各個節點的IP地址,注意後方的Server要將網管指向前段的director。

在後方的Server上安裝Apache:

164619595.jpg

Server2上的配置與Server1類似,不再列出……


設置前段的director

首先要開啓系統的轉發功能:

[root@Director ~]# cat /boot/config-2.6.18-164.el5| grep IP_VS /////查看內核是否支持IPVS

CONFIG_IP_VS=m

# CONFIG_IP_VS_DEBUG is not set

CONFIG_IP_VS_TAB_BITS=12

CONFIG_IP_VS_PROTO_TCP=y

CONFIG_IP_VS_PROTO_UDP=y

CONFIG_IP_VS_PROTO_ESP=y

CONFIG_IP_VS_PROTO_AH=y

CONFIG_IP_VS_RR=m

CONFIG_IP_VS_WRR=m

CONFIG_IP_VS_LC=m

CONFIG_IP_VS_WLC=m

CONFIG_IP_VS_LBLC=m

CONFIG_IP_VS_LBLCR=m

CONFIG_IP_VS_DH=m

CONFIG_IP_VS_SH=m

CONFIG_IP_VS_SED=m

CONFIG_IP_VS_NQ=m

CONFIG_IP_VS_FTP=m

[root@Director ~]#vim /etc/sysctl.conf /////編輯該文件開啓系統的轉發功能

164626276.jpg

[root@Director ~]# sysctl –p /////使修改的參數生效

net.ipv4.ip_forward = 1

net.ipv4.conf.default.rp_filter = 1

net.ipv4.conf.default.accept_source_route =0

kernel.sysrq = 0

kernel.core_uses_pid = 1

net.ipv4.tcp_syncookies = 1

kernel.msgmnb = 65536

kernel.msgmax = 65536

kernel.shmmax = 4294967295

kernel.shmall = 268435456



安裝ipvsadm工具

[root@Director ~]# mkdir /mnt/cdrom

[root@Director ~]# mount /dev/cdrom/mnt/cdrom/

mount: block device /dev/cdrom iswrite-protected, mounting read-only

[root@Director ~]# rpm -ivh /mnt/cdrom/Cluster/ipvsadm-1.24-10.i386.rpm



設置規則(輪詢調度)

[root@Director ~]# ipvsadm -A -t192.168.2.100:80 -s rr

[root@Director ~]# ipvsadm -a -t192.168.2.100:80 -r 192.168.3.2 -m

[root@Director ~]# ipvsadm -a -t192.168.2.100:80 -r 192.168.3.3 -m

[root@Director ~]# ipvsadm -L

IP Virtual Server version 1.2.1(size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.2.100:http rr

-> 192.168.3.3:http Masq 1 0 0

-> 192.168.3.2:http Masq 1 0 0

[root@Director ~]# service ipvsadm save

Saving IPVS table to/etc/sysconfig/ipvsadm: [ OK ]


訪問192.168.2.100:

164632870.jpg

164639808.jpg

查看規則的匹配情況:

[root@Director ~]# ipvsadm -L

IP Virtual Server version 1.2.1(size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.2.100:http rr

-> 192.168.3.3:http Masq 1 0 12

-> 192.168.3.2:http Masq 1 0 12

由於中間刷新了好多次,可以看到後方的兩個服務器個訪問到了12次。


修改爲帶權重的輪詢調度

[root@Director ~]# ipvsadm -E -t192.168.2.100:80 -s wrr

[root@Director ~]# ipvsadm -e -t192.168.2.100:80 -r 192.168.3.2 -m -w 1

[root@Director ~]# ipvsadm -e -t192.168.2.100:80 -r 192.168.3.3 -m -w 3

[root@Director ~]# ipvsadm -L

IP Virtual Server version 1.2.1(size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.2.100:http wrr

-> 192.168.3.3:http Masq 3 0 0

-> 192.168.3.2:http Masq 1 0 0

[root@Director ~]# service ipvsadm save

Saving IPVS table to/etc/sysconfig/ipvsadm: [ OK ]



重新訪問幾次192.168.2.100,這是訪問後方的服務器是訪問3次Server2後再訪問1次Server1這樣交替進行。

[root@Director ~]# ipvsadm -L

IP Virtual Server version 1.2.1(size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.2.100:http wrr

-> 192.168.3.3:http Masq 3 0 27

-> 192.168.3.2:http Masq 1 0 9




案例二:DR模型

拓撲:

172838972.jpg

首先要配置各個節點的IP地址,特別注意的是此時的VIP是配置在各個節點lo:0節點上的192.168.2.100,而且Server只要能與director通信即可,不需要將網關指向director。這裏列出director上lo:0的配置過程:

171417753.jpg

171422525.jpg

171439695.jpg



設置後方的服務器使其不宣告自己的IP地址:

171513352.jpg

171606726.jpg

設置Server2:

171726567.jpg

安裝Apache:

174752219.jpg

Server2上的安裝過程於其類似,不再列出……




在director上安裝ipvsadm工具

[root@Director ~]# mount /dev/cdrom/mnt/cdrom/

mount: block device /dev/cdrom iswrite-protected, mounting read-only

[root@Director ~]# cd /mnt/cdrom/Cluster

[root@Director Cluster]# rpm -ivh ipvsadm-1.24-10.i386.rpm

warning: ipvsadm-1.24-10.i386.rpm: HeaderV3 DSA signature: NOKEY, key ID 37017186

Preparing... ########################################### [100%]

1:ipvsadm ########################################### [100%]



設置director的分發規則:

[root@Director Cluster]# ipvsadm -A -t192.168.2.100:80 -s rr

[root@Director Cluster]# ipvsadm -a -t192.168.2.100:80 -r 192.168.2.2 -g

[root@Director Cluster]# ipvsadm -a -t192.168.2.100:80 -r 192.168.2.3 -g

[root@Director Cluster]# ipvsadm -l

IP Virtual Server version 1.2.1(size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.2.100:http rr

-> 192.168.2.3:http Route 1 0 0

->192.168.2.2:http Route 1 0 0

[root@Director Cluster]# service ipvsadmsave

Saving IPVS table to/etc/sysconfig/ipvsadm: [ OK ]




測試:

171931110.jpg

刷新幾次後查看director上的匹配情況:

[root@Director Cluster]# ipvsadm -l

IP Virtual Server version 1.2.1(size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.2.100:http rr

-> 192.168.2.3:http Route 1 0 5

-> 192.168.2.2:http Route 1 0 4





實現NAS:

以nfs的方式實現網絡附加存儲

設置後方的target實現共享:

172026552.jpg

172030227.jpg

172058113.jpg


在前端的Server上掛載後方的共享文件夾:

172109724.jpg

172144943.jpg

172241848.jpg

在Server2上的操作與Server1相同。


測試:

172310363.jpg




案例三:持久連接

在案例二的前提下繼續進行……


持久連接指一個client在一定的條件下訪問serverdirector將其請求定位在同一個server


持久連接類型

PCC 基於客戶端的持久連接client的所有請求全部定位到同一個服務器

PPC 基於端口的持久連接client不同服務的請求分別定位在不同的服務器上

基於防火牆標記的持久連接 將具有引擎關係的數據請求定位在同一個服務器上,比如HTTPhttps ftp2120端口


180120362.jpg

在Server2上也要這麼做。


例1、PCC

[root@Director ~]# ipvsadm -C

[root@Director ~]# ipvsadm -A -t 192.168.2.100:0-s rr -p 60 /////設置持久連接60秒

[root@Director ~]# ipvsadm -a -t 192.168.2.100:0 -r 192.168.2.2 -g

[root@Director ~]# ipvsadm -a -t 192.168.2.100:0 -r 192.168.2.3 -g

[root@Director ~]# ipvsadm -l

IP Virtual Server version 1.2.1(size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.2.100:0 rr persistent 60

-> 192.168.2.3:0 Route 1 0 0

-> 192.168.2.2:0 Route 1 0 0

[root@Director ~]# serviceipvsadm save

Saving IPVS table to/etc/sysconfig/ipvsadm: [ OK ]


測試:

180127681.jpg

180203763.jpg

查看director上的匹配情況:

[root@Director ~]# ipvsadm -l

IP Virtual Server version 1.2.1(size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.2.100:0 rr persistent 60

-> 192.168.2.3:0 Route 1 0 16

-> 192.168.2.2:0 Route 1 0 0

可以看到在60s內,director將所有的用戶請求全部定向到Server2。

過60s後重新訪問

180141299.jpg

[root@Director ~]# ipvsadm -l

IP Virtual Server version 1.2.1(size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.2.100:0 rr persistent 60

-> 192.168.2.3:0 Route 1 0 0

-> 192.168.2.2:0 Route 1 0 1




例2、PPC

[root@Director ~]# ipvsadm -C

[root@Director ~]# ipvsadm -A -t192.168.2.100:80 -s rr -p 60

[root@Director ~]# ipvsadm -a -t192.168.2.100:80 -r 192.168.2.2 -g

[root@Director ~]# ipvsadm -a -t192.168.2.100:80 -r 192.168.2.3 -g

[root@Director ~]# ipvsadm -A -t192.168.2.100:22 -s rr -p 60

[root@Director ~]# ipvsadm -a -t192.168.2.100:22 -r 192.168.2.3 -g

[root@Director ~]# ipvsadm -a -t192.168.2.100:22 -r 192.168.2.2 -g

[root@Director ~]# ipvsadm -l

IP Virtual Server version 1.2.1(size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.2.100:http rr persistent 60

-> 192.168.2.3:http Route 1 0 0

-> 192.168.2.2:http Route 1 0 0

TCP 192.168.2.100:ssh rr persistent 60

-> 192.168.2.2:ssh Route 1 0 0

-> 192.168.2.3:ssh Route 1 0 0

[root@Director ~]# service ipvsadm save

Saving IPVS table to/etc/sysconfig/ipvsadm: [ OK ]



測試:

HTTP請求首先定向到Server2,SSH服務首先定向到Server1

180222912.jpg

180240640.jpg




例3、基於防火牆標記的持久連接

設置後方服務器提供FTP服務並使用被動模式

180317495.jpg

180323273.jpg

180349365.jpg



使用iptables給向21、10000、10001、10002端口發出請求的數據進行標記

[root@Director ~]# iptables -t mangle -APREROUTING -d 192.168.2.100 -p tcp --dport 21 -j MARK --set-mark 21

[root@Director ~]# iptables -t mangle -APREROUTING -d 192.168.2.100 -p tcp -m multiport --dport 10000:10002 -j MARK--set-mark 21

[root@Director ~]# iptables -t mangle -L -n-v --line-number

Chain PREROUTING (policy ACCEPT 226packets, 15502 bytes)

num pkts bytes target prot optin out source destination

1 0 0 MARK tcp -- * * 0.0.0.0/0 192.168.2.100 tcp dpt:21 MARK set 0x15

2 0 0 MARK tcp -- * * 0.0.0.0/0 192.168.2.100 multiport dports 10000:10002 MARK set0x15


Chain INPUT (policy ACCEPT 226 packets,15502 bytes)

num pkts bytes target prot optin out source destination


Chain FORWARD (policy ACCEPT 0 packets, 0bytes)

num pkts bytes target prot optin out source destination


Chain OUTPUT (policy ACCEPT 136 packets,15364 bytes)

num pkts bytes target prot optin out source destination


Chain POSTROUTING (policy ACCEPT 136packets, 15364 bytes)

num pkts bytes target prot optin out source destination



ipvsadm設置定向規則:

[root@Director ~]# ipvsadm -C

[root@Director ~]# ipvsadm -A -f 21 -s rr-p 60

[root@Director ~]# ipvsadm -a -f 21 -r192.168.2.2 -g

[root@Director ~]# ipvsadm -a -f 21 -r192.168.2.3 -g

[root@Director ~]# ipvsadm -l

IP Virtual Server version 1.2.1(size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

FWM 21 rr persistent 60

-> 192.168.2.3:0 Route 1 0 0

-> 192.168.2.2:0 Route 1 0 0

[root@Director ~]# service ipvsadm save

Saving IPVS table to /etc/sysconfig/ipvsadm: [ OK ]


測試:

180433126.jpg

180557796.jpg






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章