分布式調度任務管理——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)代碼結構分析及部署運行

 


參考鏈接:
源碼鏈接:
 
 
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM