独立的lvs并不具备对后端服务器执行健康检查的机制,这时通常需要配合第三方的工具来一起使用。
而ldirectord的作用就是用来监测Real Server,当Real Server失效时,把它从虚拟服务器列表中删除,恢复时重新添加到列表。

1.LVS不可用,整个系统将不可用;SPoF Single Point of Failure
解决方案:高可用
	keepalived heartbeat/corosync

2.RS不可用时,Director依然会调度请求至此RS
解决方案: 由Director对各RS健康状态进行检查,失败时禁用,成功时启用
	keepalived  heartbeat/corosync   ldirectord
	检测方式:
	(a) 网络层检测,icmp
	(b) 传输层检测,端口探测
	(c) 应用层检测,请求某关键资源
	RS全不用时:backup server, sorry server

 Idirectord 软件和配置文件说明:

包名:ldirectord-3.9.6-0rc1.1.1.x86_64.rpm 
下载:http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-7/x86_64/
安装:yum install ldirectord-3.9.6-0rc1.1.2.x86_64.rpm -y  (需要epel源中的Perl)

文件:
	/etc/ha.d/ldirectord.cf 主配置文件
	/usr/share/doc/ldirectord-3.9.6/ldirectord.cf 配置模版
	/usr/lib/systemd/system/ldirectord.service 服务
	/usr/sbin/ldirectord 主程序,Perl实现
	/var/log/ldirectord.log 日志
	/var/run/ldirectord.ldirectord.pid pid文件


Ldirectord配置文件说明
checktimeout=20           #判定real server出错的时间间隔。
checkinterval=10          #指定ldirectord在两次检查之间的间隔时间。
fallback=127.0.0.1:80     #当所有的real server节点不能工作时,web服务重定向的地址。
autoreload=yes            #是否自动重载配置文件,选yes时,配置文件发生变化,自动载入配置信息。
logfile="/var/log/ldirectord.log"   #设定ldirectord日志输出文件路径。
logfile="local0"		    #rsyslog方式定义日志输出。

quiescent=no              			#当RS服务down时状态时, yes权重设为0,no为删除RS服务器。
当选择no时,如果一个节点在checktimeout设置的时间周期内没有响应,ldirectord将会从LVS的路由表中直接移除real server,此时,将中断现有的客户端连接,并使LVS丢掉所有的连接跟踪记录和持续连接模板,
如果选择为yes,当某个real server失效时,ldirectord将失效节点的权值设置为0,新的连接将不能到达,但是并不从LVS路由表中清除此节点,同时,连接跟踪记录和程 序连接模板仍然保留在Director上。
virtual=5 			    #指定虚拟的IP地址和端口号,FWM(标签)或 IP:PORT
virtual=192.168.60.200:80           #指定虚拟的IP地址和端口号
   real=192.168.60.132:80 gate      #指定Real Server服务器地址和端口,同时设定LVS工作模式,用gate表示DR模式,ipip表示TUNL模式,masq表示NAT模式。
   real=192.168.60.144:80 gate
   fallback=127.0.0.1:80 gate       #sorry server
   service=http                     #指定服务的类型,这里是对http服务做负载均衡。
   request="index.html"             #ldirectord将根据指定的RealServer地址,结合该选项给出的请求路径,发送访问请求,检查RealServer上的服务是否正常运行,确保这里给出的页面地址是可访问的,不然ldirectord会误认为此节点已经失效,发生错误监控现象。
   receive="Test Page"              #指定请求和应答字串。
   scheduler=rr                     #指定调度算法,这里是rr(轮叫)算法。
   protocol=tcp                     #指定协议的类型,LVS支持TCP和UDP协议。
   checktype=negotiate              #指定Ldirectord的检测类型,默认为negotiate。
   checkport=80                     #指定监控的端口号。
   persistence=360                  #持久连接
   virtualhost=www.gaojf.com        #虚拟服务器的名称,随便指定

  案例图:

LVS检查ipvsadm lvs检查什么_服务器

 

 

前期规则设置(参考: 实践LVS的DR模式,lvs与rs不同网段)
CIP:192.168.10.50      gateway:192.168.10.60 
Route: eth0(192.168.10.60)    eth0(192.168.80.60 、10.0.0.200/8 ) 启用IP_forward的功能
LVS:DIP:192.168.80.100  gateway:192.168.80.60   VIP: 10.0.0.100/32    gateway和VIP两个IP绑定在同一个网卡上
RS1: RIP:192.168.80.110  gateway:192.168.80.60   VIP: 10.0.0.100/32	 VIP绑定在lo
RS2: RIP:192.168.80.120  gateway:192.168.80.60   VIP: 10.0.0.100/32	 VIP绑定在lo


Route设置
ip a a  10.0.0.200/8 dev eth0   与80.60同一网卡上。
		

LVS服务器设置:
设置VIP地址   
	ip addr add  10.0.0.100/8 dev eth0 

RS的服务器设置:
	echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore
	echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore
	echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce
	echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce
两台RS设置VIP地址
	ip addr add 10.0.0.100/8 dev lo:1

安装sorry Sever服务器,和 ldirectord服务
	yum install ldirectord-3.9.6-0rc1.1.2.x86_64.rpm -y
	yum install httpd -y
	echo Sorry Server > /var/www/html/index.html
	systemctl start httpd
清空规则,复制配置文件模版
	ipvsadm -C   
	cp /usr/share/doc/ldirectord-3.9.6/ldirectord.cf /etc/ha.d/
设置配置文件
Ldirectord配置文件说明
	checktimeout=3     				#检查RS次数
	checkinterval=1    				#检查RS时间
	autoreload=yes
	logfile=“/var/log/ldirectord.log“ #日志文件
	#logfile="local0"				  #日志级别
	quiescent=no 					  #当RS服务down时状态时, yes权重设为0,no为删除RS服务器。
virtual=10.0.0.100:80
	real=192.168.80.110:80 gate 2		#gate指DR模型,权重为 2 
	real=192.168.80.120:80 gate 1
	fallback=127.0.0.1:80 gate		    #sorry server, 当两个RS服务器出现问题,LVS的提示。
	service=http
	scheduler=wrr
	protocol=tcp
	checktype=negotiate
	checkport=80
	request="index.html"


# systemctl restart ldirectord.service 


 while true ; do curl http://10.0.0.100 ;sleep 1; done    systemectl stop httpd 测试
192.168.80.120
192.168.80.110
192.168.80.120
192.168.80.110
192.168.80.120
192.168.80.120
sorry services
sorry services