分布式调度任务管理——Dkron(3)代码结构分析及部署运行

摘要:
结构:1.系统描述2.Dkron部署和操作3.Dkron项目结构1.Dkron分布式异步调度系统,满足分布式集群部署(基于serf机制)和调度机制(基于raft协议)的要求,支持任务的定时循环执行,限制失败重试次数,任务的并发执行以及父任务和子任务的链执行机制。2、 Dkron部署和操作3.1 Dkron配置文件存储路径:/etc/Dkron/Dkron.yml./confi

结构:

  1.系统说明

  2.dkron部署运行

  3.Dkron项目结构

一、Dkron

  分布式异步调度系统,满足分布式集群部署(基于serf机制)及调度机制(基于raft协议),支持任务cron定时循环执行,失败重试执行次数限制,任务的并发执行,父任务及子任务的链式执行机制。

二、Dkron部署运行

3.1Dkron配置文件

文件存放路径:/etc/dkron/dkron.yml    ./config    $HOME/

文件名:dkron.yml

# 该节点是否以server模式运行
server: true
# 期望提供服务的Server数,若形成集群需要保证所有的配置项保持一致
bootstrap-expect: 1
# 配置当前所绑定的ip:端口
bind-addr: "{{ GetPrivateIP }}:8946"
# 配置log日志级别
log-level: debug
#当任务也配置了节点tags,则设定只能在配置了tags的服务器运行。
#tags:
  #dc: east
# encrypt: a-valid-key-generated-with-dkron-keygen
# 配置参与集群的IP集
retry-join:
- 172.18.0.2
   - 172.18.0.3
   - 172.18.0.4
   - 172.18.0.5
   - 172.18.0.6

3.2Dkron——Docker镜像运行

文件:Dockerfile

FROM golang:1.15
LABEL maintainer="Victor Castell <victor@victorcastell.com>"

EXPOSE 8080 8946

RUN mkdir -p /app
WORKDIR /app

COPY go.mod go.mod
COPY go.sum go.sum
RUN go mod download

COPY . .
RUN go install ./...

RUN mkdir -p /etc/dkron
RUN cp ./config/dkron.yml /etc/dkron

CMD ["dkron"]

 

docker-compose.yml

---
version: '2'
services:
  dkron:
    build: .
    volumes: 
      - /home/dont_linux/dockers/container_data:/dkron/container_data
    networks: 
      dkron_default:
        ipv4_address: 172.18.0.2
    ports:
      - "8080:8080"
      - "8946"
      - "6868"
    environment:
      - GODEBUG=netdns=go
    command: dkron agent --server --log-level=debug --bootstrap-expect=1
  dkron-server1:
    build: .
    volumes: 
      - /home/dont_linux/dockers/container_data:/dkron/container_data
    networks: 
      dkron_default:
        ipv4_address: 172.18.0.3
    ports:
      - "8080"
      - "8946"
      - "6868"
    environment:
      - GODEBUG=netdns=go
    command: dkron agent --server --retry-join=dkron:8946 --log-level=debug --bootstrap-expect=5
  dkron-server2:
    build: .
    volumes: 
      - /home/dont_linux/dockers/container_data:/dkron/container_data
    networks: 
      dkron_default:
        ipv4_address: 172.18.0.4
    ports:
      - "8080"
      - "8946"
      - "6868"
    environment:
      - GODEBUG=netdns=go
    command: dkron agent --server --retry-join=dkron:8946 --log-level=debug --bootstrap-expect=5
  dkron-server3:
    build: .
    volumes: 
      - /home/dont_linux/dockers/container_data:/dkron/container_data
    networks: 
      dkron_default:
        ipv4_address: 172.18.0.5
    ports:
      - "8080"
      - "8946"
      - "6868"
    environment:
      - GODEBUG=netdns=go
    command: dkron agent --server --retry-join=dkron:8946 --log-level=debug --bootstrap-expect=5
  dkron-server4:
    build: .
    volumes: 
      - /home/dont_linux/dockers/container_data:/dkron/container_data
    networks: 
      dkron_default:
        ipv4_address: 172.18.0.6
    ports:
      - "8946"
      - "6868"
    environment:
      - GODEBUG=netdns=go
    command: dkron agent --server --retry-join=dkron:8946 --log-level=debug
networks: 
  dkron_default:
    ipam:
      config:
        - subnet: 172.18.0.0/16
          gateway: 172.18.0.1

