实验拓扑:
基于keepalived的LVS-DR模型构建_第1张图片
基础环境的准备:
两台keepalived的高可用服务器,两台real server用于配置httpd服务
在两台real server上安装httpd服务并创建测试页面:

 关闭防火墙跟selinux之后开始配置
 yum install -y httpd
 systemctl start httpd
 systemctl enable httpd
 vim /var/www/html/index.html   //创建测试页面
 This httpd-1 Page
 另一台real server做同样配置

配置两台高可用服务器,在安装keepalived之前先验证以下LVS-DR模型,验证完之后在安装keepalived进行高可用的配置
yum install -y ipvsadm
添加vip地址
ip addr add 192.168.153.100/32 dev ens33

基于keepalived的LVS-DR模型构建_第2张图片

配置两个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
将vip地址配置在两台real server的回环接口的别名上
ifconfig lo:0 192.168.153.100  netmask 255.255.255.255 broadcast 192.168.153.100  up
route add  -host 192.168.153.100  dev lo:0

基于keepalived的LVS-DR模型构建_第3张图片

在LVS调度器上面添加规则
ipvsadm -A -t  192.168.153.100:80 -s rr
ipvsadm -a -t 192.168.153.100:80 -r 192.168.153.7 -g -w 1
ipvsadm -a -t 192.168.153.100:80 -r 192.168.153.8 -g -w 2
将会话连接时长设置为1秒
ipvsadm --set 1 1 1
使用客户端浏览器验证一下

基于keepalived的LVS-DR模型构建_第4张图片
基于keepalived的LVS-DR模型构建_第5张图片
备注:这里有一个注意事项,我们自己平时在做练习的时候习惯使用vmware虚拟出几台主机进行使用,有时候我们在使用同一个vmware软件虚拟出来的主机进行LVS-DR模型构建时有可能造成MAC地址错乱,导致实验失败致使调度器只能将请求调度到一台后端服务器上面,此时我们可以在windews的客户端上面查看一下arp地址解析,如果VIP物理地址跟调度器的DIP物理地址一样则配置成功,如果不一样就需要进行故障排查了。这里建议如果实验机器不够用的话使用两台不同的物理主机安装两个vmware软件,让负载均衡调度器跟real server服务器在两个环境中进行实验。
基于keepalived的LVS-DR模型构建_第6张图片
然后将这台调度器的ipvs规则清空,在另一台负载均衡调度器上面配置ipvs规则进行测试,当测试完毕后我们清空两台调度器的所有规则,因为keepalived的LVS高可用性不需要ipvsadm工具进行规则配置。
此时安装keepalived软件包并配置高可用服务器的错误页面

yum install -y keepalived
systemctl start keepalived
systemctl enable keepalived
yum install -y httpd
vim /var/www/html/index.html
Sorry,The httpd-1 page is not have
修改keepalived的配置文件
cp /etc/keepalived/keepalivd.conf   keepalived.conf.bak
vim keepalived.conf

配置信息如下:

! Configuration File for keepalived

global_defs {
   notification_email {
        [email protected]
   }

   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL     //定义router_id
}
vrrp_script chk_file {
        script "/etc/keepalived/chk_file.sh"    //定义服务启动关闭脚本文件
        interval 1
        weight -2
}

vrrp_instance VI_1 {
    state MASTER
    interface ens33
    virtual_router_id 43   //虚拟路由id,两台高可用服务器路由id保持一致
    priority 100              
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass qwer
    }
    virtual_ipaddress {
        192.168.153.100/32 dev ens33 label   ens33:0  //将VIP地址配置在virtual中
        }
   track_script {
        chk_file    //调用脚本
        }
}
virtual_server 192.168.153.100 80 {   //定义虚拟服务器的配置信息
    delay_loop 6
    lb_algo wrr   //调度方法
    lb_kind DR //LVS类型
    nat_mask 255.255.255.0
   persistence_timeout 50     //会话连接时长
    protocol TCP               //使用TCP协议
   sorry_server 127.0.0.1 80  //定义错误页面,当后端服务器全部宕机则返回此页面

    real_server 192.168.153.7 80  {   //定义后端的real server信息
        weight 1    //权重为1
        HTTP_GET {    //使用健康状态检测
            url {
              path /    //路径为根目录
              status_code  200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }

    real_server 192.168.153.8 80  {     //另一台real server
        weight 2        //权重为2
        HTTP_GET {
            url {
              path /
              status_code  200
            }
            connect_timeout 3
            nb_get_retry 3
            delay_before_retry 3
        }
    }
}

重启keepalived服务,查看ip地址
基于keepalived的LVS-DR模型构建_第7张图片
使用ipvsadm -L -n查看规则发现ipvs的规则自动生成
基于keepalived的LVS-DR模型构建_第8张图片
在keepalived配置文件目录下创建chk_file.sh脚本文件

#!/bin/bash
if [ -f /etc/keepalived/down ];then
        exit 1
fi
exit 0
~        

复制文件到另一台高可用服务器,并修改vrrp_instance VI_1中的 state 为BACKUP, priority 为99,保存配置文件并重新启动第二台高可用服务器的keepalived服务。
使用客户端浏览器访问
基于keepalived的LVS-DR模型构建_第9张图片
这时发现只能访问到一个节点,是因为我们开启了keepalived的会话连接功能,我们现在将配置文件中的 persistence_timeout 50 一项注释掉
然后再次使用客户端浏览器重新请求

基于keepalived的LVS-DR模型构建_第10张图片
基于keepalived的LVS-DR模型构建_第11张图片
根据定义的脚本信息,在keepalived配置文件的目录下touch一个down文件让第一台高可用宕掉
查看第二台高可用服务器

基于keepalived的LVS-DR模型构建_第12张图片
基于keepalived的LVS-DR模型构建_第13张图片
使用客户端访问依然可以访问到后端的real server
这里我们手动停止两台real server的httpd服务
查看一下高可用服务器的ipvs规则

基于keepalived的LVS-DR模型构建_第14张图片
使用客户端请求发现返回sorry_server信息
基于keepalived的LVS-DR模型构建_第15张图片
此时配置完毕,所有服务运行正常