lvs的三种搭建模型

  • NAT模式
    优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,物理服务器可以分配Internet的保留私有地址,只有负载均衡器需要一个合法的IP地址。

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

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

  • 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等。
    不足:要求负载均衡器的网卡必须与物理网卡在一个物理段上
    DR

使用LVS搭建基于四层网络模型的负载均衡器 DR模式

命令解释

1
2
3
4
5
6
7
8
9
10
11
12
rr:轮循
wrr:
dh:
sh:

动态调度方法:
lc: 最少连接
wlc: 加权最少连接
sed: 最短期望延迟
nq: never queue
LBLC: 基于本地的最少连接
LBLCR: 基于本地的带复制功能的最少连接
1
2
3
4
5
6
7
8
9
10
11
12
kernel parameter:
目标mac地址为全F,交换机触发广播
/proc/sys/net/ipv4/conf/*IF*/
arp_ignore: 定义接收到ARP请求时的响应级别;
0:只要本地配置的有相应地址,就给予响应;
1:仅在请求的目标(MAC)地址配置请求
到达的接口上的时候,才给予响应;

arp_announce:定义将自己地址向外通告时的通告级别;
0:将本地任何接口上的任何地址向外通告;
1:试图仅向目标网络通告与其网络匹配的地址;
2:仅向与本地接口上地址匹配的网络进行通告;
1
2
3
4
5
6
7
8
9
10
11
12
13
yum install ipvsadm -y

管理集群服务
添加:-A -t|u|f service-address [-s scheduler]
-t: TCP协议的集群
-u: UDP协议的集群
service-address: IP:PORT
-f: FWM: 防火墙标记
service-address: Mark Number
修改:-E
删除:-D -t|u|f service-address

ipvsadm -A -t 192.168.9.100:80 -s rr
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
添加:ipvsadm  -a -t|u|f service-address -r server-address [-g|i|m] [-w weight]
-t|u|f service-address:事先定义好的某集群服务
-r server-address: 某RS的地址,在NAT模型中,可使用IP:PORT实现端口映射;
[-g|i|m]: LVS类型
-g: DR
-i: TUN
-m: NAT
[-w weight]: 定义服务器权重
修改:-e
删除:-d -t|u|f service-address -r server-address
# ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.8 –g
# ipvsadm -a -t 172.16.100.1:80 -r 192.168.10.9 -g
查看
-L|l
-n: 数字格式显示主机地址和端口
--stats:统计数据
--rate: 速率
--timeout: 显示tcp、tcpfin和udp的会话超时时长
-:c 显示当前的ipvs连接状况
删除所有集群服务
-C:清空ipvs规则
保存规则
-S
# ipvsadm -S > /path/to/somefile
载入此前的规则:
-R
# ipvsadm -R < /path/form/somefile
  • 拓扑图lvs-DR拓扑图
  • 开始搭建

1.在192.168.150.11 中添加192.168.150.100的网卡

1
2
3
4
添加网卡  ifconfig eth0:2 192.168.150.100/24

注意/24代表子网掩码是255.255.255.1

删除 eth0:2网卡 ifconfig eth0:2 down

2.调192.168.150.12 和 192.168.150.13的内核协议

1
2
3
4
5
echo 1  >  /proc/sys/net/ipv4/conf/eth0/arp_ignore 
echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/eth0/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce

3.配置192.168.150.12 和 192.168.150.13环行路由

1
ifconfig lo:2 192.168.150.100 netmask 255.255.255.255

4.在 192.168.150.12 和 192.168.150.13中安装 httpd

1
2
3
yum install httpd -y
启动 service httpd start
创建主页vi /var/www/html/index.html

5在浏览器中输入192.168.150.12:80测试

6.在192.168.150.11 中安装 ipvsadm

1
2
3
4
5
6
7
yum install ipvsadm -y
添加进包的规则:ipvsadm -A -t 192.168.150.100:80 -s rr
添加负载的规则:
ipvsadm -a -t 192.168.150.100:80 -r 192.168.150.12 -g -w 1
ipvsadm -a -t 192.168.150.100:80 -r 192.168.150.13 -g -w 1

查看规则:ipvsadm -ln

7.验证:

1
2
3
4
5
6
7
8
9
10
11
浏览器访问  192.168.150.100   看到负载  F5属性
192.168.150.11:
netstat -natp 结论看不到socket连接
192.168.150.12~192.168.150.13:
netstat -natp 结论看到很多的socket连接
192.168.150.11:
ipvsadm -lnc 查看偷窥记录本
TCP 00:57 FIN_WAIT 192.168.150.1:51587 192.168.150.100:80 192.168.150.12:80

FIN_WAIT: 连接过,偷窥了所有的包
SYN_RECV: 基本上lvs都记录了,证明lvs没事,一定是后边网络层出问题