歡迎您光臨本站 註冊首頁

LB群集--lvs-nat模型

←手機掃碼閱讀     火星人 @ 2014-03-08 , reply:0

lvs簡介: LVS是一個開源的軟體,由畢業於國防科技大學的章文嵩博士於1998年5月創立,可以實現LINUX平台下的簡單負載均衡.LVS是Linux Virtual Server的縮寫,意思是Linux虛擬伺服器.

Lvs 的集群工作模式有3種:VS/NAT,vs/tun,vs/dr.

Lvs的調度演算法:

LVS的演算法分為兩大類:
靜態演算法:只是根據演算法進行調度並不考慮後端REALSERVER的實際連接情況
rr-論調演算法,假如有兩台伺服器A,B,第一個請求給A,第二個給B,第三個給A依次往複
wrr-加權論調,假如有兩台伺服器A,B,A的性能是B的兩倍,則在論調的同時給A上面分配的請求也大致會是B上面的兩倍
dh-假如調度器的後面是兩台緩存伺服器A,B而不是真正的REALSERVER,則會儘可能的把相同請求或者把同一用戶的請求轉發到同一個緩存伺服器上面以提高緩存命中率
sh-假如公司有兩台防火牆讓員工上網,則會把某個員工往外的訪問及向內返回的請求結果定向到同一台防火牆上面,方便防火牆做established的狀態檢測

動態演算法:前端的調度器會根據後端REALSERVER的實際連接情況來分配請求
活動鏈接:當前有數據包傳輸
非活動鏈接:當前連接出於建立狀態但是沒有數據傳輸
lc-同時檢查後端REALSERVER上面活動狀態和非活動狀態的連接數使用(活動連接數*256 非活動連接數)數字小的將接收下次訪問請求
wlc-加權的lc,使用(活動連接數*256 非活動連接數)/權重,數字小的將接收下次訪問請求,是最常用的演算法
sed-不考慮非活動狀態,使用(活動狀態 1)*256,數字小的將接收下次訪問請求, 1主要是為了提高權重大的伺服器的響應能力


nq-假設有兩台伺服器A,B,權重比為10:1,按照sed演算法,只有當A伺服器已經響應了10個請求之時兩者的計算數值才相同,為了避免權重小的伺服器過於空閑,nq沿用sed演算法但是確保讓每個伺服器都不空閑,只有在不考慮非活動連接的情況下nq才能取代wlc演算法
lblc-在dh的基礎上面考慮後台伺服器的負載能力
lblcr-在lblc的基礎上,假設有A,B兩台緩存伺服器,某個用戶第一次訪問被重定向到A,第二次訪問時A負載很大,B過於空閑這時也會打破原來的規則把客戶的第二次訪問重定向給B

案例:

在公司的內部有兩台web伺服器,為了實現群集的負載均衡,通過lvs伺服器來實現對web伺服器流量的分發.

公司的內部伺服器.

web1 192.168.10.2

Web2 192.168.10.3

分發伺服器director

外卡地址 192.168.2.1

內卡地址 192.168.10.1

常用的調演算法

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

FILES

/proc/net/ip_vs

/proc/net/ip_vs_app

/proc/net/ip_vs_conn

/proc/net/ip_vs_stats

/proc/sys/net/ipv4/vs/am_droprate

/proc/sys/net/ipv4/vs/amemthresh

/proc/sys/net/ipv4/vs/drop_entry

/proc/sys/net/ipv4/vs/timeout_synrecv

/proc/sys/net/ipv4/vs/timeout_synsent

/proc/sys/net/ipv4/vs/timeout_timewait

/proc/sys/net/ipv4/vs/timeout_udp

一:server1的搭建

Webserver1

[root@zzu ~]# yum install http*

[root@zzu ~]# service httpd restart

二:server2的搭建

同一,此處省略

三:director的搭建

1:配置好網路參數

[root@zzu ~]# ifconfig

eth0 Link encap:Ethernet HWaddr 00:0C:29:F7:49:EF

inet addr:192.168.2.1 Bcast:192.168.2.255 Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fef7:49ef/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:5917 errors:0 dropped:0 overruns:0 frame:0

TX packets:4726 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:552498 (539.5 KiB) TX bytes:599760 (585.7 KiB)

Interrupt:67 Base address:0x2000

eth1 Link encap:Ethernet HWaddr 00:0C:29:F7:49:F9

inet addr:192.168.10.1 Bcast:192.168.10.255 Mask:255.255.255.0

