JAVA轮询调度实现主从切换热启动

目录

 

现有技术

解决方案

方案详情

1、配置文件初始化

2、注册运行具体的代码信息

        a)、初始化实体类

        b)、HA分发监测机制执行 

        c)、节点应用服务运行

        d)、主从节点轮询监控


现有技术

        很多时候我们都需要使用调度任务,按照指定周期执行对应的应用程序,简单的可以借助Spring的定时任务完成,复杂的可以借助一些通用的调度任务框架,例如XXL-JOB。使用Spring调度任务时,需要考虑分布式加锁机制,防止不同的服务器同时运行对应的调度任务,同时,当相关机器有问题时,要完成程序的自动切换。对于XXL-JOB架构的使用,需要搭建对应的服务,当我们简单的程序应用时,投入成本就比较大了。

解决方案

        本发明提供一种通用的调度任务实现方式,一方面可以完成调度任务单机计算,另一方面当主机器有问题时,可以自动切换到从节点,实现应用的热备。当然,主从机器可以根据配置实现不同的功能运行,充分提升服务器的利用率。

方案详情

整体方案底层使用spring实现,相关可变动的参数配置在配置文件中

1、配置文件初始化

       初始化配置文件中的参数信息,完成HaConfig公共配置的赋值,对应相关的配置信息如下:

        a)、clusterName:集群名称,不同的集群名称确定一个集群分组,用来部署不同的分组信息
        b)、masterPackage:主集群需要执行的package列表    
        c)、slavePackage:备集群需要执行的package列表    
        d)、clusterType:集群分发执行组建类别 (可以选择Redis、Zookeeper等技术作为实现方式),假设我们设置redis,那么对应相关的分发都是通过redis来实现的  
        e)、heartbeatInterval:心跳监测时间间隔(秒)    
        f)、switchMasterSlaveTime :主备集群切换时间间隔(秒)       

2、注册运行具体的代码信息

        a)、初始化实体类

                 初始化运行的实体类,主要是根据配置文件中获取对应的clusterName参数,组装完成分布式锁的key值的划分,相关的参数如下:
                
 heartbeatKey:心跳检测存储的key值,使用clusterName做为前缀关键字
                
 masterKey:主节点key值,使用clusterName做为前缀关键字
                
 localAddress:当前服务器IP

        b)、HA分发监测机制执行 

                i、实例初始化

                     根据clusterType字段设置的类型,完成对应执行实例的初始化,该实例主要是为了完成心跳检测、主从节点的写入以及主从轮询监控的相关功能选择的技术,可以通过rediszookeeper等实现

                ii、心跳轮询注册监控

                     1、清除历史已经注册的当前的服务器IP,防止上一次发布对当前的操作有影响
                     2、重新注册当前的服务器IP,写入到分布式系统中,例如使用redis,采用hset的方式,注册field为当前的服务器IP,值为当前获取的系统时间
                     3、初始化内置调度任务,按照heartbeatInterval设置的时间点,周期更新当前的服务器IP到分布式系统中。例如redis,按照周期时间,更新对应IP写入的系统时间

                iii、主从节点标识写入

                     1.判断主节点标识是否写入,如果没有写入,设置当前的服务器为主节点,更新当前服务的标识为master,主节点存储在分布式系统中。例如redis,可以key-value的形式,存储主节点的值为当前的服务器IP
                     2.如果主节点标识已经写入,那么更新当前的节点为从节点                        ​​​​​​

        c)、节点应用服务运行

                 i、主节点解析对应运行的实例
                     基于配置文件中masterPackage配置的信息,扫描该包下的所有class文件,生成对应class实例,多个包时使用逗号分隔。当然也可以是单个文件信息,在扫描解析的时候根据类型判断是文件还是文件夹,来完成对应class的解析。
                ii、从节点解析对应运行的实例
                     基于配置文件中slavePackage配置的包信息,扫描该包下的所有class文件,生成对应class实例,多个包时使用逗号分隔。当然也可以是单个文件信息,在扫描解析的时候根据类型判断是文件还是文件夹,来完成对应class的解析。
                iii、调度任务运行
                      完成对应包下面所有的类的解析,基于Quartz技术,创建Scheduler调度实例,运行该类scheduleJob

        d)、主从节点轮询监控

                节点的轮询监控主要是监控主从节点是否正常运行,当主节点有问题时,可以直接切换从节点转换成主节点,从而防止程序异常无法运行,完成自动切换的功能,另一方面,当从节点有问题时,可以直接移除有问题的节点

                i、主节点调度任务监控
                     使用调度任务轮询监控主节点,如果主节点存储的IP和本机获取的IP不一致,变更本机状态为从节点
                ii、从节点调度任务监控
                     1、获取全部心跳轮询注册的IP列表
                      2、循环IP列表,查看是否存在主节点IP,如果不存在主节点IP,删除主节点对应的标识,变更本机为主节点,更新状态
                      3、如果循环IP列表中包含主节点IP
                            比对IP写入的时间,如果当前时间剪去上次注册时间大于集群切换时间间隔,删除主节点标识,更新本机为主节点,存储本机IP为主节点的值
                iii、应用任务重启
                       主从上面调度任务有相关状态变更之后,重复执行 
c)中的步骤,完成对应应用任务的重启

本方案主要是提供一种通用的服务器调度任务实现方式,可以自动完成总从节点切换,同时在主从节点中设置配置主从机器对应的运行功能,实现主从节点功能的分离与切换

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值