• LVS不可用时 :

    Director不可用,整个系统将不可用; SPoF Single Point of Failure

    解决方案: 高可用, keepalived 、 heartbeat/corosync

  • RS 不可用时 :

    某RS不可用时, Director依然会调度请求至RS。主要解决思路是 由Director对各RS健康状态进行检查, 失败时禁用, 成功时启用

    常用解决方案: keepalived、heartbeat/corosync、ldirectord

    检测方式:

    • 网络检测 , icmp

    • 传输层检测 , 端口探测

    • 应用层检测 , 请求某关键资源

  • RS全不用时 : backup server, sorry server

1. ldirectord软件

单独使用ipvsadm来实现的负载均衡 , 如果调度器和后端某台服务器不通 , 调度器不能及时发现 , 还去后端请求这台服务器 , 会导致请求不到而造成响应失败。ldirectord能够自动检测调度器和后端的网络状况 , 在后端某台服务器失效的情况下 , 自动把ipvsadm中记录这台服务器的权重变为0 ,如果恢复 , 又重新把权重变为设置的值。

ldirectord : 监控和控制LVS守护进程, 可管理LVS规则。

包名 : ldirectord-3.9.6-0rc1.1.1.x86_64.rpm

包下载地址 : http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-7/x86_64/

[root@Director ~]# rpm -ql ldirectord-3.9.6-0rc1.1.2.x86_64
/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
​
​
/var/log/ldirectord.log                            #日志
/var/run/ldirectord/ldirectord.pid                 #pid文件

2. ldirectord配置文件

  • DR模型http配置

    [root@Director ~]# cat /etc/ha.d/ldirectord.cf
    # Global Directives
    checktimeout=3                             #超时时长
    checkinterval=1                            #检测时间, 默认为10s检测一次。配置中表示每隔1s检查一次
    #fallback=127.0.0.1:80                     #全局指定sorry server
    #fallback6=[::1]:80
    autoreload=yes                             #当配置文件改变之后, 会自动重新加载配置文件
    logfile="/var/log/ldirectord.log"          #指定日志文件位置
    #logfile="local0"                          #指定日志设备类型
    #emailalert="admin@x.y.z"
    #emailalertfreq=3600
    #emailalertstatus=all
    quiescent=no                               #当RS down或者failback server down时,yes将修改权重为0,此配置有bug ; no为从调度列表中删除RS
    ​
    # Sample for an http virtual service
    virtual=192.168.194.200:80                 #指定VIP的FWM或者IP:PORT
            real=192.168.194.131 gate 1        #DR模型的RIP,权重设置为1
            real=192.168.194.141 gate 1
            fallback=127.0.0.1:80 gate         #局部设置fallback server
            service=http                       #指定需要监控的服务类型
            scheduler=wrr                      #指定调度算法
            #persistent=600                    #指定ipvs的持久时间
            #netmask=255.255.255.255
            protocol=tcp                       #设置检查协议类型:tcp/udp/fwm
            checktype=negotiate                #指定检查类型方式, 默认为negotiate。可以通过off关闭检查方式。如果后接数字 , 表示连接N次之后进行一次协商检测。
            checkport=80
            request="index.html"               #设置http请求的页面
            receive="192.168.194"              #检查request获取的字段, 如果匹配则保持连接, 如果不匹配则通过quiescent, 修改rs的权重或者从调度列表中删除rs。 获取的页面字段中需要包含192.168.194这些字符
            #virtualhost=www.x.y.z
    ​

    当后端RS服务全部宕之后会直接通过ipvs调度到fallback指定的服务器上。

    [root@Director ~]# ipvsadm -Ln
    IP Virtual Server version 1.2.1 (size=4096)
    Prot LocalAddress:Port Scheduler Flags
      -> RemoteAddress:Port           Forward Weight ActiveConn InActConn
    TCP  192.168.194.200:80 wrr
      -> 127.0.0.1:80                 Route   1      0          0         


熊熊