ldirectord是一个守护进程,用于监视和管理负载平衡虚拟服务器的LVS集群中的真实服务器。ldirectord通常用作Linux HA的资源,但也可以从命令行运行。使用ldirectord程序,这个程序在启动时自动建立IPVS表,然后监视集群节点的健康情况,在发现失效节点时将其自动从IPVS表中移除
ldirectord守护进程通过向每台真实服务器真实IP(RIP)上的集群资源发送访问请求来实现对真实服务器的监控,这对所有类型的LVS集群都是成立的:LVS-DR,LVS-NAT和LVS-TUN。
正常情况下,为每个Director上的VIP地址运行一个ldirectord守护进程,当真实服务器不响应运行在Director上的ldirectord守护进程时,ldirectord守护进程运行适当的ipvsadm命令将VIP地址从IPVS表中移除。(以后,当真实服务器回到在线状态时,ldirectord使用适当的ipvsadm命令将真实服务器重新添加到IPVS表中)
[toto7.3] # 原有的源
name=toto
gpgcheck=0
enable=1
baseurl=http://172.25.47.250/toto_7.3
[HighAvailability] # 添加高可用部分源
name=HighAvailability
gpgcheck=0
enable=1
baseurl=http://172.25.47.250/toto_7.3/addons/HighAvailability
ldirectord-3.9.5-3.1.x86_64.rpm
# 安装包可以网上进行下载
yum install ldirectord-3.9.5-3.1.x86_64.rpm -y # 安装软件
使用yum进行安装,同时可以安装该软件需要的依赖,所以上面需要配置高可用的yum源
这里只要安装该管理工具,不需要设置策略。
#安装lvs管理工具
[root@toto1 ~]# yum install ipvsadm -y # 安装工具
[root@toto1 ~]# ipvsadm # 未进行策略设置
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
ldirectord有一个配置文件/etc/ha.d/ldirectord.cf
,但是该文件需要从别的地方复制到该位置。用于指定虚拟服务及其关联的实际服务器。初始化lddirectord时,它会为集群创建虚拟服务
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/ # 复制过来配置文件
以下为修改之后的配置文件的内容:
checktimeout=3 #后端服务器健康检查等待时间
checkinterval=1 #两次检查间隔时间
autoreload=yes #自动添加或者移除真实服务器
quiescent=no #故障时移除服务器的时候中断所有连接
virtual=172.25.47.100:80 # VIP
real=172.25.47.120:80 gate # 添加真实服务器
real=172.25.47.130:80 gate # 添加真实服务器
fallback=127.0.0.1:80 gate # 添加本机作为备用,当所有的真实服务器异常时候使用
service=http # 指定服务
scheduler=rr # 指定调度算法
protocol=tcp # 端口
checktype=negotiate # 健康检查方式
checkport=80 # 检查的端口
request="index.html"
启动服务
[root@toto1 ha.d]# systemctl start ldirectord
[root@toto1 ha.d]# systemctl enable ldirectord
ip addr add 172.25.47.100/24 dev eth0
# 临时添加ip到eth0网卡
同时配置文件中指定,调度器本机作为一个备用服务器,所有本机也需要安装httpd服务并且设置共享页面。
如果客户访问的是本机的服务,说明所有的后端服务器都已经瘫痪
yum install arptables -y # 安装管理工具
arptables -A INPUT -d 172.25.47.100 -j DROP # 设置不回应对自己VIP的请求
arptables -A OUTPUT -s 172.25.47.100 -j mangle --mangle-ip-s 172.25.47.120
#设置将发送出去的数据包的源ip修改成VIP
所有的真实服务器根据自己的实际ip情况进行设置。
Ldirectord通过定期请求已知的URL并检查响应是否包含预期的响应来监视实际服务器的运行状况。如果一个真正的服务器出现故障,那么该服务器将被删除,并在重新联机后重新激活。如果所有真正的服务器都关闭了,那么会在池中插入一个回退服务器,这将使一个静态的真正的Web服务器重新联机。通常,回退服务器是本地主机。如果正在提供HTTP虚拟服务,那么运行一个ApacheHTTP服务器是很有用的,该服务器返回一个页面,指示该服务暂时不可访问。
1 当启动Ldirectord 之后,该服务会根据后端服务器的健康情况以及配置文件中设置好的自动身成负载均衡策略:
[root@toto1 ha.d]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP toto1:http rr
-> 172.25.47.120:http Route 1 0 0
-> 172.25.47.130:http Route 1 0 0
客户端访问测试:
[root@foundation47 ~]# curl 172.25.47.100
toto3
[root@foundation47 ~]# curl 172.25.47.100
toto2
[root@foundation47 ~]# curl 172.25.47.100
toto3
[root@foundation47 ~]# curl 172.25.47.100
toto2
[root@foundation47 ~]# curl 172.25.47.100
toto3
[root@foundation47 ~]# curl 172.25.47.100
2 关闭172.25.47.120 真实服务器的httpd服务,模拟该服务器宕机情况
#真实主服务器172.25.47.120 关闭服务
[root@toto2 ~]# systemctl stop httpd
查看调度器策略,已经将该异常服务器移除:
[root@toto1 ha.d]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP toto1:http rr
-> 172.25.47.130:http Route 1 0 0 # 只剩余一台后端服务器
客户端测试:只能访问到正常的后端服务器
[root@foundation47 ~]# curl 172.25.47.100
toto3
[root@foundation47 ~]# curl 172.25.47.100
toto3
[root@foundation47 ~]# curl 172.25.47.100
toto3
当异常的后端服务器恢复正常的时候,调度器会根据恢复情况自动添加该服务器
[root@toto2 ~]# systemctl start httpd
恢复之后再次查看调度器策略:
[root@toto1 ha.d]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP toto1:http rr
-> 172.25.47.120:http Route 1 0 0
-> 172.25.47.130:http Route 1 0 0 # 自动将恢复的后端服务器添加进来
客户端测试:
[root@foundation47 ~]# curl 172.25.47.100
toto2
[root@foundation47 ~]# curl 172.25.47.100
toto3
[root@foundation47 ~]# curl 172.25.47.100
toto2
[root@foundation47 ~]# curl 172.25.47.100
toto3
3 关闭所有的后端服务器,测试时候会启动本机作为备用的服务
关闭所有真实服务器的服务:
[root@toto3 ~]# systemctl stop httpd # 关闭第一个真实服务器
[root@toto2 ~]# systemctl stop httpd # 关闭第二个真实服务器
查看调度器的策略:
[root@toto1 ha.d]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP toto1:http rr
-> localhost:http Route 1 0 0 # 所有的真实服务器被移除,使用本机提供服务
客户端测试:将访问本机的服务内容
[root@foundation47 ~]# curl 172.25.47.100
all real server is down
[root@foundation47 ~]# curl 172.25.47.100
all real server is down