接上一个实验:lvs的TUN模式搭建
接下来进行日常灵魂考问:
为什么要进行健康检测?
由于之前的LVS下的TUN 和DR 模式下,两个后端服务器是可以正常工作的。
原因一:在如今企业中,不能保证一台服务器是一直正常可以工作的,假若在轮询机制中的一台服务器出了错,客户就会轮询到那台坏了的服务器,影响客户体验为了不影响客户的正常访问,应该将它从集群当中踢出去,让客户不再轮询访问那台坏了的服务器,只把客户端的请求转发给状态好的那台web服务器
原因二:如果lvs集群当中所有的后备服务器都挂了,为了不影响客户的正常访问,在调度器上面也安装一个
httpd服务,当客户端访问调度器的时候,调度器直接通过自己的httpd服务告诉服务器坏了
以上这两种情况我们都要考虑到,因此要给客户端一个正常的回应
LVS+ldirectord:
安装:
此时LVS调度器需要一个ldirectord插件来实现这个作用,可以去官网上下载:
ldirectord-3.9.5-3.1.x86_64.rpm
放到LVS调度器上:
(1)第一次安装出现的问题
yum install -y ldirectord-3.9.5-3.1.x86_64.rpm
Error: Package: ldirectord-3.9.5-3.1.x86_64 (/ldirectord-3.9.5-3.1.x86_64)
Requires: resource-agents
说明:安装包从官网下载即可!
原因:没有使用系统自带的高可用套件,缺乏依赖,yum源进行配置(所需安装软件在光盘上就可以,不需要额外配置yum源!
(2)、第二次安装:
在主机上查看:
自带附加加高可用套件地址:
/var/www/html/new/addons/HighAvailability
在LVS 调度器上配置共享yum 源:
自带附加高可用:
[HighAvailability]
name=HighAvailability
baseurl=http://172.25.58.250/new/addons/HighAvailability
gpgcheck=0
- yum clean all
- yum repolist 可以看到,现在镜像里由4788个包
- yum install ldirectord-3.9.5-3.1.x86_64.rpm -y 进行安装插件
- 安装完毕后:
-
[root@server1 ~]# rpm -qc ldirectord 查看安装路径 /etc/logrotate.d/ldirectord [root@server1 ~]# rpm -qpl ldirectord-3.9.5-3.1.x86_64.rpm 查看各项信息 warning: ldirectord-3.9.5-3.1.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 7b709911: NOKEY /etc/ha.d /etc/ha.d/resource.d /etc/ha.d/resource.d/ldirectord /etc/init.d/ldirectord /etc/logrotate.d/ldirectord /usr/lib/ocf/resource.d/heartbeat/ldirectord /usr/sbin/ldirectord /usr/share/doc/ldirectord-3.9.5 /usr/share/doc/ldirectord-3.9.5/COPYING /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /usr/share/man/man8/ldirectord.8.gz cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d 然后: vim /etc/ha.d/ldirectord.cf
进入配置文件修改:
autoreload=yes
含义:启用这个选项,它使ldirectord按时计算这个配置文件的md5校验和值,看其是否有改动,当发现有改动时自动应用那些改动,这个方便的 特性运行你容易地改变集群的配置,你对配置文件改动后几秒,ldirectord将察觉到有改动,调用ipvsadm命令实现改动,从有效服务器池中移除 真实服务器或按需要将它们添加到池中
checktimeout=3
含义:ldirectord等待健康检查执行完毕的等待时间,单位秒。如果因为某些原因检查失败或在设置的时间周期内没有完成检查,ldirectord将会从IPVS表中移除真实服务器
checkinterval=1
含义:这个值指定ldirectord在两个检查之间的间隔时间
quiescent=no
含义:当你设置了这个选项后,ldirectord将 会从IPVS表中移除真实服务器而不是“停止”它,从IPVS表移除节点将中断现有的客户端连接,并使LVS丢掉所有的连接跟踪记录和持续连接模板,如果 你不将这个选项设置为no,当某个节点崩溃时,对某些客户端计算机而言可能会显示为集群关闭了,因为在这个节点崩溃前这些客户端计算机被分配给它了,而连 接跟踪记录和程序连接模板仍然保留在Director上
virtual=172.25.58.100:80
real=172.25.58.2:80 gate ##两个后端rs
real=172.25.58.3:80 gate
fallback=127.0.0.1:80 gate ##两个rs都挂了,就访问调度器自己的80端口
service=http #注意,这里是通过http报文进行传输请求
scheduler=rr ##轮询算法
#persistent=600
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate #指定Ldirectord的检测类型,默认为negotiate
checkport=80
request="index.html"
#receive="Test Page" #指定请求和应答字串
#virtualhost=www.x.y.z #虚拟服务器的名称
进行处理第二个问题:假若所有的后端服务器宕掉了,LVS服务器将返回一个结果:
yum install -y httpd
cd /var/www/html
rm -rf *
vim index.html
哎呀,走丢了
systemctl restart httpd
chkconfig --list列出脚本方式启动的服务的开机子启动的服务
改8080为80
安装完毕插件后观察结果:
关闭server2后端服务器:
[root@foundation58 new]# curl 172.25.58.100
bbs.westos.org
[root@foundation58 new]# curl 172.25.58.100
curl: (7) Failed connect to 172.25.58.100:80; Connection refused
[root@foundation58 new]# curl 172.25.58.100
bbs.westos.org
[root@foundation58 new]# curl 172.25.58.100
curl: (7) Failed connect to 172.25.58.100:80; Connection
可以看到,此时serer2不能进行访问,但是调度器还是对其进行了访问
启动插件:
systemctl start ldirectord rhel7.3版本启动
service ldirectord start rhel6启动方式
/etc/init.d/ldirectord 所有版本都可以 start
启动调度器上的插件后:(server2后端服务器已经被stop了)
继续在客户端进行访问,此时
[root@foundation58 new]# curl 172.25.58.100
bbs.westos.org
[root@foundation58 new]# curl 172.25.58.100
bbs.westos.org
[root@foundation58 new]# curl 172.25.58.100
bbs.westos.org
健康检查起作用了,由于server2怀掉了,此时调度器将server2调度为器踢出去
即完成了健康检测。
当两个后端服务器全部坏掉时,客户端进行访问时,LVS服务器就会给一个响应:
[root@foundation58 new]# curl 172.25.58.100
oh,no~~我迷路了!!!
在DR和NAT模式下都可以做健康检测,方法一样~~~~