基于Zookeeper的TbSchedule任务调度服务部署以及应用

年年有中秋,年年有十一;中秋刚刚远去,又来了十一小长假,一年即将逝去呢,珍惜每一天!!!

最近项目用到的任务调度服务框架TBSchedule,是基于Zookeeper的部署使用。

继续前言…

任务调度服务适用行业场景业务,商品订单、物流行业、报表、银行业务等

资源文件下载地址:
http://zookeeper.apache.org
http://code.taobao.org/p/tbschedule/src/

以下部署环境基于CentOS 7

一、Zookeeper伪集群部署

由于条件有限这里就选取了伪集群模式进行部署环境,自然单机模式相继就有了(zoo.cfg的配置);集群部署有条件的可自行研究哦。
关于Zookeeper的集群工作原理以及其中的选举有兴趣的网络中去搜罗吧。

1、TbSchedule依赖于Hadoop Zookeeper组件,实现任务的分布式配置及各服务间的交互通信,Zookeeper以TreeNode类型进行存储,支持Cluster形式部署且保证最终数据一致性。

2、创建ZookeeperLab文件夹目录,模拟部署3台Zookeeper服务器集群,目录结构如下。
这里写图片描述

3、解压从官网下载的zookeeper-3.4.9.tar.gz文件,并分别复制到三台ZkServer的zookeeper-3.4.9文件夹(解压命令:tar -zxvf zookeeper-3.4.9.tar.gz 指定目录)
基于Zookeeper的TbSchedule任务调度服务部署以及应用_第1张图片

4、分别在三台ZkServer的data目录下创建myid文件(注意没有后缀),用于标识每台Server的ID,在Server1\data\myid文件中保存单个数字1,Server2的myid文件保存2,Server3的myid保存3

5、创建ZkServer的配置文件,在zookeeper-3.4.9\conf文件夹目录下创建zoo.cfg,可以从示例的zoo_sample.cfg 复制重命名。因为在同一台机器模拟Cluster部署,端口号不能重复,配置文件中已经有详细的解释,修改后的配置如下,其中Server1端口号2181,Server2端口号2182,Server3端口号2183。
关键点已红框圈出注意-dataDir、dataLogDir与上述目录一致
server.*:*即为myid文件中的数字
基于Zookeeper的TbSchedule任务调度服务部署以及应用_第2张图片

注:server.A=B:C:D:其中 A 是一个数字,表示这个是第几号服务器;B 是这个服务器的 ip 地址;C 表示的是这个服务器与集群中的 Leader 服务器交换信息的端口;D 表示的是万一集群中的 Leader 服务器挂了,需要一个端口来重新进行选举,选出一个新的 Leader,而这个端口就是用来执行选举时服务器相互通信的端口。如果是伪集群的配置方式,由于 B 都是一样,所以不同的 Zookeeper 实例通信端口号不能一样,所以要给它们分配不同的端口号。(此部署即为伪集群)

详细参考:http://blog.csdn.net/liuziyingbeidou/article/details/52629546

哇哦哇哦即将可以启动。。。目睹为秒

6、通过zookeeper-3.4.9\bin文件夹zkServer.sh start-foreground文件启动ZKServer,由于Cluster部署需要选举Leader和Followers,所以在3个ZKServer全部启动之前会提示一个WARN,属正常现象

基于Zookeeper的TbSchedule任务调度服务部署以及应用_第3张图片

7、Zookeeper启动成功后可以通过zookeeper-3.4.9\bin文件夹的 zkCli.sh验证连接是否正常,比如创建节点“create /testnode helloworld”,查看节点“get /testnode”,连接到组群中其它ZkServer,节点数据应该是一致的。更多指令请使用help命令查看。

9、Zookeeper的配置部署完毕

二、TBSchedule控制台应用部署

1、TbSchedule Console是基于web页面对调度任务配置、部署、监控的终端。

2、将源码目录下的console\ScheduleConsole.war包及depend-lib库部署到Web应用服务器,本文以apache-tomcat-7.0.70为例,相关步骤不再描述。

3、首次打开页面会跳转到“基础信息配置”Config.jsp页面,其中前2项为Zookeeper服务的连接配置,请正确填写前面部署的Zookeeper服务器地址和端口号,多个ZKServer可以使用逗号分隔。后3项是用于标识ZkServer中调度任务配置的根节点和节点权限,无严格要求。

保存后,点击管理主页
基于Zookeeper的TbSchedule任务调度服务部署以及应用_第4张图片

4、点击保存后,会提示 “错误信息:Zookeeper connecting ……192.168.244.128:2181”,如果ZKServer配置正确可以不用理会,直接点击“管理主页”,若不能正常跳转到Index.jsp页面请重新检查Zookeeper的配置,建议关闭防火墙。

基于Zookeeper的TbSchedule任务调度服务部署以及应用_第5张图片

5、TbSchedule Console Web站点对应的两个地址

[监控页面] http://192.168.244.128:8080/ScheduleConsole/schedule/index.jsp

[管理页面] http://192.168.244.128:8080/ScheduleConsole/schedule/index.jsp?manager=true

如果以上地址能正常访问则TbSchedule Console的部署配置完成。

三、TBSchedule Worker Task 实现

只言关键点,不再过多文字讲述,敬请参考实例…

TBSchedule 简单Demo(Maven):
https://github.com/liuziyingbeidou/springboot/tree/master/zookeeper-tbschedule

IScheduleTaskDeal接口、任务分片了解参考:
http://code.taobao.org/p/tbschedule/wiki/index/

创建新任务时
执行开始时间:
每五分钟执行 /5 * * *
每小时执行 0 * * * *
每天执行 0 0 * * *
每周执行 0 0 * * 0
每月执行 0 0 1 * *
每年执行 0 0 1 1 *
每分钟的0秒开始 0 * * * * ?
表达式同Quartz设置的Crontab格式,有工具可以生成
详细解释参考:http://blog.csdn.net/liuziyingbeidou/article/details/52629596

TBSchedule值得研究,有兴趣同学可以对其二次扩展适应场景,欢迎交流!!!

《为你而厨-Leader》

你可能感兴趣的:(高可用/高并发)