inet6 addr: fe80::20c:29ff:fef7:49f9/64 Scope:Link

UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1

RX packets:916 errors:0 dropped:0 overruns:0 frame:0

TX packets:902 errors:0 dropped:0 overruns:0 carrier:0

collisions:0 txqueuelen:1000

RX bytes:94742 (92.5 KiB) TX bytes:112395 (109.7 KiB)

Interrupt:67 Base address:0x2080

[root@zzu ~]# vim /etc/sysctl.conf 開啟數據包的轉發功能

net.ipv4.ip_forward = 1

[root@zzu ~]# 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

2:安裝ipvsadm的rpm包

[root@zzu ~]# yum install -y ipvsadm

[root@zzu ~]# ipvsadm -A -t 192.168.2.1:80 -s rr

[root@zzu ~]# ipvsadm –a -t 192.168.2.1:80 -r 192.168.10.2:80 –m -w 1

[root@zzu ~]# ipvsadm –a -t 192.168.2.1:80 -r 192.168.10.3:80 –m -w 1

3:測試lc

[root@zzu ~]# ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.2.1:80 lc

-> 192.168.10.3:80 Masq 1 0 0

-> 192.168.10.2:80 Masq 1 0 11

10.2的連接數已經為11,而10.3的連接數竟然為0.

[root@zzu ~]# ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.2.1:80 lc

-> 192.168.10.3:80 Masq 1 0 1

-> 192.168.10.2:80 Masq 1 0 11

4:測試rr

[root@zzu ~]# ipvsadm -A -t 192.168.2.1:80 -s rr

[root@zzu ~]# ipvsadm -a -t 192.168.2.1:80 -r 192.168.10.2:80 -m 使用nat的工作模式

[root@zzu ~]# ipvsadm -a -t 192.168.2.1:80 -r 192.168.10.3:80 -m

[root@zzu ~]# ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.2.1:80 rr

-> 192.168.10.3:80 Masq 1 0 0

-> 192.168.10.2:80 Masq 1 0 0

[root@zzu ~]# ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.2.1:80 rr

-> 192.168.10.3:80 Masq 1 0 4

-> 192.168.10.2:80 Masq 1 0 3


5.測試wrr

[root@zzu ~]# ipvsadm -E -t 192.168.2.1:80 -s wrr

[root@zzu ~]# ipvsadm -e -t 192.168.2.1:80 -r 192.168.10.3:80 -m -w 1

[root@zzu ~]# ipvsadm -e -t 192.168.2.1:80 -r 192.168.10.2:80 -m -w 3

[root@zzu ~]# ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.2.1:80 wrr

-> 192.168.10.3:80 Masq 1 0 0

-> 192.168.10.2:80 Masq 3 0 0

[root@zzu ~]# ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.2.1:80 wrr

-> 192.168.10.3:80 Masq 1 0 2

-> 192.168.10.2:80 Masq 3 0 5

6:測試dh演算法

[root@zzu ~]# ipvsadm -E -t 192.168.2.1:80 -s dh

[root@zzu ~]# ipvsadm -ln

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

-> RemoteAddress:Port Forward Weight ActiveConn InActConn

TCP 192.168.2.1:80 dh

-> 192.168.10.3:80 Masq 1 0 0

-> 192.168.10.2:80 Masq 1 0 11

常用指令的說明:

service ipvsadm save 保存ipvs-table表格

service ipvsadm panic 清空ipvs-table表格

service ipvsadm start|stop|restart

ipvsadm -A|E -t|u| service-address [-s scheduler]

ipvsadm -a|e -t|u| service-address -r server-address
[-g|i|m] [-w weight]

-A 增加虛擬服務 -E 表示修改 -t -u tcp/udp協議 -s 指定調度演算法

-a 增加虛擬的映射關係 -r 真是伺服器的地址 -w 權重的大小

-g -i -m 三種不用的工作模式

-g, --gatewaying Use gatewaying (direct routing). This is the default.

-i, --ipip Use ipip encapsulation (tunneling).

-m, --masquerading Use masquerading (network access translation, or NAT).

-Z, --zero
ipvsadm -Z -t 207.175.44.110:80

例子:

ipvsadm -A -t 207.175.44.110:80 -s rr
ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.1:80 -m
ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.2:80 -m
ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.3:80 -m
ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.4:80 -m
ipvsadm -a -t 207.175.44.110:80 -r 192.168.10.5:80 -m



[火星人 ] LB群集--lvs-nat模型已經有458次圍觀

http://coctec.com/docs/linux/show-post-45817.html