2021SC@SDUSC

这篇分析一下十分重要的workserver类

首先

stop方法

首先调用Stopper.stop设置全局变量。停止所有线程的“死”循环,然后休眠3秒,停止worker心跳。

停止worker任务线程池。停止killExecutor线程池。停止fetchTask线程池。停止zookeeper客户端。

ZKWorkerClient

初始化过程,调用initSystemZNode、listenerWorker、registWorker。

protected void initSystemZNode(){try {createNodePath(getMasterZNodeParentPath());createNodePath(getWorkerZNodeParentPath());createNodePath(getDeadZNodeParentPath());} catch (Exception e) {logger.error("init system znode failed : " + e.getMessage(),e);}
}

listenerWorker就是监听worker的CHILD_REMOVED事件,监听到该事件之后,调用了checkServerSelfDead。

private void listenerWorker(){workerPathChildrenCache = new PathChildrenCache(zkClient, getZNodeParentPath(ZKNodeType.WORKER), true, defaultThreadFactory);try {workerPathChildrenCache.start();workerPathChildrenCache.getListenable().addListener(new PathChildrenCacheListener() {@Overridepublic void childEvent(CuratorFramework client, PathChildrenCacheEvent event) throws Exception {switch (event.getType()) {case CHILD_ADDED:logger.info("node added : {}" ,event.getData().getPath());break;case CHILD_REMOVED:String path = event.getData().getPath();//find myself deadString serverHost = getHostByEventDataPath(path);if(checkServerSelfDead(serverHost, ZKNodeType.WORKER)){return;}break;case CHILD_UPDATED:break;default:break;}}});}catch (Exception e){logger.error("monitor worker failed : " + e.getMessage(),e);}
}

registerServer首先检查了当前节点是否存在,存在则退出;不存在则创建节点。最后调用handleDeadServer,就是查找死掉的节点,然后从zk中删除。

public String registerServer(ZKNodeType zkNodeType) throws Exception {String registerPath = null;String host = OSUtils.getHost();if(checkZKNodeExists(host, zkNodeType)){logger.error("register failure , {} server already started on host : {}" ,zkNodeType.toString(), host);return registerPath;}registerPath = createZNodePath(zkNodeType);// handle dead serverhandleDeadServer(registerPath, zkNodeType, Constants.DELETE_ZK_OP);return registerPath;
}

listenerWorker就是监听当前节点是否超时被zookeeper删除,删除后则调用stop方法,退出。

ZKMasterClient

  1. initDao。初始化alertDao,调用DaoFactory.getDaoInstance(AlertDao.class)。
  2. 申请/dolphinscheduler/lock/failover/master路径的分布式锁。
  3. 申请到锁之后,依次调用initSystemZNode、listenerMaster、listenerWorker、registerMaster
private ZKMasterClient(ProcessDao processDao){this.processDao = processDao;init();
}

 removeZKNodePath方法

主要是处理死掉的节点、进行预警,如果要进行故障转移,就调用failoverServerWhenDown。

 failoverMaster

查询了指定master节点运行的流程定义实例,然后调动processNeedFailoverProcessInstances进行处理。

private void failoverMaster(String masterHost) {logger.info("start master failover ...");List<ProcessInstance> needFailoverProcessInstanceList = processDao.queryNeedFailoverProcessInstances(masterHost);//updateProcessInstance host is null and insert into commandfor(ProcessInstance processInstance : needFailoverProcessInstanceList){processDao.processNeedFailoverProcessInstances(processInstance);}logger.info("master failover end");
}

DolphinScheduler故障转移

  1. worker如果与zookeeper连接超时,则停止心跳,停止获取任务,等待所有任务实例执行结束(正常或失败)并更新数据库状态
  2. master如果与zookeeper连接超时,则停止心跳,停止获取流程定义实例,停止调度所有流程定义实例
  3. master如果发现某个流程定义实例中的任务实例失败且属于ExecutionStatus.NEED_FAULT_TOLERANCE状态,则重新运行。

DolphinScheduler技术分析(十)相关推荐

  1. DolphinScheduler技术分析(八)

     2021SC@SDUSC DophinScheduler Alert模块代码分析 Alert服务入口 创建AlertServer 实例对象,调用start方法,启动 public static vo ...

  2. 互动媒体技术——对十二个“一”的文艺创作作业进行文本分析、统计和可视化

    小组成员: 1.1191170412 陈颖 2.1191170413 黄洁 概要 一.文艺创作作业的相关介绍 二.文本分析方法介绍 三.snowNLP库介绍 四.gensim库介绍 五.处理代码展示 ...

  3. 量化投资学习必读书目《十》——《期货市场技术分析》

    作者简介 约翰·墨菲是美国的商品期货技术分析师,从事技术分析超过30年时间,曾任美林证券公司分析研究主任.商品研究局的高级技术分析编辑.市场技术分析家协会(MTA)理事.纽约金融学院教授.现担任哥伦比 ...

  4. GPU指令集技术分析

    GPU指令集技术分析 本文将两篇文章整理了一下. 参考文章链接如下: https://zhuanlan.zhihu.com/p/391238629 https://zhuanlan.zhihu.com ...

  5. YOLOV4各个创新功能模块技术分析(三)

    YOLOV4各个创新功能模块技术分析(三) 八.数据增强相关-Stylized-ImageNet 论文名称:ImageNet-trained cnns are biased towards textu ...

  6. 全球及中国生物识别车辆访问技术行业十四五应用现状及未来展望规划报告2022-2027年

    全球及中国生物识别车辆访问技术行业十四五应用现状及未来展望规划报告2022-2027年 [搜索鸿晟信合查看官网更多内容!]  生物识别车辆访问技术位于起步阶段,指纹识别.虹膜扫描.面部识别等技术可以取 ...

  7. @程序员,你的技术为啥十年八年也没有进步?

    作者 | 中华石杉 责编 | 伍杏玲 本文经授权转载自石杉的架构笔记 80% Java工程师都有的迷茫 跟大家聊一聊很多很多很多人问我的一个问题:中小公司的Java工程师该如何规划准备,才能跳槽进入B ...

  8. 技术分析在于少而精,多则惑

    虽然是炒股心得,其实我很早就没有心得可谈了,能不断获得心得的时期是炒股的初级阶段,越往后你就越知道,股市就这么回事,哪有这么多心得可言. 但是我可以站在今天这个角度为大家梳理我从前的心得,哪些是炒股的 ...

  9. 染整色差技术分析大全

    染整色差技术分析大全 导致染色成品布产生色差的因素多且复杂,要将色差严格控制在标准范围之内且使其长期保持稳定,涉及到生产加工过程中的方方面面,必须对各个要素和影响因素进行综合分析,制定出相应的预防措施 ...

最新文章

  1. iOS开发小技巧--textField成为密码框,view加载完后textField获取焦点
  2. 从零开始撸音乐播放器(源码可下载)
  3. TCP建立连接与释放连接
  4. wxWidgets:wxHyperlinkEvent类用法
  5. eclispse调试为什么什么都看不到_【科普6】单号出了为什么还是看不到物流信息?...
  6. 大数据架构:flume-ng+Kafka+Storm+HDFS 实时系统组合
  7. java比较时间sql_如何正确比较日期 java.sql.Date
  8. 【debug】moduleNotFoundError:No module named 'exceptions'
  9. Sql Server实现自动增长
  10. 为JavaScript日期添加天数
  11. 广发99元旅游分期,来一场说走就走的旅行?
  12. 奈奎斯特与香农定理_奈奎斯特定律和香农定理
  13. Python算法——查找数组前三名
  14. HTML:Marked-js+Bootstarp简单实现Markdown文本编辑器
  15. 关于如何让网站被搜索引擎收录
  16. tplink703无线打印服务器,tplink703路由器怎么配置client模式
  17. 【转载】【PC】解决访问小米路由器外接硬盘需要密码/无密码访问小米路由器共享盘
  18. ipv4地址怎么设置 手机_手机ip地址怎么设置 手机WIFI静态IP设置方法
  19. Graphics2D的使用详情
  20. 基于STM32+OV7670+TFT显示(升级篇:将摄像头采集到的画面显示在TFT屏)

热门文章

  1. Vue 如何提交表单数据
  2. 使用 TensorFlow 在卷积神经网络上实现 L2 约束的 softmax 损失函数
  3. Windows Server 2008在密码策略里禁用复杂密码
  4. 使用虚拟机备份软件备份华为 FusionSphere(kvm)虚拟机
  5. Google Cloud Storage下载数据
  6. Memblaze PBlaze4系列PCIe闪存新品通过ESXi6.0认证
  7. Memblaze 联合 OpenCloudOS 完成技术兼容互认证
  8. 基于Linux C的简单日志库
  9. 电影购票APP快速搭建(平台开发)
  10. 数据分析实战应用案例精讲-【概念篇】数据埋点(附实战应用案例)