tbschedule项目其实可以分为两部分:
- schedule管理控制台。负责控制、监控任务执行状态
- 实际执行job的客户端程序。
在实际使用时,首先要启动zookeeper, 然后部署tbschedule web界面的管理控制台,最后启动实际执行job的客户机器。这里zookeeper并不实际控制任务调度,它只是负责与N台执行job的客户端通讯,协调、管理、监控这些机器的运行信息。实际分配任务的是tbschedule管理控制台,控制台从zookeeper获取job的运行信息。
tbSchedule通过控制ZNode
的创建、修改、删除来间接控制Job的执行,执行Job的客户端会监听它们对应ZNode
的状态更新事件,从而达到通过tbSchedule控制Job执行的目的。
部署zookeeper
去http://zookeeper.apache.org/releases.html#download下载最新稳定版本。下载完成后解压,将 /conf
目录下的XXX.cfg
更名为zoo.cfg
,因为zookeeper启动时会在这个目录下找zoo.cfg
读取配置信息。这个文件里有几个重要的参数需要说明一下:
tickTime=2000
- 定义时间计量单位。这里表示一个
tick
为2秒。以后在配置时间相关的东西时,都是以tick
为单位的。
- 定义时间计量单位。这里表示一个
dataDir=/tmp
- 定义快照(snapshot)文件的存储位置。zookeeper会将节点信息定时写入到这个目录中。这个目录必须存在,否则启动时会报错。
clientPort=2181
- 指定客户端连接端口。 zookeeper会在这个端口监听连接请求。
server.1=127.0.0.1:2000:3000
- 这个参数仅在集群部署时起作用。格式为:
server.id=host:port:port
。id
表示服务器的唯一标识,一般从1开始计数。第一个port
表示zookeeper集群机器之间的通讯端口,第二个port
表示当集群机器在选举leader
时使用的通讯端口。只有当集群第一次启动,或master
机崩溃时,才会进行leader
选举。
- 这个参数仅在集群部署时起作用。格式为:
配置完成后,切换到/bin
目录,执行:
./zkServer.sh start
即可启动zookeeper,默认会在后台运行,如果想在前端运行,需要执行:
./zkServer.sh start-foreground
Zookeeper集群部署
集群部署时,除了需要指定zoo.cfg
中server.X:XXXX:XX:XX
参数外,还要在每台机器的dataDir
目录下创建一个名为myid
的文件,内容为当前机器的标识数字,与server.X
中的X
相同。完成配置后,依次启动每个zookeeper即可。
注意,当你在启动第一个zookeeper时控制台会大量报错,这是因为其它的zookeeper还没有启动。无视即可。
tbSchedule控制台部署
tbSchedule就是个用servlet/JSP
写的web项目,我们可以直接把war
包部署到tomcat
中,然后在浏览器访问
http://localhost:8080/ScheduleConsole
即可。
如果你想手动编译、构建项目而不是使用war
包,要小心一个坑,那就是执行
mvn clean install -Dmaven.test.skip=true
时