LVS NAT/TUN/DR三种模式比较

LVS共有三种模式,优缺点比较如下:

NAT模式
优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址。
不足:扩展性有限。当服务器节点(普通PC服务器)数据增长到20个或更多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包都需要经过负载均衡器再生。假使TCP包的平均长度是536字节的话,平均包再生延迟时间大约为60us(在Pentium处理器上计算的,采用更快的处理器将使得这个延迟时间变短),负载均衡器的最大容许能力为8.93M/s,假定每台物理服务器的平台容许能力为400K/s来计算,负责均衡器能为22台物理服务器计算。

TUN模式
我们发现,许多Internet服务(例如WEB服务器)的请求包很短小,而应答包通常很大。
优点:负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。使用VS-TUN方式,如果你的负载均衡器拥有100M的全双工网卡的话,就能使得整个Virtual Server能达到1G的吞吐量。
不足:但是,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,我仅在Linux系统上实现了这个,如果你能让其它操作系统支持,还在探索之中。

DR模式
优点:和VS-TUN一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器,其中包括:Linux 2.0.36、2.2.9、2.2.10、2.2.12;Solaris 2.5.1、2.6、2.7;FreeBSD 3.1、3.2、3.3;NT4.0无需打补丁;IRIX 6.5;HPUX11等。
不足:要求负载均衡器的网卡必须与物理网卡在一个物理段上

NAT模式
优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址。
不足:扩展性有限。当服务器节点(普通PC服务器)数据增长到20个或更多时,负载均衡器将成为整个系统的瓶颈,因为所有的请求包和应答包都需要经过负载均衡器再生。假使TCP包的平均长度是536字节的话,平均包再生延迟时间大约为60us(在Pentium处理器上计算的,采用更快的处理器将使得这个延迟时间变短),负载均衡器的最大容许能力为8.93M/s,假定每台物理服务器的平台容许能力为400K/s来计算,负责均衡器能为22台物理服务器计算。

TUN模式
我们发现,许多Internet服务(例如WEB服务器)的请求包很短小,而应答包通常很大。
优点:负载均衡器只负责将请求包分发给物理服务器,而物理服务器将应答包直接发给用户。所以,负载均衡器能处理很巨大的请求量,这种方式,一台负载均衡能为超过100台的物理服务器服务,负载均衡器不再是系统的瓶颈。使用VS-TUN方式,如果你的负载均衡器拥有100M的全双工网卡的话,就能使得整个Virtual Server能达到1G的吞吐量。
不足:但是,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,我仅在Linux系统上实现了这个,如果你能让其它操作系统支持,还在探索之中。

DR模式
优点:和VS-TUN一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端。与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器,其中包括:Linux 2.0.36、2.2.9、2.2.10、2.2.12;Solaris 2.5.1、2.6、2.7;FreeBSD 3.1、3.2、3.3;NT4.0无需打补丁;IRIX 6.5;HPUX11等。
不足:要求负载均衡器的网卡必须与物理网卡在一个物理段上

 

Ipvsadm命令的用法

管理集群服务:ipvsadm -A|E -t|u|f service-address [-s scheduler]

     -A:添加集群服务

     -E:修改集群服务

    -t:承载的应用层协议为基于TCP协议提供服务的协议;其server-address的格式为“VIP:PORT”,如“172.16.4.100:80”;

    -u:承载的应用层协议为基于UDP协议提供服务的协议;其server-address的格式为“VIP:PORT”,如“172.16.4.100:53”;

    -f:承载的应用层协议为基于TCP或UDP协议提供服务的协议,但此类报文会经由iptables/netfilter打标记,即防火墙标记,其server-address的格式为“FWM”,例如“10”;

     -sscheduler:指明调度方法,默认为wlc;

     删除:ipvsadm –D –t|u|f server-address

管理集群服务的RS:ipvsadm -a|e -t|u|f service-address-r server-address [-g|i|m] [-w weight]

   添加或修改:

      -r server-address:指明RS,server-address格式一般为“IP[:PORT:]”:注意,只支持端口映射的lvs类型才应该显示定义此处端口。

      [-g|i|m]:指明lvs类型

         -g:dr类型

         -i:tun类型

         -m:nat类型

      [-w weight]:当前RS的权重;

           注意:仅对于支持加权调度的scheduler,权重才有意义;

   删除:

       ipvsadm -d -t|u|f service-address -r server-address

