问题:LVS由于没有健康行检查功能,当后端RS出现问题的时候还是会调度到损坏的RS服务器上

解决:1 编写脚本(编写一个for循环脚本,VS服务器每过1s使用curl命令访问一下后端的RS服务器,查看$?是否为0,不为0就使用ipvsadm -d删除即可)
        2 ldirectord:可以对后端RS实现健康性检查

ldirectord实现:

在VS服务器上操作

1 下载
                访问ldirectord的官方站点:
                        在google浏览器输入ldirectord访问官方站download page --> The Linux-HA Download Software Page --> OBS Repositories --> 根据系统版本选择 --> ldirectord-3.9.6-0rc1.1.2.x86_64.rpm

    2  安装
                yum install ldirectord-3.9.6-0rc1.1.2.x86_64.rpm           
                    #使用yum方式安装,因为依赖了太多perl包
    3 rpm -ql ldirectord                                          
        #查看此工具附带的程序以及应用信息
             /etc/ha.d
                /etc/ha.d/resource.d
                /etc/ha.d/resource.d/ldirectord
                /etc/logrotate.d/ldirectord
                /usr/lib/ocf/resource.d/heartbeat/ldirectord
                /usr/lib/systemd/system/ldirectord.service
                /usr/sbin/ldirectord
                /usr/share/doc/ldirectord-3.9.6
                /usr/share/doc/ldirectord-3.9.6/COPYING
                /usr/share/doc/ldirectord-3.9.6/ldirectord.cf
                /usr/share/man/man8/ldirectord.8.gz
4 cp /usr/share/doc/ldirectord-3.9.6/ldirectord.cf /etc/ha.d  
    #将ldirectord.cf文件复制到/etc/ha.d下,不用更改文件名,作为配置文件

5 vim /etc/ha.d/ldrectord.cf

                checktimeout=3         #后端服务器的超时时间,默认为3s,如果后端RS超过3s没有回应,则认为RS服务器出现问题
                checkinterval=1        #探测间隔,每隔1s探测一次RS服务器;
                fallback=127.0.0.1:80  #如果后端RS全宕机的话,也不向客户端返回错误信息,而是跳转到指定IP地址的服务器上返回一个自定义的错误信息,此处为本机;
                autoreload=yes         #当文件更改后会自动加载,无需重启ldirectord服务
                logfile="/var/log/ldirectord.log" #打开记录日志的功能,ldirectord的日志会保存在指定位置
                # Sample for an http virtual service
                virtual=10.0.0.100:80                                       #VIP地址以及端口号
                        real=192.168.27.144:80 gate 1                       #RS1服务器地址以及端口号 gate:DR模式 1:权重
                        real=192.168.27.145:80 gate 3               #RS2服务器地址以及端口号 gate:DR模式 3:权重
                        service=http                                            #服务的名称
                        scheduler=wrr                                       #指定算法类型,权重不同,所以使用wrr
                        #persistent=600                                     #是否保持持久连接,默认被注释
                        #netmask=255.255.255.255                  #子网掩码,不用管,默认被注释
                        protocol=tcp                                           #使用的协议类型
                        checktype=negotiate                             #检查后端RS的80端口以及网页文件
                        checkport=80                                        #被检查的端口
                        request="test.html"                                #被检查的页面文件

在RS服务器分别操作

                            echo "test" > /var/www/html/test.html               #在RS服务器上创建名为test.html的文件并且内容为test;
                            receive="test"                                      #查看页面文件中是否存在这个字符串
                        #virtualhost=www.x.y.z                              #把这行注释,不用加

6 启动

systemctl start ldirectord                                    #启动此项服务,启动后会自动添加ipvsadm策略

7 验证

1 在RS1服务器上更改test.html的文件内容;
                    echo 123 > /var/www/html/test.html

                2 在VS服务器上查看策略;
                    ipvsadm -ln             #此时就会减少一台RS服务器,如果都以同样的方式更改,就会返回sorry server服务器的信息

https与http认定为一个服务使用,打标签方式

            1 在VS服务器上操作
                vim /etc/ha.d/ldrectord.cf
                    virtual=10             #改成标签名称即可,其它的不用改
                    #protocol=tcp          #使用标签模式,注释协议这一行