前言
本文要说的是基于 keepalived 实现两台服务器之间的主备切换 。当一台机器的 Java 进程异常关闭,另一台机器能够自动监测到并启动本机的 Java 进程。
keepalived 的工作机制及原理不多做介绍,自行搜索了解,keepalived 的安装部署请参考 keepalived 的安装及使用 。
个人觉得动手实践安装下 keepalived,然后结合 keepalived 的配置文件会有助于理解 keepalived 的工作机制。
需要部署的服务
部署在服务器的项目不是一个 web 程序,是一个普通的 Java 应用。主要功能是定时从文件服务器下载文件,然后做一些处理,最终把处理过的文件放到本地。
部署要求
当一台服务器部署的服务出现故障时,能够有 备用机器 继续提供服务,尽量避免人工介入去恢复系统。注意跟负载均衡的区别!初步方案只提供一台备用机。
方案
1. 实现原理
keepalived 的配置文件中有 权重 和 STATE 两个配置项,两台机器上的 keepalived 通过 虚拟IP 绑定之后,它们之间就可以通过上述的配置项来进行 ”选举“ ,区分 MASTER 和 BACKUP 。
然后配合 keepalived 中另外的两个功能,检测脚本 和 通知脚本 实现我们的主备切换的需求。
到底如何决定 MASTER 和 BACKUP ?
STATE 的值可以是 MASTER 和 BACKUP,当 两台机器配置的 STATE 的值相同,并且权重相同时,谁先启动谁是 MASTER,当两台机器的配置的 权重 相同时,state 为 MASTER 的那台机器最终会成为 MASTER(哪怕这台机器启动的时间比另一台晚)
检测脚本的作用
对我们的使用场景来说,检测脚本的作用有两个,一是检测我们的 java 进程是否存在,二是对 keepalived 的权重进行加减