健康逻辑: 网络层检测:能不能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---编辑配置文件

下面讲配置文件 global directives---全局配置 checktimeout=3---超时时长 checkinterval=1---每隔多长时间检测一次 #fallback=127.0.0.1:80---如果rs全挂了,会由这个主机提供服务 #fallback6=[::1]:80 autoreload=yes---如果配置文件发生改变,会自动加载 logfile="/var/log/ldirectord.log"---自己指定日志地址 #logfile="local0"---由rsyslog来收集日志 #emailalert="admin@x.y.z"---出现问题给谁发邮件 #emailalertfreq=3600---如果还没修复多长时间重复发 #emailalertstatus=all---什么状态发邮件 quiescent=no---不要工作在静默模式

配置文件中一个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主页 Maintanance Time---例行维护时间

vim /etc/nginx/nginx.conf---定义一个虚拟主机,下边的server配置没有记录完全,视频中用的是nginx提供的默认虚拟主机,只是把root改了 server { listen 80 default_server; server_name _; 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 Maintanance Time---会看到自己定义的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的新规则) 后边讲发布,更新服务,凌晨发布,先下线一部分,用脚本发布并保留老的服务(只是一个链接,方便替换)