双击热备是应用与服务器的一种解决方案,其构造思想是主机和从机通过TCP/IP网络连接,正常情况下主机处于工作状态,从机处于监视状态,一旦从机发现主机异常,从机将会在很短的时间内代替主机。完全实现主机的功能。
要想实现双击热备方案,就需要用到keepalived软件。
1.Keepalived介绍
Keepalived 是一种高性能的服务器高可用或热备解决方案, Keepalived 可以用来防止服务器单点故障的发生,通过配合 Nginx 可以实现 web 前端服务的高可用。
Keepalived是Linux下一个轻量级别的高可用解决方案。使用的是VRP协议,VRP协议将两台或多台设备组成一个虚拟路由组,在这个虚拟路由组中会存在一个MASTER书点以及多个BACKUP节点,在MASTER节点上会绑定一个虚拟VIP虚拟VIP),作为客户机只需要使用这个VIP来访问后端的服务器即可。虚拟IP的使用和真是P其实没有区别。当MASTER节点宕机以后,此时会从多个BACKUP节点中选择一个节点作为MASTER节点,而只有MASTER节点才可以绑定对应的VP,此时VIP就会重新绑定到新的MASTER节点上,这样就实现了ip的飘逸。而整个过程对客户机是透明的,客户机是感知不到ip飘逸的整个过程。
2.实操演示
2.1环境说明
本次我们使用两个虚拟机来演示一下借助于keepalived来实现双机热备。具体的环境说明如下所示:
2.2nginx安装
分别安装nginx
查看正在运行的进程并过滤出包含nginx关键字的进程的命令 :
ps -ef | grep nginx
查看防火墙状态:
systemctl status firewalld.service
如果状态为running
关闭防火墙:
systemctl stop firewalld.service
浏览器输入主从节点的IP查看nginx页面
主节点:
从节点:
2.3keppalived安装
主节点配置文件内容:
#定义虚拟网卡需要和当前服务器(192.168.35.xxx)绑定的网卡相对应
#定义组vriid,主从节点id配置相同
#adver_int : 1 每一秒发送一次心跳检查包
#主从节点之间的认证是通过密码认证,主从节点配置必须相同
#设置虚拟ip:用户去访问的ip,主从节点需要一致
备份节点配置文件内容:
配置完毕后启动Keepalived服务:
(先启动主节点,在启动从节点)
启动完成之后,查看ens33网卡ip地址是否新增了前面所配置的虚拟ip地址(110)
此时在主节点上查看查看ens33网卡ip地址时,可查看新增的110ip,从节点不显示110ip。
主节点:
从节点:
2.4 进行测试
1、使用虚拟ip访问nginx服务:http://192.168.136.1102、关闭主节点上的keepalived软件,查看ip是否可以自动飘逸
2.当把主节点(150)的keepalived服务停止时
停止后查看主节点(150)ens33网卡ip地址时,IP已发生飘逸变成150的IP
查看从节点(151)时,IP已经变成110
3.当把主节点(150)的keepalived服务启动时
启动后查看主节点(150)ens33网卡ip地址时,IP已发生飘逸变成110的IP
查看从节点(151)时,IP已经不显示虚拟IP
3.编写检测脚本
在刚才我们是通过手动关闭keepalived软件然后让ip飘逸到从节点上了,大家试想一下如果这个主机上的keepalived软件没有出现问题,而是nginx出现了问题,此时ip开会自动飘逸吗?肯定是不会的,那么此时用户使用虚拟ip访问的还是有问题的nginx,此时就无法完成请求访问。
虚拟IP(110)访问失败,因为目前110绑定的是主节点150,当访问虚拟IP110时,实际上访问的是主节点150的nginx,此时主节点150的nginx挂了,nginx访问失败。
解决该问题的思路:就是编写一个检测nginx服务的脚本,然后让keepalived每隔一段时间执行一次,一旦检测到了nginx出现问题了以后,就将keepalived进程关闭掉,keepalived进程关闭后,IP会进行漂移到另一台服务器。
检测脚本(check_nginx.sh):
(反引号)判断nginx的结果,当结果A=0时,标识nginx没启动,此时就将keepalived进程关闭掉。
设置可执行权限:
可将此脚本放在keepalived配置文件的相同目录
脚本执行命令:sh /路径/check_nginx.sh
测试
当执行脚本之后,主节点150 ens33网卡ip地址没有虚拟IP 110 ,此时访问110 时实际访问的是另一台服务器(151)的nginx
现在就能解决该问题,但是以上脚本时手动执行的,不现实,下面将修改配置,自动执行检测脚本。
在原来主节点的keepalived配置文件加上如下配置
注意:如果发现检测脚本不执行,此时就需要关闭linux中安全检测模块。
测试
1.启动主节点(150)的nginx,在启动主节点(150)的keepalived,此时查看主节点的 ens33网卡ip地址,发现虚拟IP110已经漂移回来了。
此时访问虚拟IP 110时,实际访问的是主节点 150的nginx
2.主动关闭主节点上的nginx
再次访问虚拟IP 110,此时实际访问的从节点151的nginx
至此,完整的双击热备解决方案得以解决!