docker搭建xxl_job及执行器的分布式集群 [记录]

学习记录文档,若有不足多谢指出。

xxl-job

xxl-job是一个优秀的分布式任务调度系统。



一、构建

1.下载

前往 https://github.com/xuxueli/xxl-job/releases 下载源码导入到你的开发环境解决所需依赖jar包。

我这里使用的idea。

2.搭建调度数据库

由于我的系统是macos没有docker的虚拟网卡为了方便服务和数据库之间的互相访问所以我将mysql搭建到docker容器上。

创建docker bridge网络

docker network create --subnet=172.30.0.0/24 net_xljob

创建docker数据卷

docker volume create mysql-xljob-volume

创建mysql容器加入net_xljob网络栈且指定容器在网络栈中的别名

docker run -itd --name=mysql_xljob \
    --network net_xljob \
    --network-alias na_mysql_xljob \
    -p 3306:3306/tcp \
    -v mysql-xljob-volume:/etc/mysql \
    -e MYSQL_ROOT_PASSWORD=root \
    mysql:5.7.29 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

使用你熟悉的可视化工具连接到刚刚创建的数据库,且执行doc/db/tables_xxl_job.sql 文件。

此时你可以尝试编译并运行模块xxl-job-admin(调度中心),xxl-job-executor-sample-springboot(执行器)。

二、部署

1.部署调度中心

修改项目配置文件

修改 xxl-job-admin 数据源url将host改为mysql在bridge中的别名(为什么使用别名?因为每次部署容器内部地址可能会发生变化,来回修改会很麻烦)

spring.datasource.url=jdbc:mysql://na_mysql_xljob:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai

配置docker 与run targets

依次选择:IDEA > Preferences > Build,Execution,Deployment > Docker在这里插入图片描述
依次选择:IDEA > Preferences > Build,Execution,Deployment > Run Targets > Add Target On > Docker
在这里插入图片描述

这里详细讲一下Run options参数

--rm --network net_xljob --ip 172.30.0.10 -p 8080:8080/tcp

–rm
每次运行结束删除容器,不然还要手动删。
–network
加入到我们一开始为这个项目创建的docker bridge网络栈以链接数据库并且与其它模块容器通信。
–ip 172.30.0.10
一方面是固定调度中心的ip不会因重启容器而变化,二是执行器的注册地址不能使用网络栈的别名。
-p 8080:8080/tcp
映射调度中心web服务的端口以进行查看状态和管理。

然后点next它会构建一个基于admin dockerfile的镜像。
在这里插入图片描述

配置Run/Debug Configurations

依次选择:IDEA > Run > Edit Configurations > Manage targets 选择刚刚创建的 Run Targets(image_xljob_admin:0.0.1)然后Apply保存运行即可。

2.部署/集群 执行器

修改项目配置文件

将xxl-job-executor-sample-springbootd模块配置文件xxl.job.admin.addressed条目的值改http://172.30.0.10:8080/xxl-job-admin

xxl.job.admin.addresses=http://172.30.0.10:8080/xxl-job-admin

172.30.0.10是调度中心服务在docker网络栈中的地址,执行器需要找到调度中心以调用它的api进行执行器注册。

配置完成后像admin模块一样使用maven插件Lifecycle > package 进行打包(dockerfile里指定了ADD target/xxl-job-executor-sample-springboot-*.jar /app.jar所以idea部署项目到docker执行时会扫描项目 target/路径寻找对应jar包)

配置run targets

在这里插入图片描述
这里的容器运行选项只需要指定容器要加入的 bridge网络即可

集群

如果是根据上面的配置进行的话,集群就无须额外配置,只需要复制idea的启动项即可。

在这里插入图片描述

三、结果

启动一下你的项目看一下结果叭!
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用 `docker_sd_config` 监控 Docker 集群,需要在 Prometheus 的配置文件设置相应的服务发现规则。以下是一个示例配置文件,用于监控运行在 Docker 集群的 Node.js 应用程序: ```yaml global: scrape_interval: 15s scrape_configs: - job_name: 'nodejs-app' metrics_path: '/metrics' file_sd_configs: - files: - /etc/prometheus/targets.json refresh_interval: 5m relabel_configs: - source_labels: [__meta_docker_container_label_com_docker_swarm_service_name] regex: '(.+)' target_label: job replacement: '$1' - source_labels: [__meta_docker_container_label_com_docker_swarm_task_id] regex: '(.+)' target_label: instance replacement: '$1' - source_labels: [__address__, __meta_docker_container_label_com_docker_swarm_task_id] regex: '([^:]+)(?::\d+)?' target_label: __address__ replacement: '$1:3000' - source_labels: [__meta_docker_container_label_com_docker_swarm_service_name] regex: '(.+)' target_label: service replacement: '$1' ``` 在上面的配置文件,`job_name` 是 Prometheus 的作业名称,`metrics_path` 是应用程序的指标路径。`file_sd_configs` 是文件服务发现配置,指定了用于存储应用程序地址信息的 JSON 文件路径。`relabel_configs` 是标签重写配置,用于将 Docker 元数据转换为 Prometheus 标签。 注意,上面的示例配置文件假设 Node.js 应用程序运行在容器的 3000 端口上。如果你的应用程序运行在不同的端口上,请相应地更改标签重写配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值