清空所有集群服务的定义:

    ipvsadm –c

保存及恢复集群服务及RS的定义:

    ipvsadm -S > /etc/sysconfig/ipvsadm

    ipvsadm-save > /etc/sysconfig/ipvsadm

    service ipvsadm save

    ipvsadm -R < /etc/sysconfig/ipvsadm

    ipvsadm-restore < /etc/sysconfig/ipvsadm

    service ipvsadm restart

查看规则:ipvsadm-L|l [options]

-c:列出当前所有connection;

1

2

3

4

[root@LVS ~]# ipvsadm -L -c

IPVS connection entries

pro expire state       source             virtual            destination

TCP 00:54 SYN_RECV    172.16.0.101:57660172.16.4.1:http    172.16.4.101:http

输出说明:

pro:使用的协议

expire:连接过期时间

state:连接状态

source:客户端地址

virtual:vip地址

destination:响应客户端的RS服务器地址

 --stats:列出统计数据:

1

2

3

4

5

6

7

[root@LVS ~]# ipvsadm -L --stats

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port               Conns   InPkts OutPkts  InBytes OutBytes

  ->RemoteAddress:Port

TCP 172.16.4.1:http                   22      104        0   11448        0

  ->172.16.4.101:http                 11       51        0    5764        0

  ->172.16.4.102:http                 11       53        0    5684        0

输出说明:

Conns:连接数

InPkts:入站报文 

OutPkts: 出战响应

InBytes:入站字节数

OutBytes:出战字节数

说明:如果地址是vip地址,则是总数;如果是RS地址,则是direction分配给vip的数据。

--rate: 列出速率

1

2

3

4

5

6

7

[root@LVS ~]# ipvsadm -L --rate

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port                 CPS    InPPS  OutPPS    InBPS   OutBPS

  ->RemoteAddress:Port

TCP 172.16.4.1:http                    0        0        0       0        0

  ->172.16.4.101:http                  0        0        0       0        0

  ->172.16.4.102:http                  0        0        0       0        0

输出说明:

CPS:每秒钟连接数   

InPPS:每秒钟入站报文数  

OutPPS:每秒钟出战报文数   

InBPS:每秒钟入站字节大小  

OutBPS:每秒钟出战字节大小

-n, --numeric: 数字格式显示IP及端口;

1

2

3

4

5

6

7

[root@LVS ~]# ipvsadm -L -n

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  ->RemoteAddress:Port           ForwardWeight ActiveConn InActConn

TCP 172.16.4.1:80 rr

  ->172.16.4.101:80              Route   1     0          0        

  ->172.16.4.102:80              Route   2     0          0

输出说明:

Weight:权重

ActiveConn:活动连接

InActConn:非活动连接

--exact: 精确值;

1

2

3

4

5

6

7

 [root@LVS~]# ipvsadm -L --exact

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  ->RemoteAddress:Port           ForwardWeight ActiveConn InActConn

TCP 172.16.4.1:http rr

  ->172.16.4.101:http            Route   1     0          1        

  ->172.16.4.102:http            Route   2     0          0

清空计数器:及速率统计和连接信息等都会为0

    ipvsadm-Z [-t|u|f service-address]

配置LVS-NAT

配置拓扑:

拓扑说明:

 

主机名

系统环境

IP地址

调度器

LVS

Centos6.6 64位

外网:eth0 172.16.4.100

内网:eth1 192.168.1.1

WEB-01

WEB-01

内网:eth0 192.168.1.10

WEB-02

WEB-02

内网:eth0 192.168.1.11

配置以前注意事项说明:

1、RS的网关必须指向Director

2、director需要开启路由转发功能

后端web服务器配置

WEB-01和WEB-02最好准备不同的页面,一遍测试负载均衡效果。

1

2

3

4

[root@WEB-01 ~]# echo "WEB-01" > /var/www/html/index.html

[root@WEB-01 ~]# service httpd start

[root@WEB-02 ~]# echo "WEB-02" >/var/www/html/index.html

[root@WEB-02 ~]# service httpd start

确保调度器可以访问web测试

1

2

3

4

[root@LVS ~]# curl 192.168.1.10

WEB-01

[root@LVS ~]# curl 192.168.1.11

WEB-02

调度器配置

启动路由转发功能

1

2

3

4

[root@LVS~]# vim /etc/sysctl.conf 

net.ipv4.ip_forward= 1

[root@LVS~]# sysctl –p

net.ipv4.ip_forward= 1   #出现此选项说明转发功能开启成功

设置ipvsadm策略

1

2

3

[root@LVS ~]# ipvsadm -A -t 172.16.4.100:80 -s rr

[root@LVS ~]# ipvsadm -a -t 172.16.4.100:80 -r 192.168.1.10-m -w 1

[root@LVS ~]# ipvsadm -a -t 172.16.4.100:80 -r 192.168.1.11 -m -w 1

验证集群:访问为结果web-01,刷新出现web-02,说明实现了负载均衡功能

查看ipvsadm也出现了连接

1

2

3

4

5

6

7

[root@LVS ~]# ipvsadm -L -n

IP Virtual Server version 1.2.1 (size=4096)

Prot LocalAddress:Port Scheduler Flags

  ->RemoteAddress:Port           ForwardWeight ActiveConn InActConn

TCP 172.16.4.100:80 rr

  ->192.168.1.10:80              Masq    1     0          1        

  ->192.168.1.11:80              Masq    1     0          1

配置LVS-DR

环境拓扑:

环境描述:

 

主机名

系统环境

IP地址

调度器

LVS

Centos6.6 64位

外网:eth0 172.16.4.100

VIP: eth0:0  172.16.4.1

WEB-01

WEB-01

外网:eth0 172.16.4.101

VIP: eth0:0  172.16.4.1

WEB-02

WEB-02

外网:eth0 172.16.4.102

VIP: eth0:0  172.16.4.1

后端web服务器配置

说明:WEB-01和WEB-02除了网页内容不一样(生产环境网页内容必须一样)之外,其他的都一样。

WEB-01配置

设置web页面

1

2

[root@WEB-01 ~]# echo "WEB-01" >/var/www/html/index.html

[root@WEB-01 ~]# service httpd start

设置内核参数,抑制ARP

1

2

3

4

[root@WEB-01 ~]# echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore

[root@WEB-01 ~]# echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce

[root@WEB-01 ~]# echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore

[root@WEB-01 ~]# echo "2">/proc/sys/net/ipv4/conf/all/arp_announce

设置vip地址

1

2

3

4

[root@WEB-01 ~]# ifconfig lo:0 172.16.4.1 broadcast172.16.4.1 netmask 255.255.255.255 up

[root@WEB-01 ~]# ifconfig | grep 172.16.4.1

         inet addr:172.16.4.101 Bcast:172.16.255.255 Mask:255.255.0.0

         inet addr:172.16.4.1 Mask:255.255.255.255

设置路由

1

[root@WEB-01 ~]# route add -host 172.16.4.1 dev lo:0

WEB-02配置

设置web页面

1

2

[root@WEB-02 ~]# echo "WEB-02" >/var/www/html/index.html

[root@WEB-02 ~]# service httpd start

设置内核参数

1

2

3

4

[root@WEB-02 ~]# echo "1">/proc/sys/net/ipv4/conf/lo/arp_ignore

[root@WEB-02 ~]# echo "2">/proc/sys/net/ipv4/conf/lo/arp_announce

[root@WEB-02 ~]# echo "1">/proc/sys/net/ipv4/conf/all/arp_ignore

[root@WEB-02 ~]# echo "2">/proc/sys/net/ipv4/conf/all/arp_announce

设置VIP

1

2

3

4

5

[root@WEB-02 ~]# ifconfig lo:0 172.16.4.1 broadcast172.16.4.1 netmask 255.255.255.255 up

 ifconfig |grep 172.16.4.1

[root@WEB-02 ~]# ifconfig | grep 172.16.4.1

         inet addr:172.16.4.102 Bcast:172.16.255.255 Mask:255.255.0.0

         inet addr:172.16.4.1 Mask:255.255.255.255

设置路由

1

[root@WEB-02 ~]# route add -host 172.16.4.1 dev lo:0

调度器设置

确保lvs可以访问后端web服务器

1

2

3

4

[root@LVS ~]# curl 172.16.4.101

WEB-01

[root@LVS ~]# curl 172.16.4.102

WEB-02

设置vip地址

1

2

3

4

5

[root@LVS ~]# ifconfig eth0:0 172.16.4.1 netmask255.255.255.255 up

ifconfig grep 172.16.4.1

[root@LVS ~]# ifconfig | grep 172.16.4.1

         inet addr:172.16.4.100 Bcast:172.16.255.255 Mask:255.255.0.0

         inet addr:172.16.4.1 Bcast:172.16.4.1 Mask:255.255.255.255

配置负载均衡策略

1

2

3

[root@LVS ~]# ipvsadm -A -t 172.16.4.1:80 -s rr

[root@LVS ~]# ipvsadm -a -t 172.16.4.1:80 -r172.16.4.10 -g -w 1

[root@LVS ~]# ipvsadm -a -t 172.16.4.1:80 -r172.16.4.11 -g -w 1

客户端访问验证,持续刷新如果出现轮训效果说明配置成功

特殊情况:httpd启用长连接时的lvs轮询

httpd启动长连接的方式。

1

2

3

KeepAlive ON

MaxKeepAliveRequests 100

KeepAliveTimeout 15

启动之后,客户端请求通过lvs调度到后端的RS服务器,会始终调度到一个页面,直到长连接结束,rr的调度算法在这种情况下是不会实现轮训的。

使用脚本配置LVS-DR

Direction使用的脚本

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

#!/bin/bash

#

vip=172.16.4.1

rip=('172.16.4.101' '172.16.4.102')

weight=('1' '1')

port=80

scheduler=rr

ipvstype='-g'

  

rpm -q ipvsadm >> /dev/null

if [ $? != 0 ];then

   echo"please install ipvsadm"

   exit 1

fi

  

case $1 in

start)

  iptables -F-t filter

  ipvsadm -C

  

  ifconfigeth0:0 $vip broadcast $vip netmask 255.255.255.255 up

  route add-host $vip dev eth0:0

  

  ipvsadm -A-t $vip:$port -s $scheduler

  [ $? -eq 0] && echo "ipvs service $vip:$port added."  || exit 2

  

  for in`seq 0 $[${#rip[@]}-1]`; do

     ipvsadm-a -t $vip:$port -r ${rip[$i]} $ipvstype -w ${weight[$i]}

     [ $? -eq0 ] && echo "RS ${rip[$i]} added."

  done

  

  touch/var/lock/subsys/ipvs

;;

  

stop)

  ipvsadm -C

  ifconfigeth0:0 down

  rm -f /var/lock/subsys/ipvs

  echo"ipvs stopped."

;;

  

status)

  if [ -f/var/lock/subsys/ipvs ]; then

        echo"ipvs is running."

       ipvsadm -L -n

  else

        echo"ipvs is stopped."

  fi

;;

  

*)

  echo"Usage: `basename $0` {start|stop|status}"

  exit 3

;;

esac

RS使用的脚本

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

#!/bin/bash

#

vip=172.16.4.1

interface="lo:0"

  

case $1 in

start)

   echo 1> /proc/sys/net/ipv4/conf/all/arp_ignore

   echo 1> /proc/sys/net/ipv4/conf/lo/arp_ignore

   echo 2> /proc/sys/net/ipv4/conf/all/arp_announce

   echo 2> /proc/sys/net/ipv4/conf/lo/arp_announce

  

   ifconfig$interface $vip broadcast $vip netmask 255.255.255.255 up

   route add-host $vip dev $interface

;;

  

stop)

  echo 0 >/proc/sys/net/ipv4/conf/all/arp_ignore

  echo 0 >/proc/sys/net/ipv4/conf/lo/arp_ignore

  echo 0 >/proc/sys/net/ipv4/conf/all/arp_announce

  echo 0 >/proc/sys/net/ipv4/conf/lo/arp_announce

  

  ifconfig$interface down

;;

  

status)

  if ifconfiglo:0 |grep $vip &> /dev/nullthen

        echo"ipvs is running."

  else

        echo"ipvs is stopped."

  fi

;;

  

*)

  

  echo"Usage: `basename $0` {start|stop|status}"

  exit 1

esac

猜你喜欢

转载自blog.csdn.net/sanyaoxu_2/article/details/79140529