3.3测试效果

    1.集群部署,leader失效,秒级重新进行选举;并循环尝试连接失效的服务器,等待加入集群;

1.leader失效验证(docker容器与宿主机8小时差)
#查看当前启动容器
[root@zk-master dont_linux]# date;docker ps
Wed Dec 23 11:35:22 CST 2020
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                                                                       NAMES
704ec52a9d83        dkron_dkron           "dkron agent --serve…"   10 minutes ago      Up About a minute   0.0.0.0:8080->8080/tcp, 0.0.0.0:32847->6868/tcp, 0.0.0.0:32846->8946/tcp    dkron_dkron_1
5a16a6fd5f63        dkron_dkron-server1   "dkron agent --serve…"   10 minutes ago      Up 9 minutes        0.0.0.0:32845->6868/tcp, 0.0.0.0:32844->8080/tcp, 0.0.0.0:32842->8946/tcp   dkron_dkron-server1_1
2f1253e88535        dkron_dkron-agent     "dkron agent --retry…"   10 minutes ago      Up 9 minutes        8080/tcp, 0.0.0.0:32837->6868/tcp, 0.0.0.0:32836->8946/tcp                  dkron_dkron-agent_1
7862fea5e212        dkron_dkron-server3   "dkron agent --serve…"   10 minutes ago      Up 9 minutes        0.0.0.0:32843->6868/tcp, 0.0.0.0:32841->8080/tcp, 0.0.0.0:32840->8946/tcp   dkron_dkron-server3_1
ed182ddd4d89        dkron_dkron-server2   "dkron agent --serve…"   10 minutes ago      Up 9 minutes        0.0.0.0:32835->6868/tcp, 0.0.0.0:32834->8080/tcp, 0.0.0.0:32833->8946/tcp   dkron_dkron-server2_1

#查看当前集群中leader服务
root@5a16a6fd5f63:/app# date;dkron raft list-peers
Wed Dec 23 03:35:25 UTC 2020
Node          ID            Address          State     Voter
704ec52a9d83  704ec52a9d83  172.18.0.4:6868  follower  true
7862fea5e212  7862fea5e212  172.18.0.5:6868  follower  true
5a16a6fd5f63  5a16a6fd5f63  172.18.0.6:6868  follower  true
ed182ddd4d89  ed182ddd4d89  172.18.0.2:6868  leader    true

#停止集群中leader服务
[root@zk-master dont_linux]# date;docker stop ed182ddd4d89
Wed Dec 23 11:35:30 CST 2020
ed182ddd4d89

#查看当前启动容器
date;docker ps
Wed Dec 23 11:35:33 CST 2020
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                                                                       NAMES
704ec52a9d83        dkron_dkron           "dkron agent --serve…"   10 minutes ago      Up About a minute   0.0.0.0:8080->8080/tcp, 0.0.0.0:32847->6868/tcp, 0.0.0.0:32846->8946/tcp    dkron_dkron_1
5a16a6fd5f63        dkron_dkron-server1   "dkron agent --serve…"   10 minutes ago      Up 10 minutes       0.0.0.0:32845->6868/tcp, 0.0.0.0:32844->8080/tcp, 0.0.0.0:32842->8946/tcp   dkron_dkron-server1_1
2f1253e88535        dkron_dkron-agent     "dkron agent --retry…"   10 minutes ago      Up 10 minutes       8080/tcp, 0.0.0.0:32837->6868/tcp, 0.0.0.0:32836->8946/tcp                  dkron_dkron-agent_1
7862fea5e212        dkron_dkron-server3   "dkron agent --serve…"   10 minutes ago      Up 10 minutes       0.0.0.0:32843->6868/tcp, 0.0.0.0:32841->8080/tcp, 0.0.0.0:32840->8946/tcp   dkron_dkron-server3_1
[root@zk-master dont_linux]# 

#查看当前集群leader
root@5a16a6fd5f63:/app# date;dkron raft list-peers
Wed Dec 23 03:35:38 UTC 2020
Node          ID            Address          State     Voter
704ec52a9d83  704ec52a9d83  172.18.0.4:6868  follower  true
7862fea5e212  7862fea5e212  172.18.0.5:6868  leader    true
5a16a6fd5f63  5a16a6fd5f63  172.18.0.6:6868  follower  true
ed182ddd4d89  ed182ddd4d89  172.18.0.2:6868  follower  true
root@5a16a6fd5f63:/app#

