zoukankan      html  css  js  c++  java
  • 分布式调度任务管理——Dkron(3)代码结构分析及部署运行

    结构:

      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项目结构

     

    角色模块: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)代码结构分析及部署运行


    参考链接:
    源码链接:
     
     
     
  • 相关阅读:
    phpmailer发送邮件,可以带附件
    poj 3370 鸽笼原理知识小结
    yii_wiki_145_yii-cjuidialog-for-create-new-model (通过CJuiDialog来创建新的Model)
    兄弟单词查询
    asp.net mvc3 利用Ajax实现局部刷新
    eclipse 找不到application选项
    ECharts一个强大的商业产品图表库
    多校训练hdu --Nice boat(线段树,都是泪)
    [外文理解] DDD创始人Eric Vans:要实现DDD原始意图,必须CQRS+Event Sourcing架构。
    ubuntu重新启动网卡
  • 原文地址:https://www.cnblogs.com/single-dont/p/14187634.html
Copyright © 2011-2022 走看看