ldirectord
- 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表中)
一、健康检查的概念
lvs对端无法检查,如果后端的真实服务器出现问题,那么在测试端测试的时候会返回给我们一个错误的页面,那么我们需要对后端服务器做健康检查,保证只返回正确的页面给用户。
二、模拟健康检查的实现
1、实验环境
- 主机环境配置
主机名(IP) | 服务 |
---|---|
server1(172.25.254.1) | virtualserver虚拟服务器 |
server2(172.25.254.2) | realserver(真实服务器) |
server3(172.25.254.3) | realserver(真实服务器) |
-
调度器(server1)添加vip
ip addr add 172.25.254.100/24 dev eth0 # 临时添加ip到eth0网卡
yum install httpd -y #安装httpd服务
vim /var/www/html/index.html #设置默认发布文件 -
server1 配置yum 源,安装ldirectord
在原有的yum 源里添加高可用的安装包
vim /etc/yum.repos.d/rhel-source.repo ##添加
高可用的软件包
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.254.1/iso/HighAvailability
enabled=1
gpgcheck=0
- 下载ldirectord安装包并进行安装
ldirectord-3.9.5-3.1.x86_64.rpm # 安装包可以网上进行下载
yum install ldirectord-3.9.5-3.1.x86_64.rpm -y # 安装软件
使用yum进行安装,同时可以安装该软件需要的依赖,所以上面需要配置高可用的yum源
rpm -qpl ldirectord-3.9.5-3.1.x86_64.rpm #查看ldirectord安装包的配置文件
- 设置ldirectord配置文件
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.254.100:80 # VIP
real=172.25.254.2:80 gate # 添加真实服务器
real=172.25.254.3:80 gate # 添加真实服务器
fallback=127.0.0.1:80 gate # 添加本机作为备用,当所有的真实服务器异常时候使用
service=http # 指定服务
scheduler=rr # 指定调度算法
protocol=tcp # 端口
checktype=negotiate # 健康检查方式
checkport=80 # 检查的端口
request="index.html"
- 启动服务:
systemctl start ldirectord
ystemctl enable ldirectord
-
下载lvs管理工具ipvsadm
这里只要安装该管理工具,不需要设置策略yum install ipvsadm -y # 安装工具 ipvsadm # 查看未进行策略设置
- 真实服务器设置arptable策略,解决将用户所有针对VIP的请求发送到DS 而不是RS**
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情况进行设置。
- server2上DR模式的配置
ip addr add 172.25.254.100/24 dev eth0 # 临时添加ip到eth0网卡
yum install httpd -y #安装httpd 服务
systemctl start httpd #开启httpd 服务
vim /var/www/html/index.html #编辑默认发布文件
yum install arptables -y # 安装管理工具
arptables -A INPUT -d 172.25.254.100 -j DROP # 设置不回应对自己VIP的请求
arptables -A OUTPUT -s 172.25.254.100 -j mangle --mangle-ip-s 172.25.254.2
#设置将发送出去的数据包的源ip修改成VIP
- server3上DR模式的配置(同server2)
ip addr add 172.25.254.100/24 dev eth0 # 临时添加ip到eth0网卡
yum install httpd -y #安装httpd 服务
systemctl start httpd #开启httpd 服务
vim /var/www/html/index.html #编辑默认发布文件
yum install arptables -y # 安装管理工具(类似于广播)
arptables -A INPUT -d 172.25.254.100 -j DROP # 设置不回应对自己VIP的请求
arptables -A OUTPUT -s 172.25.254.100 -j mangle --mangle-ip-s 172.25.254.3
#设置将发送出去的数据包的源ip修改成VIP
测试:
Ldirectord通过定期请求已知的URL并检查响应是否包含预期的响应来监视实际服务器的运行状况。如果一个真正的服务器出现故障,那么该服务器将被删除,并在重新联机后重新激活。如果所有真正的服务器都关闭了,那么会在池中插入一个回退服务器,这将使一个静态的真正的Web服务器重新联机。通常,回退服务器是本地主机。如果正在提供HTTP虚拟服务,那么运行一个ApacheHTTP服务器是很有用的,该服务器返回一个页面,指示该服务暂时不可访问。
1 当启动Ldirectord 之后,该服务会根据后端服务器的健康情况以及配置文件中设置好的自动身成负载均衡策略:
[root@server1 ha.d]# ipvsadm
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP server1:http rr
-> 172.25.254.2:http Route 1 0 0
-> 172.25.254.3:http Route 1 0 0
客户端访问测试:
[root@foundation47 ~]# curl 172.25.254.100
server3
[root@foundation47 ~]# curl 172.25.254.100
server2
[root@foundation47 ~]# curl 172.25.254.100
server3
[root@foundation47 ~]# curl 172.25.254.100
server2
关闭172.25.254.2真实服务器的httpd服务,模拟该服务器宕机情况
#真实主服务器172.25.254.2 关闭服务
[root@server2 ~]# systemctl stop httpd
查看调度器策略,已经将该异常服务器移除:
[root@server1 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.254.3:http Route 1 0 0 # 只剩余一台后端服务器
客户端测试:只能访问到正常的后端服务器
[root@foundation47 ~]# curl 172.25.254.100
server3
[root@foundation47 ~]# curl 172.25.254.100
server3
[root@foundation47 ~]# curl 172.25.254.100
server3
当异常的后端服务器恢复正常的时候,调度器会根据恢复情况自动添加该服务器
[root@server2 ~]# systemctl start httpd
恢复之后再次查看调度器策略:
[root@server1 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.254.2:http Route 1 0 0
-> 172.25.254.3:http Route 1 0 0 # 自动将恢复的后端服务器添加进来
客户端测试:
[root@foundation47 ~]# curl 172.25.254.100
server3
[root@foundation47 ~]# curl 172.25.254.100
server2
[root@foundation47 ~]# curl 172.25.254.100
server3
[root@foundation47 ~]# curl 172.25.254.100
server2
关闭所有的后端服务器,测试时候会启动本机作为备用的服务
关闭所有真实服务器的服务:
[root@server3 ~]# systemctl stop httpd # 关闭第一个真实服务器
[root@server2 ~]# 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.254.100
all real server is down
[root@foundation47 ~]# curl 172.25.254.100
all real server is down