源码分析ElasticJob 选举及分片

源码分析ElasticJob 选举及分片

elastic-job是将分片项分配至各个运行中的作业服务器,需自行处理实现分片项和数据的关系,分片策略包括(平均分配算法策略,作业名哈希值奇偶数算法策略,轮转分片策略。同时也提供了自定义分片策略的接口)
elastic-job 的分片逻辑是用一台主节点服务器触发,服务器之间需要进行选主,选主的过程就是通过注册中心zookeeper来实现

选主实现

调用源码发现 其调用LeaderService的electLeader方法

public void electLeader() {
    jobNodeStorage.executeInLeader(LeaderNode.LATCH, new LeaderElectionExecutionCallback());
}

主节点选举时采用先获取先得到方式,其它节点会在主节点选举时,统一等待,选主分布式锁节点目录 /{namespace}/{jobName}/leader/election/latch

LeaderNode.LATCH 节点选举
LeaderElectionExecutionCallback回调会在拿到leader锁的节点触发

接下来分析 jobNodeStorage.executeInLeader()方法

public void executeInLeader(final String latchNode, final LeaderExecutionCallback callback) {
    try (LeaderLatch latch = new LeaderLatch(getClient(), jobNodePath.getFullPath(latchNode))) {
		//开始
        latch.start();
        //等待锁释放
        latch.await();
        callback.execute();
    } catch (final Exception ex) {
        handleException(ex);
    }
}

latchNode: 分布式锁使用的作业节点名称
callback: 执行后回调函数
同时有很多服务器都会执行选主,为了保证有序性,拿到主节点服务器会执行await 释放锁,执行callback逻辑,判断masterNode.INSTANCE是否被设置 在此期间,其它服务器同样也会获取锁之后执行callback,主节点服务器设置状态后,其它服务器不参与处理
获取分布式锁之后,会判断{namespace}/{jobname}/leader/election/in-stance节点是否存在,不存在则创建临时节点并存储内容

问题思考

一次完整选举成功之后,如果主服务器在此期间出现宕机,ElasticJob 如何剔除节点,让从服务器升级主节点并接管?

  • 监控主服务器宕机后,将其节点剔除
  • 再触发一次选主过程

接下来重点分析事件监控


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值