健康逻辑:
网络层检测:能不能ping通,有可能有误差,服务不知道在不在线
传输层检测:80或443端口,tcp ping 或udp ping,但是不知道服务可用不可用(页面资源被删)
更向上一层,应用层检测资源,状态码必须是200,内容必须包含我检测的关键字,但是会记录日志,会干扰
做哪一层的检测,自己决定,而且检测不是一次有问题就认为有问题,(这叫做软状态)连续3次以后就转换为硬状态(自己设置)或者10次以内有多少次有问题,转换硬状态
注意:脚本的执行效率很差,因为脚本不是专门的编程语言,它的实现是调用系统命令,每执行一个命令就启用一个进程,所以对时间要求较严格(防止一个时钟周期过去,命令没有执行完成)
ldirectord:是为了辅助lvs对后端RS进行健康检测的,并且作为守护进程来实现周期检测
有两个站点是用来搜索rpm包的:rpmfind.net和pkgs.org
视频中的课件,接上一节课
考虑:
(1)Director不可用,整个系统将不可用;SPoF
解决方案:高可用
keepalived
heartbeat/corosync
(2)某RS不可用时,Director依然会调度请求至此RS;
解决方案:对各RS的健康状态做检查,失败时禁用,成功时启用;
keepalived---可以高可用,也可以健康检测
ldirectord---只能健康检测,而且增删操作是直接调用内核的api不需要ipvsadm命令
检测方式:
(a)网络层检测;
(b)传输层检测,端口探测;
(c)应用层检测,请求某关键资源;---不同服务检测机制不一样
ok-->failure
failure-->ok
ldirectord:
配置示例:
checktimeout=3
checkinterval=1
fallback=127.0.0.1:80
autoreload=yes
logfile="/var/log/ldirectord.log"
quiescent=no
virtual=5
real=172.16.0.7:80 gate 2
real=172.16.0.8:80 gate 1
fallback=127.0.0.1:80 gate
service=http
scheduler=wr
checktype=negotiate
checkport=80
request="index.html"
receive="CentOS"
补充:共享存储
NAS:Network Attached Storage
nfs/cifs
文件系统解耦
SAN:Storage Area Network
"块"接口
ldirectord需要自己安装,去rpmfind.net或者pkgs.org站点搜索
yum install -y ldirectord---有可能本机没有,需要自己下载
rpm -ql ldirectord可以查看安装这个命令后修改的文件
less 可以查看脚本中默认的配置文件位置(视频中说可以自己指定位置)
如果不指定配置文件,默认配置文件放在/etc/ha.d/conf/下
less /etc/init.d/ldirectord---读取一下脚本中的配置文件地址/etc/ha.d/ldirectord.cf
默认是没有配置文件的,但是可以从rpm -ql命令中看到有一个配置模板,复制到脚本中指定的位置然后编辑
cp /usr/share/doc/ldirectord-3.9.5/ldirectord.cf /etc/ha.d/---复制模板
vim ldirectord.cf---编辑配置文件
配置文件中一个virtual就代表一个虚拟主机
#Sample for an http virtual service
virtual=172.16.0.99:80---vip和端口
real=172.16.0.7:80 gate---rip和端口,gate表示-g dr类型
real=172.16.0.8:80 gate
fallback=127.0.0.1:80 gate
service=http---指明应用层是什么协议
scheduler=rr
#persistent=600---要不要做持久连接
#netmask=255.255.255.255
protocol=tcp
checktype=negotiate
checkport=80---有可能和上边的port不一致,因为有可能专门有一台虚拟主机用来接收检测,否则会产生大量日志信息
request="test1.html"---请求哪个页面
#receive="Test Page"---期望请求页面中包含什么
#virtualhost=www.x.y.z---指定向哪个虚拟主机发请求
下边不是讲解配置文件了,而是操作步骤
在Directory:172.16.0.6上
yum install -y nginx---安装nginx服务,就是为了提供一个say sorry的服务
mkdir /data/nginx/html -pv
vim /data/nginx/html/inde.html---创建sorry主页
<h1>Maintanance Time</h1>---例行维护时间
vim /etc/nginx/nginx.conf---定义一个虚拟主机,下边的server配置没有记录完全,视频中用的是nginx提供的默认虚拟主机,只是把root改了
server {
listen 80 default_server;
servername ;
root /data/nginx/html;
}
nginx -t---检查语法错误
systemctl start nginx.service
ss -tnl---查看80端口已经启动起来了
ipvsadm -ln---查看一下规则
ipvsadm -C---把自己的ipvsadm规则全部删除
ifconfig eno16777736:0 172.16.0.99 netmask 255.255.255.255 broadcast 172.16.0.00 up---添加vip
service ldirectord start---启动ldirectord服务
ipvsadm -ln---查看有没有加进来,sorry server加进来了,其他rs检测失败了
curl http://172.16.0.99
<h1>Maintanance Time</h1>---会看到自己定义的sorry server网页
后端服务器RS启用以后,执行curl http://172.16.0.99/test1.html是可以访问到的
上边讲的是定义单一服务,下边讲定义防火墙标记的集群服务。
配置文件:
#Sample configuration for a fwmark based service For an explanation of
#fwmark see the ipvsadm(8) man page
virtual=3
real=172.16.0.7 gate---因为是防火墙标记,所以不要加端口
real=172.16.0.8 gate
fallback=127.0.0.1:80 gate
service=http---指明应用层是什么协议
scheduler=rr
#persistent=600---要不要做持久连接
#netmask=255.255.255.255
protocol=fwm---协议是防火墙标记
checktype=negotiate
checkport=80---有可能和上边的port不一致,因为有可能专门有一台虚拟主机用来接收检测,否则会产生大量日志信息
request="test1.html"---请求哪个页面
#receive="Test Page"---期望请求页面中包含什么
#virtualhost=www.x.y.z---指定向哪个虚拟主机发请求
然后重启服务
service ldirectord restart
ipvsadm -ln---可以看到生成了新规则(防火墙标记为3的新规则)
后边讲发布,更新服务,凌晨发布,先下线一部分,用脚本发布并保留老的服务(只是一个链接,方便替换)
原文地址:https://blog.51cto.com/13852573/2364130