(1)环境说明,需要4个公网IP。(私网IP模拟公网IP)

三台机器:

director(eth0192.168.1.80, vip eth0:0: 192.168.1.90)

real server1(eth0 rip: 192.168. 1.60, vip lo:0: 192.168.1.90)

real server2(eth0 rip: 192.168.1.70, vip lo:0: 192.168.1.90)

注:如果之前做过NAT负载,需要清空dir配置,停止服务和rs的网关还原。

(2)编写脚本

Director 上执行

# vim /usr/local/sbin/lvs_dr.sh

增加如下内容:

#!/bin/bash

echo 1 > /proc/sys/net/ipv4/ip_forward

ipv=/sbin/ipvsadm

vip=192.168.1.90

rs1=192.168.1.60

rs2=192.168.1.70

ifconfig eth0:0 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip dev eth0:0

$ipv –C

$ipv -A -t $vip:80 -s rr

$ipv -a -t $vip:80 -r $rs1:80 -g -w 1

$ipv -a -t $vip:80 -r $rs2:80 -g -w 1

保存


注:配置一个虚拟IP,注意掩码是32位。然后增加路由。

$ipv –C 清空负载均衡主机配置

$ipv -A -t $vip:80 -s rr  #-A增加dir主机,-s增加算法

$ipv -a -t $vip:80 -r $rs1:80 -g -w 1  #-a增加后台提供服务的真实服务器 -g为DR模式 -w权重


在两台 rs 上执行

# vim /usr/local/sbin/lvs_dr_rs.sh

增加如下内容:

#!/bin/bash

vip=192.168.1.90

ifconfig lo:0 $vip broadcast $vip netmask 255.255.255.255 up

route add -host $vip lo:0

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

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

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

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

保存,然后分别执行rs脚本和dir脚本

注:真实服务器绑定虚拟IP到回环口,并做一些arp策略。

注:关于 arp_ignore 和 arp_announce 参考:http://www.cnblogs.com/lgfeng/archive/2012/10/16/2726308.html


(3 )测试

Windows 下浏览器测试访问 http://192.168.1.90,浏览器因为缓冲等原因,结果不准确。

可以用第4台虚拟,curl 192.168.1.90来测试,而不能在其他3台上测试。因为虚拟地址在rs上为回环本地地址,会显示本地的web页面。而dir上因为虚拟地址为32位,所以不通,本地为24位,不能测试。


注:如果测试过程中,有错误需要重启ipvadm,可以用ipvadm -C清空规则,然后重新执行脚本。


课后答疑:

这三个公网IP,不一定要都是独立的公网IP吧;只要是能上网的IP就行呗?

另外实际工作中,director是独立外网IP,real server 总共用一个公网IP吧?

答:要保证用户能通过它们的ip访问到它们。 dr和rs在lvs_dr模式下默认是每一台机器都要有一个公网ip,实际上它们可以共用一个公网IP,这个在咱们的6期课程大纲(内部教材)有一个帖子地址介绍。