结论:leader失效后,可实现秒级重新选出leader

    2.运行job信息,会在每个容器中保存,以确保节点失效不会导致任务失效;

    3.执行器运行指令操作(路径+脚本),可以成功。

 4.配置任务信息至指定服务器运行job

三、Dkron项目结构

 分布式调度任务管理——Dkron(3)代码结构分析及部署运行第1张

角色模块:Agent、AgentClient与AgentServer、gRPCClient与gRPCserver、BuntDB

1.Agent:提供初始化Agent及启动gRPCServer服务、集群节点的管理、配置文件的读取

2.AgentClient与AgentServer:使用RPC机制进行任务下发至执行器,并接收其执行结果。

3.gRPCClient与gRPCserver:使用gPRC机制进行任务下发至Server端,并由其向数据库发送任务操作请求,并对任务链处理。

4.BuntDB:提供存储job的配置信息和job的执行信息(Execution)

分布式调度任务管理——Dkron(1)运行机制

分布式调度任务管理——Dkron(2)运行配置

分布式调度任务管理——Dkron(3)代码结构分析及部署运行


参考链接:
  https://dkron.io/basics/
源码链接:
  https://github.com/distribworks/dkron
 
 
 

免责声明:文章转载自《分布式调度任务管理——Dkron(3)代码结构分析及部署运行》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇win10 mars xlog编译Rust 智能指针(一)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

分布式/微服务必配APM系统,SkyWalking让你不迷路

APM系统当然不仅仅只是链路追踪,还可以根据各种性能指标分析应用程序及其运行环境,以便在发生故障的时候能快速定位及解决问题 前言 如今分布式、微服务盛行,面对拆分服务比较多的系统,如果线上出现异常,需要快速定位到异常服务节点,假如还用传统的方式排查肯定效率是极低的,因为服务之间的各种通信会让定位更加繁琐;所以就急需一个分布式链路追踪系统,方便快速定位异常节...

开源分布式文件系统比较

要使用分布式文件系统来降低成本,于是搜寻了开源的分布式文件系统。 经过安装部署和测试,把我使用中碰到的一些问题总结一下, 希望对大家有所帮助, 我也有一些问题没有搞懂,希望和大家一起交流,共同进步。 第一:CEPH 网上搜索了一些资料, 说 ceph 性能最高,C++编写的代码,支持Fuse,并且没有单点故障依赖, 于是下载安装, 由于 ceph 使用 b...

[.net 面向对象程序设计进阶] (22) 团队开发利器(一)简单易用的代码管理工具VSS

[.net 面向对象程序设计进阶] (22) 团队开发利器(一)简单易用的代码管理工具VSS 本篇要点:在进阶篇快要结束的时候说说源代码管理器,我们的开发,不是一个人可以完成的事,团队协作很重要,而且要对产品生命周期和开发过程进行规范管理才行。那么源代码管理器是必不可少的。本篇主要介绍一款非常简单易用,且有一定普及率的源代码管理工具VSS. 1.VSS简介...

hbase安装配置(整合到hadoop)

如果想详细了解hbase的安装:http://abloz.com/hbase/book.html 和官网http://hbase.apache.org/ 1.  快速单击安装 在单机安装Hbase的方法。会引导你通过shell创建一个表,插入一行,然后删除它,最后停止Hbase。只要10分钟就可以完成以下的操作。 1.1下载解压最新版本 选择一个 ...

配置管理工具比較

配置管理工具比較怎样选择配置管理工具  每一个软件项目,不管是project类项目,还是产品类项目,都必须经历需求分析、系统设计、编码实现、集成測试、部署、交付、维护和支持的过程。在这个过程中,将生成各种各样不同的工件,包含文档、源程序、可执行代码、支持库。更可怕的是,频繁出现的变更是不可避免的,因此面向如此庞大且不断变动的信息集,怎样使其有序、高效地存...

分布式日志系统

FROM:http://go-on.iteye.com/blog/1789466 背景 Google、Facebook、Amazon等互联网巨头对于数据的创造性使用,创造出了很多辉煌的商业产品。如Amazon创造出的新的推荐模式:”查询此商品的顾客也查询了。。。。。”、“看过此商品的后的顾客买的其他商品有。。。。。。”、“购买了您最近浏览过的商品的顾客同时...