APP下载

通过tomcat manager和Zookeeper实现服务的高可用

2018-11-19李荣辉1杨志龙

通信电源技术 2018年9期
关键词:集群启动节点

李荣辉1,杨志龙

(1.南瑞集团有限公司,江苏 南京211000;2.南京基石数据有限责任公司,江苏 南京210093)

1 概 述

任务平台通过admin来管理executor,任务经客户端触发,由admin进行分发,executor负责执行。admin和executor通过jetty进行通信,executor根据配置的admin信息,每隔30 s向admin中注册一次,如果admin在3个周期中没有收到executor的消息,则认为executor不可用。由于任务需要经过的admin分发,可能出现单点故障。另外,executor分布在不同的机器上,如果executor出现故障,需要手动去恢复。功能整体架构如图1所示。

图1 功能整体架构图

2 可行性分析

Tomcat的manager可以管理项目,通过不同的URL来对项目进行启动、停止、重启等操作。Zookeeper,下面简称为zk,可以作为文件系统使用,其提供包括持久化目录节点、持久化顺序标号目录节点、临时目录节点以及临时顺序目录节点等4种节点类型。在应用启动时,往zk中注册一个临时节点,当某个节点出现故障时,与zk连接的session会中断,通过监控节点的变化可以获取故障节点的信息,解析出节点的catalina地址以及webApp等唯一性信息,之后可以根据tomcat manager进行相应的恢复操作。

2.1 技术架构与实现

2.1.1 运行环境

Tomcat版本为tomcat-7.0.77,zk的版本为Zookeeper-3.4.12,JDK版本为1.8。

2.1.2 架构设计

架构设计如图2所示。

图2 技术架构图

新增了冗余的admin节点,另外使用zk进行协调管理,在主admin发生故障时,可以迅速切换到从admin节点中,避免单点故障。

2.1.3 配置说明

manager是tomcat自带的用于项目部署和管理的应用,需要在tomcat-user.xml中增加 manager-gui和 manager-script配置,角色说明如下[2]:

manager-gui:访问html接口。

manager-script:提供了纯文本访问形式,可以访问服务器状态页面。配置此项主要是可以在代码中封装相应的操作接口,可以直接对应用进行操作。启动、停止和重启的文本访问格式如下所示:

启动:catalina/manager/text/start?path=/;

停止:catalina/manager/text/stop?path=/;

重启:catalina/manager/text/reload?path=/;

其中,catalina为 http://ip:port,port只tomcat的端口。

程序在启动时,对应的每一个节点都需要向zk中注册一个临时节点,创建临时节点时向节点中写入如下信息:

ip:对应节点的ip信息;

catalina:对应节点的catalina信息;

webApp:项目的webApp信息。

用catalina+webApp作为唯一标识identity。

2.1.4 实现以及应用的启动和恢复过程

(1)在zk中创建永久节点/ha,本项目使用curator中间件,通过创建NodeCache来监听/ha子节点的情况。每一个应用在启动时,则在/ha节点中创建一个临时子节点,写入ip、catalina和webApp信息。在所有节点都成功启动之后,从zk的/ha节点中就可以获取到集群中所有节点的信息。

(2)创建一个/board永久节点来保存节点的恢复信息,即每次节点需要恢复时,先往/board节点中写入节点的ip、catalina和webApp信息,这条信息只有在节点正常启动时自身可以删除。设置这个广播信息是为了节点不被重复恢复。

2.1.4.1 启动过程

(1)admin在启动时,发现没有同名的identity,说明集群中没有此节点,先到/board节点中查看是否包含该identity信息。如果有,则删除相应的identity信息;没有则直接创建/ha的临时子节点/ha/a-ip,a是admin节点的标识。

(2)admin在启动时,如果发现有同名的identity信息,说明该节点已经存在,属于重复启动,这时可以直接退出。

(3)executor在启动时,直接创建/ha/ip临时有序节点。同时查找/board看是否存在自身的唯一标识,如果有则删除。

2.1.4.2 恢复过程

(1)如果是executor宕机,集群中的所有节点通过竞争分布式锁来进行节点的恢复操作。节点获取锁后,先遍历/ha节点中所有的子节点,比较节点的identity与需要被恢复节点的identity时候相同。如果有相同信息,说明该节点已经被恢复,不再进行恢复操作;如果没有,说明该节点还未被恢复,则查看/board中是否包含该节点信息。如果包含,说明已经有其他节点在进行恢复操作,不再进行恢复操作;不包含,通过发送tomcat manager的管理命令来对节点进行恢复操作。

(2)如果是admin宕机,先遍历/ha中所有的子节点,看是否有冗余的admin节点,如果有,则选取任一一个,executor将注册信息注册到新的admin中,从而实现admin的切换。如果没有冗余的admin。则集群中其他所有节点需要竞争分布式锁,先将admin的identity写入/board中,在通过发送tomcat manager的管理命令来对节点进行恢复操作。

3 结束语

虽然这种机制需要依赖tomcat进程的存活以及zk的可用性。但是通过tomcat manager以及Zookeeper实现应用的自动唤醒机制以及服务的高可用性,同时,通过tomcat manager的纯文本访问形式,可以相应减少人工维护,提高系统的可用时间。

猜你喜欢

集群启动节点
CM节点控制在船舶上的应用
基于AutoCAD的门窗节点图快速构建
概念格的一种并行构造算法
海上小型无人机集群的反制装备需求与应对之策研究
《悦读·家》暨“悦读·家@万家”活动启动
一种无人机集群发射回收装置的控制系统设计
Python与Spark集群在收费数据分析中的应用
勤快又呆萌的集群机器人
电启动机的正确使用
抓住人才培养的关键节点