一、keepalived:
1.keepalive是lvs集群中的高可用架构,只是针对调度器的高可用,基于vrrp来实现调度器的主和备,也就是高可用的HA架构;设置一台主调度器和一台备调度器,在主调度器正常工作的时候,备完全处于冗余状态(待命),不参与集群的运转,只有当主调度器出现故障时,备才会承担主调度器的工作,主调度器恢复功能之后,主继续做为集群的入口,备继续处于冗余状态;keeralive基于vrrp协议实现lvs高可用的方案;根据组播地址244.0.0.18进行通信,主和备之间发送报文,确定对方是否存活,根据优先级的大小来确定主和备的位置,故障切换,如果主挂了,备继续工作,主恢复了,备继续待命;主和备之间的切换时VIP地址也跟着切换;keepalive是专门为了lvs而出现的,但不是lvs专用的。
2.VRRP的工作流程:
选举出主和备服务器:预先设定好了主和备的优先级。主的优先级较高,备的优先级低,一旦开启服务器,优先级高的会自动抢占主到的位置
VRRP组播通信:组播通信地址224.0.0.18,VRRP协议当中的主备服务器通过组播地址224.0.0.18进行通信,交换主备服务器之间的运行状态。发送VRRP报文消息,以告知其他备服务器。主服务器现在的状态。
主备切换:主服务器发生了故障,或者不可达,VRRP协议会把请求转移到备服务器。通过组播地址,VRRP可以迅速的通知其他服务器发生了主备切换,确保新的主服务器可以正常的处理客户端的请求
故障恢复:一旦主服务器恢复通信,由组播地址进行通信,发现恢复的主服务器优先级更高,会抢占原主服务器的位置,成为主服务器,调度和接收请求。
二.实验:基于DR模式进行实验
主:192.168.127.10
备:192.168.127.50
调度器VIP:192.168.127.100
RS1:192.168.127.20
RS2:192.168.127.30
客户机:192.168.127.40
1.主、备都为调度器都得安装yum -y install ipvsadm keepalived软件包
2.主的内核配置文件在DR模式中已经修改了,但是备也同样得配置内核文件
vim /etc/sysctl.conf将主的直接复制过来即可
3.设置备的策略一定要和主一致
- 配置主备的keepalived
cd /etc/keepalived
vim keepalived.conf
core模块:keeplived的核心模块,负责主进程的启动,维护以及全局配置文件的加载
vrrp:实现vrrp协议的模块,也就是主功能模块
check:负责健康检查,也可以检查后台真实的服务器情况。
5.通过访问curl192.168.127.100就可以查看到了RS1及RS2结果
实验总结:1.配优先级 ;2.配置vip和真实服务器;3.主备的id要一致;4.主备的id要分区
三、keepalived+nginx实现高可用实验:
nginx1:192.168.127.20 主服务器
nginx2:192.168.127.30 备服务器
客户端:192.168.127.40
1.给nginx1和nginx2关闭防火墙及安全机制,安装keepalived软件包
2.写一个监控nginx1的状态的脚本,确保nginx1挂了,nginx1的keepalive也要停止,实现vip的飘移。(只在nginx1里写监测nginx1的状态脚本,nginx2不需要)
3.重启nginx,别忘了2台都得起 ,给nginx1的监测脚本权限
4.修改keepalived的主配置文件:vim /etc/keepalived/keepalived.conf
5.重启keepalived并且查看keepalived的状态
6.ip addr查看vip情况
7.关闭nginx1,再查看keepalived的状态
8.修改nginx2备服务器的内容:nginx2不需要编辑nginx1的控制脚本,只复制nginx1的keepalived的配置文件后重启nginx及keepalived即可
- 编辑nginx1和nginx2的访问页面内容:vim /usr/local/nginx/html/index.html
把原有内容全部删除自行编辑
10.客户端访问
四、面试题:脑裂是什么?
高可用架构中的一个特殊情况,只要使用vip地址代理的冗余模式的高可用,都有可能出现脑裂的问题;主和备都出现了VIP;主和备无法确定各自身份,同时出现vip地址,两边都起来了,但是两边都无法使用。
原因:1.keepalived的配置文件:主备的id不一致
2.网络(心跳线):断了,老化
3.硬件问题:网卡出现问题,IP地址配置冲突
4.防火墙策略,iptables的策略,屏蔽了组播的地址广播,屏蔽了vrrp协议的报文
5.两台服务器的时间不同步也可能导致
6.其它的服务配置对网络的检测进行了干扰
怎么解决:
1.同时使用串行电缆和以太网电缆连接,同时用两条心跳线路,这样一条线路坏了,另一个还是好的,依然能传送心跳消息
2.当检测到裂脑时强行关闭一个心跳节点(这个功能需特殊设备支持,如Stonith、feyce)。相当于备节点接收不到心跳消患,通过单独的线路发送关机命令关闭主节点的电源。
3.做好对裂脑的监控报警(如邮件及手机短信等或值班).在问题发生时人为第一时间介入仲裁,降低损失。例如,百度的监控报警短信就有上行和下行的区别。报警消息发送到管理员手机上,管理员可以通过手机回复对应数字或简单的字符串操作返回给服务器.让服务器根据指令自动处理相应故障,这样解决故障的时间更短。
- 对脑裂进行监控
对脑裂的监控应在备用服务器上进行,通过添加zabbix自定义监控进行。
监控什么信息呢?监控备上有无VIP地址