分布式调度任务管理——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)代码结构分析及部署运行
参考链接:
源码链接: