Docker部署XXL-JOB的示例代碼
1. 引言
XXL-JOB 是一個開源的分布式任務(wù)調(diào)度平臺,旨在簡化定時任務(wù)的管理和調(diào)度操作。其強(qiáng)大的功能和靈活性,使其在互聯(lián)網(wǎng)公司和各大企業(yè)的定時任務(wù)管理中得到了廣泛應(yīng)用。本文將詳細(xì)介紹如何在 MySQL 中創(chuàng)建一個專門的用戶以支持 XXL-JOB,并使用 Docker 容器化方式快速部署 XXL-JOB 的管理端。
2. 環(huán)境準(zhǔn)備
在開始部署之前,確保你已經(jīng)準(zhǔn)備好以下環(huán)境:
- MySQL:用于存儲 XXL-JOB 的調(diào)度任務(wù)和日志。
- Docker:用于容器化部署 XXL-JOB,確保其在不同環(huán)境中快速一致地運行。
此外,還需要確保 MySQL 服務(wù)已經(jīng)啟動并能夠接受遠(yuǎn)程連接。Docker 的安裝和基礎(chǔ)操作應(yīng)當(dāng)已具備,以確保后續(xù)的部署工作順利進(jìn)行。
3. 創(chuàng)建 MySQL 用戶并授予權(quán)限
為了確保 XXL-JOB 在 MySQL 中擁有足夠的權(quán)限操作調(diào)度任務(wù)數(shù)據(jù),我們需要創(chuàng)建一個獨立的 MySQL 用戶并授予其適當(dāng)?shù)臋?quán)限。
3.1 登錄 MySQL
首先,使用以下命令以 root 用戶身份登錄到 MySQL:
mysql -u root -p
3.2 創(chuàng)建數(shù)據(jù)庫
接著,創(chuàng)建一個專用于存儲 XXL-JOB 數(shù)據(jù)的數(shù)據(jù)庫:
CREATE DATABASE IF NOT EXISTS `xxl_job` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
此步驟確保數(shù)據(jù)庫使用 UTF-8 編碼,以支持多語言環(huán)境下的數(shù)據(jù)存儲。
3.3 創(chuàng)建用戶并授予權(quán)限
為 XXL-JOB 創(chuàng)建一個專門的 MySQL 用戶,并授予其對 xxl_job
數(shù)據(jù)庫的全部操作權(quán)限:
CREATE USER 'xxl_job'@'%' IDENTIFIED BY 'your_password'; GRANT ALL PRIVILEGES ON xxl_job.* TO 'xxl_job'@'%'; FLUSH PRIVILEGES;
在這里,我們使用通配符 %
允許來自任何主機(jī)的連接。如果安全性要求較高,可以將其限制為特定主機(jī)。
3.4 初始化 XXL-JOB 數(shù)據(jù)庫
XXL-JOB 提供了一套初始化 SQL 腳本,用于創(chuàng)建所需的數(shù)據(jù)表和初始數(shù)據(jù)。
use `xxl_job`; SET NAMES utf8mb4; CREATE TABLE `xxl_job_info` ( `id` int(11) NOT NULL AUTO_INCREMENT, `job_group` int(11) NOT NULL COMMENT '執(zhí)行器主鍵ID', `job_desc` varchar(255) NOT NULL, `add_time` datetime DEFAULT NULL, `update_time` datetime DEFAULT NULL, `author` varchar(64) DEFAULT NULL COMMENT '作者', `alarm_email` varchar(255) DEFAULT NULL COMMENT '報警郵件', `schedule_type` varchar(50) NOT NULL DEFAULT 'NONE' COMMENT '調(diào)度類型', `schedule_conf` varchar(128) DEFAULT NULL COMMENT '調(diào)度配置,值含義取決于調(diào)度類型', `misfire_strategy` varchar(50) NOT NULL DEFAULT 'DO_NOTHING' COMMENT '調(diào)度過期策略', `executor_route_strategy` varchar(50) DEFAULT NULL COMMENT '執(zhí)行器路由策略', `executor_handler` varchar(255) DEFAULT NULL COMMENT '執(zhí)行器任務(wù)handler', `executor_param` varchar(512) DEFAULT NULL COMMENT '執(zhí)行器任務(wù)參數(shù)', `executor_block_strategy` varchar(50) DEFAULT NULL COMMENT '阻塞處理策略', `executor_timeout` int(11) NOT NULL DEFAULT '0' COMMENT '任務(wù)執(zhí)行超時時間,單位秒', `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失敗重試次數(shù)', `glue_type` varchar(50) NOT NULL COMMENT 'GLUE類型', `glue_source` mediumtext COMMENT 'GLUE源代碼', `glue_remark` varchar(128) DEFAULT NULL COMMENT 'GLUE備注', `glue_updatetime` datetime DEFAULT NULL COMMENT 'GLUE更新時間', `child_jobid` varchar(255) DEFAULT NULL COMMENT '子任務(wù)ID,多個逗號分隔', `trigger_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '調(diào)度狀態(tài):0-停止,1-運行', `trigger_last_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '上次調(diào)度時間', `trigger_next_time` bigint(13) NOT NULL DEFAULT '0' COMMENT '下次調(diào)度時間', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `xxl_job_log` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `job_group` int(11) NOT NULL COMMENT '執(zhí)行器主鍵ID', `job_id` int(11) NOT NULL COMMENT '任務(wù),主鍵ID', `executor_address` varchar(255) DEFAULT NULL COMMENT '執(zhí)行器地址,本次執(zhí)行的地址', `executor_handler` varchar(255) DEFAULT NULL COMMENT '執(zhí)行器任務(wù)handler', `executor_param` varchar(512) DEFAULT NULL COMMENT '執(zhí)行器任務(wù)參數(shù)', `executor_sharding_param` varchar(20) DEFAULT NULL COMMENT '執(zhí)行器任務(wù)分片參數(shù),格式如 1/2', `executor_fail_retry_count` int(11) NOT NULL DEFAULT '0' COMMENT '失敗重試次數(shù)', `trigger_time` datetime DEFAULT NULL COMMENT '調(diào)度-時間', `trigger_code` int(11) NOT NULL COMMENT '調(diào)度-結(jié)果', `trigger_msg` text COMMENT '調(diào)度-日志', `handle_time` datetime DEFAULT NULL COMMENT '執(zhí)行-時間', `handle_code` int(11) NOT NULL COMMENT '執(zhí)行-狀態(tài)', `handle_msg` text COMMENT '執(zhí)行-日志', `alarm_status` tinyint(4) NOT NULL DEFAULT '0' COMMENT '告警狀態(tài):0-默認(rèn)、1-無需告警、2-告警成功、3-告警失敗', PRIMARY KEY (`id`), KEY `I_trigger_time` (`trigger_time`), KEY `I_handle_code` (`handle_code`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `xxl_job_log_report` ( `id` int(11) NOT NULL AUTO_INCREMENT, `trigger_day` datetime DEFAULT NULL COMMENT '調(diào)度-時間', `running_count` int(11) NOT NULL DEFAULT '0' COMMENT '運行中-日志數(shù)量', `suc_count` int(11) NOT NULL DEFAULT '0' COMMENT '執(zhí)行成功-日志數(shù)量', `fail_count` int(11) NOT NULL DEFAULT '0' COMMENT '執(zhí)行失敗-日志數(shù)量', `update_time` datetime DEFAULT NULL, PRIMARY KEY (`id`), UNIQUE KEY `i_trigger_day` (`trigger_day`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `xxl_job_logglue` ( `id` int(11) NOT NULL AUTO_INCREMENT, `job_id` int(11) NOT NULL COMMENT '任務(wù),主鍵ID', `glue_type` varchar(50) DEFAULT NULL COMMENT 'GLUE類型', `glue_source` mediumtext COMMENT 'GLUE源代碼', `glue_remark` varchar(128) NOT NULL COMMENT 'GLUE備注', `add_time` datetime DEFAULT NULL, `update_time` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `xxl_job_registry` ( `id` int(11) NOT NULL AUTO_INCREMENT, `registry_group` varchar(50) NOT NULL, `registry_key` varchar(255) NOT NULL, `registry_value` varchar(255) NOT NULL, `update_time` datetime DEFAULT NULL, PRIMARY KEY (`id`), KEY `i_g_k_v` (`registry_group`,`registry_key`,`registry_value`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `xxl_job_group` ( `id` int(11) NOT NULL AUTO_INCREMENT, `app_name` varchar(64) NOT NULL COMMENT '執(zhí)行器AppName', `title` varchar(12) NOT NULL COMMENT '執(zhí)行器名稱', `address_type` tinyint(4) NOT NULL DEFAULT '0' COMMENT '執(zhí)行器地址類型:0=自動注冊、1=手動錄入', `address_list` text COMMENT '執(zhí)行器地址列表,多地址逗號分隔', `update_time` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `xxl_job_user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL COMMENT '賬號', `password` varchar(50) NOT NULL COMMENT '密碼', `role` tinyint(4) NOT NULL COMMENT '角色:0-普通用戶、1-管理員', `permission` varchar(255) DEFAULT NULL COMMENT '權(quán)限:執(zhí)行器ID列表,多個逗號分割', PRIMARY KEY (`id`), UNIQUE KEY `i_username` (`username`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `xxl_job_lock` ( `lock_name` varchar(50) NOT NULL COMMENT '鎖名稱', PRIMARY KEY (`lock_name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; INSERT INTO `xxl_job_group`(`id`, `app_name`, `title`, `address_type`, `address_list`, `update_time`) VALUES (1, 'xxl-job-executor-sample', '示例執(zhí)行器', 0, NULL, '2018-11-03 22:21:31' ); INSERT INTO `xxl_job_info`(`id`, `job_group`, `job_desc`, `add_time`, `update_time`, `author`, `alarm_email`, `schedule_type`, `schedule_conf`, `misfire_strategy`, `executor_route_strategy`, `executor_handler`, `executor_param`, `executor_block_strategy`, `executor_timeout`, `executor_fail_retry_count`, `glue_type`, `glue_source`, `glue_remark`, `glue_updatetime`, `child_jobid`) VALUES (1, 1, '測試任務(wù)1', '2018-11-03 22:21:31', '2018-11-03 22:21:31', 'XXL', '', 'CRON', '0 0 0 * * ? *', 'DO_NOTHING', 'FIRST', 'demoJobHandler', '', 'SERIAL_EXECUTION', 0, 0, 'BEAN', '', 'GLUE代碼初始化', '2018-11-03 22:21:31', ''); INSERT INTO `xxl_job_user`(`id`, `username`, `password`, `role`, `permission`) VALUES (1, 'admin', 'e10adc3949ba59abbe56e057f20f883e', 1, NULL); INSERT INTO `xxl_job_lock` ( `lock_name`) VALUES ( 'schedule_lock'); commit;
執(zhí)行完這些 SQL 語句后,XXL-JOB 將擁有必要的數(shù)據(jù)結(jié)構(gòu)來存儲任務(wù)信息和執(zhí)行日志。
4. 使用 Docker 部署 XXL-JOB
XXL-JOB 支持 Docker 容器化部署,使其可以快速在任何支持 Docker 的環(huán)境中運行。以下是詳細(xì)的部署步驟:
4.1 拉取 XXL-JOB 鏡像
首先,從 Docker Hub 拉取最新版本的 XXL-JOB 管理端鏡像:
docker pull xuxueli/xxl-job-admin:2.4.1
確保使用的是最新版鏡像,以獲得最新功能和安全更新。
4.2 運行 XXL-JOB 容器
使用以下命令運行 XXL-JOB 容器:
mkdir -p /usr/local/docker/xxl-job/logs docker run --restart=always --privileged=true -e PARAMS="--spring.datasource.username=xxl_job --spring.datasource.password=your_password --spring.datasource.url=jdbc:mysql://your_mysql_host:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai" -p 8080:8080 -v /usr/local/docker/xxl-job/logs:/data/applogs --name xxl-job-admin -d xuxueli/xxl-job-admin:2.4.1
這里,我們使用了多種參數(shù)來確保 XXL-JOB 能夠正確連接到 MySQL 數(shù)據(jù)庫,并且配置了日志存儲路徑。
參數(shù)解析
--restart=always
:確保容器在崩潰后自動重啟。--privileged=true
:為容器賦予更多權(quán)限,避免某些受限操作失敗。-e PARAMS
:通過環(huán)境變量傳遞 Spring Boot 配置項,確保數(shù)據(jù)庫連接參數(shù)正確無誤。-p 8080:8080
:將容器內(nèi)部的 8080 端口映射到主機(jī),以便外部訪問。-v /usr/local/docker/xxl-job/logs:/data/applogs
:將主機(jī)的日志目錄掛載到容器,方便日志持久化和分析。
4.3 常見問題與調(diào)試
在運行過程中,可能會遇到 MySQL 連接失敗或端口沖突等問題。你可以通過以下步驟進(jìn)行排查:
- 確認(rèn) MySQL 服務(wù)正常運行,并且 Docker 容器可以訪問 MySQL 服務(wù)器。
- 檢查
docker logs xxl-job-admin
輸出,分析日志以排除配置錯誤或環(huán)境問題。
5. 配置 XXL-JOB
當(dāng)容器成功運行后,你可以通過瀏覽器訪問 http://your_server_ip:8080/xxl-job-admin
進(jìn)行管理后臺的配置。首次登錄時,使用默認(rèn)的用戶名和密碼:admin/123456
。
5.1 修改默認(rèn)密碼
出于安全考慮,建議立即修改默認(rèn)密碼。登錄后進(jìn)入用戶管理頁面,更新管理員賬戶的密碼,避免因弱密碼帶來的安全風(fēng)險。
5.2 配置調(diào)度中心
在 調(diào)度中心配置
頁面中,設(shè)置集群信息和調(diào)度策略。你可以根據(jù)業(yè)務(wù)需求配置不同的執(zhí)行策略,如并行執(zhí)行、錯峰執(zhí)行等,以滿足復(fù)雜場景下的任務(wù)調(diào)度需求。
6. 驗證部署
配置完成后,你可以創(chuàng)建一個簡單的任務(wù)來驗證 XXL-JOB 是否正常工作。以下是一個快速的驗證步驟:
- 進(jìn)入 XXL-JOB 管理后臺。
- 新建一個調(diào)度任務(wù),例如每分鐘執(zhí)行一次的 Hello World 打印任務(wù)。
- 觀察任務(wù)執(zhí)行情況,確保任務(wù)按預(yù)期時間和頻率執(zhí)行。
如果任務(wù)執(zhí)行成功,說明 XXL-JOB 已經(jīng)正確部署并可以投入生產(chǎn)使用。
7. 總結(jié)
通過本文的介紹,我們完成了在 Docker 環(huán)境中部署 XXL-JOB 的全過程。從 MySQL 數(shù)據(jù)庫用戶的創(chuàng)建,到 Docker 容器的部署,再到最后的任務(wù)驗證,XXL-JOB 的部署步驟清晰明確。借助 Docker,XXL-JOB 可以快速部署到任何支持 Docker 的環(huán)境中,極大簡化了運維工作。
到此這篇關(guān)于Docker部署XXL-JOB的示例代碼的文章就介紹到這了,更多相關(guān)Docker部署XXL-JOB內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
如何修改docker官方鏡像內(nèi)部內(nèi)容并重新build鏡像
這篇文章主要介紹了如何修改docker官方鏡像內(nèi)部內(nèi)容并重新build鏡像問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08如何Docker化Python Django應(yīng)用程序
今天小編就為大家分享一篇關(guān)于如何Docker化Python Django應(yīng)用程序的文章,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2018-09-09使用Docker構(gòu)建一個Git鏡像使用clone倉庫
這篇文章主要介紹了使用Docker構(gòu)建一個Git鏡像使用clone倉庫,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12