一、规划
#通过模块克隆了三台主机 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主机上配置
配置比较简单,这里写了一个简单的脚本,启动即可。内容如下:
#!/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
注释:
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,两台主机上可通过如下命令增加
route add default gw 192.168.122.100
也可以在主机的网卡配置文件中直接指定。
3、测试
在两台主机上分别安装httpd服务并指定一个简单的页面,可通过curl 获取页面测试,具体如下:
[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命令直接修改对应的算法后再进行测试如下;
修改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确认当前连接情况:
[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
4、配置保存
通过ipvsadm服务可以将当前的配置保存,默认保存在/etc/sysconfig/ipvsadm,主机开机自启动ipvsadm服务时会自动读取该文件:
[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台物理服务器计算。