一、规划
<img src="https://www.361way.com/wp-content/uploads/2016/05/lvs-nat.png" title="lvs-nat" alt="lvs-nat" height="385" width="416" />
<br />
#通过模块克隆了三台主机
virt-clone -o centos6 -n lvs-dr -f lvs-dr.img
virt-clone -o centos6 -n lvs01 -f lvs01.img
virt-clone -o centos6 -n lvs02 -f lvs02.img
#三台主机对应的IP信息如下
lvs-dr:172.25.0.10
192.168.122.100
lvs01:192.168.122.10
lvs02:192.168.122.20
二、lvs-nat配置
1、lvs-dr主机上配置
配置比较简单,这里写了一个简单的脚本,启动即可。内容如下:
<br />
#!/bin/sh
# description: start LVS of Nat
DIP=172.25.0.10
RIP1=192.168.122.10
RIP2=192.168.122.20
GW=192.168.122.100
. /etc/rc.d/init.d/functions
case "$1" in
start)
echo " start LVS of NAtServer"
# 开启路由转发
echo "1" >/proc/sys/net/ipv4/ip_forward
# 禁用发送ICMP IPv4重定向消息,默认是开启,值为1
echo "0" >/proc/sys/net/ipv4/conf/all/send_redirects
echo "0" >/proc/sys/net/ipv4/conf/default/send_redirects
echo "0" >/proc/sys/net/ipv4/conf/eth0/send_redirects
echo "0" >/proc/sys/net/ipv4/conf/eth1/send_redirects(内网卡上的)
#Clear IPVS table
/sbin/ipvsadm -C
#set LVS
/sbin/ipvsadm -A -t 172.25.0.10:80 -s rr
/sbin/ipvsadm -a -t 172.25.0.10:80 -r 192.168.122.10:80 -m -w 5
/sbin/ipvsadm -a -t 172.25.0.10:80 -r 192.168.122.20:80 -m -w 10
#Run LVS
/sbin/ipvsadm
#end
;;
stop)
echo "close LVS Nat server"
echo "0" >/proc/sys/net/ipv4/ip_forward
echo "1" >/proc/sys/net/ipv4/conf/all/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/default/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/eth0/send_redirects
echo "1" >/proc/sys/net/ipv4/conf/eth1/send_redirects(内网卡上的)
/sbin/ipvsadm -C
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
<strong>注释:</strong>
1、使用NAT模式必须要开启路由转发;
2、禁用发送ICMP ipv4重定向消息主要是出于安全考虑,并不影响ping检测;
3、ipvsadm 这里使用的是Round Robin轮询算法,-m 参数是指定使用的masquerading nat模式,-w 参数是指定权重,<span style="color:#E53333;">在 rr算法下,指定权重是没意义的</span>,因为两台主机的的权重是一样的,每台主机都是公平平均轮询的。
2、lvs01与02主机配置
<span style="color:#E53333;">两台主机上需要将默认网关指向到同网段的lvs-dr主机IP</span>,在本示例中,需要指定网关为192.168.122.100,两台主机上可通过如下命令增加
<br />
route add default gw 192.168.122.100
也可以在主机的网卡配置文件中直接指定。
3、测试
在两台主机上分别安装httpd服务并指定一个简单的页面,可通过curl 获取页面测试,具体如下:
<br />
[root@lvs-dr ~]# curl http://172.25.0.10
lvs01 host!
[root@lvs-dr ~]# curl http://172.25.0.10
lvs02 host!
[root@lvs-dr ~]# curl http://172.25.0.10
lvs01 host!
[root@lvs-dr ~]# curl http://172.25.0.10
lvs02 host!
通过ipvsadm命令直接修改对应的算法后再进行测试如下;
<br />
修改lvs算法为wrr
[root@lvs-dr ~]# /sbin/ipvsadm -E -t 172.25.0.10:80 -s wrr
测试结果如下:
[root@lvs-dr ~]# curl http://172.25.0.10
lvs02 host!
[root@lvs-dr ~]# curl http://172.25.0.10
lvs02 host!
[root@lvs-dr ~]# curl http://172.25.0.10
lvs01 host!
[root@lvs-dr ~]# curl http://172.25.0.10
lvs02 host!
……………省略
也可以用ipvsadm确认当前连接情况:
<br />
[root@lvs-dr ~]# ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.25.0.10:80 wrr
-> 192.168.122.10:80 Masq 5 0 0
-> 192.168.122.20:80 Masq 10 0 2
<br />
4、配置保存
通过ipvsadm服务可以将当前的配置保存,默认保存在/etc/sysconfig/ipvsadm,主机开机自启动ipvsadm服务时会自动读取该文件:
<br />
[root@lvs-dr ~]# /etc/init.d/ipvsadm save
ipvsadm: 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台物理服务器计算。