首先我们有三台主机:其中172.16.192.168作为前台主机;另外172.16.254.18和172.16.254.105作为后端主机,作为测试分别运行有web服务,并测试可用,如下图。

LVS集群DR、NAT模型配置, 及使用ldirectord完成LVS DR模型集群搭建_drLVS集群DR、NAT模型配置, 及使用ldirectord完成LVS DR模型集群搭建_模型集群_02


一、LVS NAT模型集群配置实验


1、首先在后端Real Server上设置默认网关,执行前端Virtual Server

LVS集群DR、NAT模型配置, 及使用ldirectord完成LVS DR模型集群搭建_模型集群_03


2、在前端Virtual Server上开启路由转发功能

LVS集群DR、NAT模型配置, 及使用ldirectord完成LVS DR模型集群搭建_dr_04


3、配置前端LVS集群

LVS集群DR、NAT模型配置, 及使用ldirectord完成LVS DR模型集群搭建_lvs_05


4、测试

LVS集群DR、NAT模型配置, 及使用ldirectord完成LVS DR模型集群搭建_dr_06


总结:经过初步测试,我们可以看出已经可以实现rr轮询调度,修改相应的调度算法则可以实现不同的调度效果。另外,需要注意客户端主机要与后端Real Server处于不同网段,否则返回报文不经过默认路由,则会出错。


二、LVS DR模型集群配置实验


首先重启3台服务器的网络服务,以恢复之前NAT实验的网络环境。


1、在两台后端Real Server 分别做如下配置:

echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
ifconfig lo:0  172.16.192.169 netmask 255.255.255.255 broadcast 172.16.192.169 up
route add -host 172.16.192.169 dev lo:0


2、在前端Virtual Server上做如下配置:

ifconfig eno16777728:0 172.16.192.169 netmask 255.255.255.255 broadcast 172.16.192.169 up

并配置对应的LVS,如下图

LVS集群DR、NAT模型配置, 及使用ldirectord完成LVS DR模型集群搭建_lvs_07


3、测试

LVS集群DR、NAT模型配置, 及使用ldirectord完成LVS DR模型集群搭建_dr_08LVS集群DR、NAT模型配置, 及使用ldirectord完成LVS DR模型集群搭建_模型集群_09


在浏览器中输入172.16.192.169进行访问,可以看出后端主机可以实现正常调度,并且多次刷新能够发现Server1的调度次数大致是Server2的两倍,由此说明完整实现LVS的DR模型负载均衡调度


总结:在DR模型中Real Server的默认网关不应设置为DIP,并且Real Server应能够通过其网关直接访问Client,从而实现将返回报文直接发送至客户端。另外,DR模型的配置相对较为复杂,可以将相关操作写成脚本,能够降低操作复杂度,同时减少出错概率。


三、使用ldirectord配置LVS集群


默认在官方yum仓库及epel仓库没有ldirectord软件包,因此我们需要事先从网络获取安装包。

下载路径:http://pan.baidu.com/s/1i4DAcgX#list/path=%2FOpenSource

将软件包下载至本地,使用yum进行安装,解决相关依赖关系

yum  install  -y  ldirectord-3.9.6-0rc1.1.1.x86_64.rpm

复制示例配置文件到/etc/ha.d目录下(或在/etc/ha.d/目录下创建ldirectord.cf文件)

cp /usr/share/doc/ldirectord-3.9.6/ldirectord.cf   /etc/ha.d


DR模型配置


a、在Virtual Server上配置VIP

ifconfig  eno16777736:0  172.16.192.169  netmask  255.255.255.255  broadcast  172.16.192.169  up


b、在Real Server上配置内核参数,在lo回环网络上配置VIP

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

   echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
   echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
   echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
  ifconfig lo:0 172.16.192.169 netmask 255.255.255.255 broadcast 172.16.192.169 up

  route add -host 172.16.192.169 dev lo:0


c、编辑ldirectord配置文件:

checktimeout=3
checkinterval=1 
autoreload=yes
logfile="/var/log/ldirectord.log"
quiescent=no
virtual=172.16.192.169:80
    real=172.16.254.105:80 gate 2
    real=172.16.254.18:80 gate 1
    fallback=127.0.0.1:80 gate  //故障提示主机,当所有服务均不可用时启用
    service=http  //  表明后端服务为http服务
     protocol=tcp
    scheduler=wrr
    checktype=negotiate   //  对后端主机进行健康状态检查
    checkport=80
    request="index.html"    //  健康状态检查的资源页面
    receive="Server"    //  需要在检查页面检测到"Server"关键字才表明访问正常

配置完成后,启动ldirectord服务


d、在Virtual Server上配置并启动web服务作为服务不可用时的提示信息


e、测试

LVS集群DR、NAT模型配置, 及使用ldirectord完成LVS DR模型集群搭建_dr_08LVS集群DR、NAT模型配置, 及使用ldirectord完成LVS DR模型集群搭建_模型集群_09


经测试可看出后端主机调度正常,并可根据事先设定的权重进行调度。如果要修改为其他调度算法,可以修改"scheduler=wrr"的值。如果要修改为其他LVS模型,只需将"real=172.16.254.105:80 gate 2"中的调度模型gate改为其他值即可。


总结:ldirectord能够很好的实现LVS的管理,不再需要手动的进行集群添加及后端主机的添加,全部工作都可以一次性在配置文件中完成;并且ldirectord可基于http协议完成后端主机的健康状态检查,从而自动调整集群中的Real Server配置。但需要注意的是,无论是使用ipvsadm还是使用ldirectord进行LVS的管理,都需要事先完成网络环境的基础配置,如Virtual IP的配置及内核参数的配置等。