问题: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 #使用标签模式,注释协议这一行