一、规划

lvs-nat
lvs-nat

1#通过模块克隆了三台主机
2virt-clone -o centos6 -n lvs-dr -f lvs-dr.img
3virt-clone -o centos6 -n lvs01 -f lvs01.img
4virt-clone -o centos6 -n lvs02 -f lvs02.img
5#三台主机对应的IP信息如下
6lvs-dr:172.25.0.10
7       192.168.122.100
8lvs01:192.168.122.10
9lvs02:192.168.122.20

二、lvs-nat配置

1、lvs-dr主机上配置

配置比较简单,这里写了一个简单的脚本,启动即可。内容如下:

 1#!/bin/sh
 2# description: start LVS of Nat
 3DIP=172.25.0.10
 4RIP1=192.168.122.10
 5RIP2=192.168.122.20
 6GW=192.168.122.100
 7. /etc/rc.d/init.d/functions
 8case "$1" in
 9 start)
10     echo " start LVS of NAtServer"
11     # 开启路由转发
12     echo "1" >/proc/sys/net/ipv4/ip_forward
13     # 禁用发送ICMP IPv4重定向消息,默认是开启,值为1
14     echo "0" >/proc/sys/net/ipv4/conf/all/send_redirects
15     echo "0" >/proc/sys/net/ipv4/conf/default/send_redirects
16     echo "0" >/proc/sys/net/ipv4/conf/eth0/send_redirects
17     echo "0" >/proc/sys/net/ipv4/conf/eth1/send_redirects(内网卡上的)
18     #Clear IPVS table
19     /sbin/ipvsadm -C
20     #set LVS
21     /sbin/ipvsadm -A -t 172.25.0.10:80 -s rr
22     /sbin/ipvsadm -a -t 172.25.0.10:80 -r 192.168.122.10:80 -m -w 5
23     /sbin/ipvsadm -a -t 172.25.0.10:80 -r 192.168.122.20:80 -m -w 10
24     #Run LVS
25     /sbin/ipvsadm
26     #end
27 ;;
28 stop)
29     echo "close LVS Nat server"
30     echo "0" >/proc/sys/net/ipv4/ip_forward
31     echo "1" >/proc/sys/net/ipv4/conf/all/send_redirects
32     echo "1" >/proc/sys/net/ipv4/conf/default/send_redirects
33     echo "1" >/proc/sys/net/ipv4/conf/eth0/send_redirects
34     echo "1" >/proc/sys/net/ipv4/conf/eth1/send_redirects(内网卡上的)
35     /sbin/ipvsadm -C
36 ;;
37 *)
38    echo "Usage: $0 {start|stop}"
39    exit 1
40esac

注释:

1、使用NAT模式必须要开启路由转发;

2、禁用发送ICMP ipv4重定向消息主要是出于安全考虑,并不影响ping检测;

3、ipvsadm 这里使用的是Round Robin轮询算法,-m 参数是指定使用的masquerading nat模式,-w 参数是指定权重,在 rr算法下,指定权重是没意义的,因为两台主机的的权重是一样的,每台主机都是公平平均轮询的。

2、lvs01与02主机配置

两台主机上需要将默认网关指向到同网段的lvs-dr主机IP,在本示例中,需要指定网关为192.168.122.100,两台主机上可通过如下命令增加

1route add default gw 192.168.122.100

也可以在主机的网卡配置文件中直接指定。

3、测试

在两台主机上分别安装httpd服务并指定一个简单的页面,可通过curl 获取页面测试,具体如下:

1[root@lvs-dr ~]# curl http://172.25.0.10
2lvs01 host!
3[root@lvs-dr ~]# curl http://172.25.0.10
4lvs02 host!
5[root@lvs-dr ~]# curl http://172.25.0.10
6lvs01 host!
7[root@lvs-dr ~]# curl http://172.25.0.10
8lvs02 host!

通过ipvsadm命令直接修改对应的算法后再进行测试如下;

 1修改lvs算法为wrr
 2[root@lvs-dr ~]# /sbin/ipvsadm -E  -t 172.25.0.10:80 -s wrr
 3测试结果如下:
 4[root@lvs-dr ~]# curl http://172.25.0.10
 5lvs02 host!
 6[root@lvs-dr ~]# curl http://172.25.0.10
 7lvs02 host!
 8[root@lvs-dr ~]# curl http://172.25.0.10
 9lvs01 host!
10[root@lvs-dr ~]# curl http://172.25.0.10
11lvs02 host!
12……………省略

也可以用ipvsadm确认当前连接情况:

1[root@lvs-dr ~]# ipvsadm -Ln
2IP Virtual Server version 1.2.1 (size=4096)
3Prot LocalAddress:Port Scheduler Flags
4  -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
5TCP  172.25.0.10:80 wrr
6  -> 192.168.122.10:80            Masq    5      0          0
7  -> 192.168.122.20:80            Masq    10     0          2

4、配置保存

通过ipvsadm服务可以将当前的配置保存,默认保存在/etc/sysconfig/ipvsadm,主机开机自启动ipvsadm服务时会自动读取该文件:

1[root@lvs-dr ~]# /etc/init.d/ipvsadm save
2ipvsadm: Saving IPVS table to /etc/sysconfig/ipvsadm:      [  OK  ]

还有一个命令ipvsadm-save命令可以将当前配置输出,可以通过重定向输出到指定文件,这有点类似于iptables 服务与iptables-save命令。

三、总结

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

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