【Quartz】配置最简单的集群
2015-10-09 00:04
585 查看
> 参考的优秀文章
Lesson 11: Advanced (Enterprise) Features在许多情况,我们希望我们的定时任务是可靠的,不会因系统故障、机器宕机而导致某一笔定时任务不能按时运行。这种情况下,我们就需要为Quartz做个集群。
最简单的情况,有两台机器或两个应用,同时维护一批定时任务,假如其中一个机器或应用出现问题,还有另外一个应用保底使用。
> 最简单的集群
代码与上一节【Quartz】将定时任务持久化到数据库基本一致,只列出不同的代码。在quartz.properties配置中设置需要集群,而集群节点的ID则由quartz自动生成
org.quartz.jobStore.isClustered = true org.quartz.scheduler.instanceId = AUTO
汇总后为
org.quartz.scheduler.instanceName = MyScheduler
org.quartz.threadPool.threadCount = 3
org.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.tablePrefix = QRTZ_
org.quartz.jobStore.dataSource = myDS
# Cluster
org.quartz.jobStore.isClustered = true org.quartz.scheduler.instanceId = AUTO
org.quartz.dataSource.myDS.driver = com.mysql.jdbc.Driver
org.quartz.dataSource.myDS.URL = jdbc:mysql://localhost:3306/ll?characterEncoding=utf-8
org.quartz.dataSource.myDS.user = root
org.quartz.dataSource.myDS.password = 123456
org.quartz.dataSource.myDS.maxConnections = 5
注:俩应用的配置应相似,除了某些特殊配置,如线程池数量、实例ID
这里启动两个应用,其中一个应用需要注册定时任务(这里注册的定时任务每30秒运行一次);另外一个应用因集群关系则无需注册定时任务。所以,启动类有所区别。
应用A的Bootstrap类
23:02:48.737 [main] INFO org.quartz.impl.StdSchedulerFactory - Using default implementation for ThreadExecutor 23:02:48.763 [main] INFO o.quartz.core.SchedulerSignalerImpl - Initialized Scheduler Signaller of type: class org.quartz.core.SchedulerSignalerImpl 23:02:48.764 [main] INFO org.quartz.core.QuartzScheduler - Quartz Scheduler v.2.2.1 created. 23:02:48.765 [main] INFO o.q.impl.jdbcjobstore.JobStoreTX - Using db table-based data access locking (synchronization). 23:02:48.767 [main] INFO o.q.impl.jdbcjobstore.JobStoreTX - JobStoreTX initialized. 23:02:48.768 [main] INFO org.quartz.core.QuartzScheduler - Scheduler meta-data: Quartz Scheduler (v2.2.1) 'MyScheduler' with instanceId 'USER-20141117SF1444316568742' Scheduler class: 'org.quartz.core.QuartzScheduler' - running locally. NOT STARTED. Currently in standby mode. Number of jobs executed: 0 Using thread pool 'org.quartz.simpl.SimpleThreadPool' - with 3 threads. Using job-store 'org.quartz.impl.jdbcjobstore.JobStoreTX' - which supports persistence. and is clustered. 23:02:48.768 [main] INFO org.quartz.impl.StdSchedulerFactory - Quartz scheduler 'MyScheduler' initialized from default resource file in Quartz package: 'quartz.properties' 23:02:48.768 [main] INFO org.quartz.impl.StdSchedulerFactory - Quartz scheduler version: 2.2.1 23:02:48.995 [main] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'STATE_ACCESS' is desired by: main 23:02:49.008 [main] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'STATE_ACCESS' is being obtained: main 23:02:49.015 [main] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'STATE_ACCESS' given to: main 23:02:49.018 [main] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - Adding TriggerPersistenceDelegate of type: org.quartz.impl.jdbcjobstore.SimpleTriggerPersistenceDelegate 23:02:49.019 [main] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - Adding TriggerPersistenceDelegate of type: org.quartz.impl.jdbcjobstore.CronTriggerPersistenceDelegate 23:02:49.020 [main] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - Adding TriggerPersistenceDelegate of type: org.quartz.impl.jdbcjobstore.CalendarIntervalTriggerPersistenceDelegate 23:02:49.021 [main] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - Adding TriggerPersistenceDelegate of type: org.quartz.impl.jdbcjobstore.DailyTimeIntervalTriggerPersistenceDelegate 23:02:49.084 [main] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'STATE_ACCESS' returned by: main 23:02:49.087 [main] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete. 23:02:49.088 [main] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - JobStore background threads started (as scheduler was started). 23:02:49.088 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_MisfireHandler] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - MisfireHandler: scanning for misfires... 23:02:49.089 [main] INFO org.quartz.core.QuartzScheduler - Scheduler MyScheduler_$_USER-20141117SF1444316568742 started. 23:02:49.097 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_MisfireHandler] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - Found 0 triggers that missed their scheduled fire-time. 23:02:49.100 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 0 triggers 23:02:49.764 [Timer-0] DEBUG org.quartz.utils.UpdateChecker - Checking for available updated version of Quartz... 23:02:56.568 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete. 23:03:04.064 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete. 23:03:11.573 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete. 23:03:13.468 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 0 triggers 23:03:19.075 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete. 23:03:26.625 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete. 23:03:34.086 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete. 23:03:40.882 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 0 triggers 23:03:41.584 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete. 23:03:49.088 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_MisfireHandler] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - MisfireHandler: scanning for misfires... 23:03:49.090 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_MisfireHandler] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - Found 0 triggers that missed their scheduled fire-time. 23:03:49.095 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete. 23:03:56.586 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete. 23:04:03.918 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 0 triggers 23:04:04.095 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete. 23:04:11.606 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete. 23:04:19.100 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete. 23:04:26.618 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete. 23:04:33.846 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 0 triggers 23:04:34.103 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete. 23:04:41.604 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete. 23:04:49.089 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_MisfireHandler] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - MisfireHandler: scanning for misfires... 23:04:49.092 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_MisfireHandler] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - Found 0 triggers that missed their scheduled fire-time. 23:04:49.104 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'STATE_ACCESS' is desired by: QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager 23:04:49.104 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'STATE_ACCESS' is being obtained: QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager 23:04:49.105 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'STATE_ACCESS' given to: QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager 23:04:49.107 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is desired by: QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager 23:04:49.108 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is being obtained: QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager 23:04:49.109 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' given to: QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager 23:04:49.109 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] INFO o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: detected 1 failed or restarted instances. 23:04:49.109 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] INFO o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Scanning for instance "USER-20141117SF1444316564782"'s failed in-progress jobs. 23:04:49.119 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] INFO o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: ......Freed 1 acquired trigger(s). 23:04:49.120 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: ......Deleted 0 complete triggers(s). 23:04:49.120 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: ......Scheduled 0 recoverable job(s) for recovery. 23:04:49.120 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: ......Cleaned-up 0 other failed job(s). 23:04:49.187 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' returned by: QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager 23:04:49.187 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'STATE_ACCESS' returned by: QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager 23:04:49.188 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete. 23:04:49.245 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers 23:04:56.620 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete. 23:05:00.003 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is desired by: MyScheduler_QuartzSchedulerThread 23:05:00.004 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is being obtained: MyScheduler_QuartzSchedulerThread 23:05:00.006 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' given to: MyScheduler_QuartzSchedulerThread 23:05:00.063 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' returned by: MyScheduler_QuartzSchedulerThread 23:05:00.069 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.simpl.PropertySettingJobFactory - Producing instance of Job 'group1.job1', class=No01简单的定时任务.HelloJob 23:05:00.076 [MyScheduler_Worker-1] DEBUG org.quartz.core.JobRunShell - Calling execute on job group1.job1 23:05:00.076 [MyScheduler_Worker-1] DEBUG No01简单的定时任务.HelloJob - No01简单的定时任务.HelloJob trigger... 23:05:00.080 [MyScheduler_Worker-1] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is desired by: MyScheduler_Worker-1 23:05:00.081 [MyScheduler_Worker-1] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is being obtained: MyScheduler_Worker-1 23:05:00.083 [MyScheduler_Worker-1] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' given to: MyScheduler_Worker-1 23:05:00.146 [MyScheduler_Worker-1] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' returned by: MyScheduler_Worker-1 23:05:00.215 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers 23:05:04.106 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete. 23:05:11.617 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete. 23:05:19.117 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete. 23:05:26.651 [QuartzScheduler_MyScheduler-USER-20141117SF1444316568742_ClusterManager] DEBUG o.q.impl.jdbcjobstore.JobStoreTX - ClusterManager: Check-in complete. 23:05:30.001 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is desired by: MyScheduler_QuartzSchedulerThread 23:05:30.002 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is being obtained: MyScheduler_QuartzSchedulerThread 23:05:30.003 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' given to: MyScheduler_QuartzSchedulerThread 23:05:30.057 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' returned by: MyScheduler_QuartzSchedulerThread 23:05:30.058 [MyScheduler_QuartzSchedulerThread] DEBUG o.q.simpl.PropertySettingJobFactory - Producing instance of Job 'group1.job1', class=No01简单的定时任务.HelloJob 23:05:30.058 [MyScheduler_Worker-2] DEBUG org.quartz.core.JobRunShell - Calling execute on job group1.job1 23:05:30.059 [MyScheduler_Worker-2] DEBUG No01简单的定时任务.HelloJob - No01简单的定时任务.HelloJob trigger... 23:05:30.060 [MyScheduler_Worker-2] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is desired by: MyScheduler_Worker-2 23:05:30.060 [MyScheduler_Worker-2] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' is being obtained: MyScheduler_Worker-2 23:05:30.061 [MyScheduler_Worker-2] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' given to: MyScheduler_Worker-2 23:05:30.124 [MyScheduler_Worker-2] DEBUG o.q.i.j.StdRowLockSemaphore - Lock 'TRIGGER_ACCESS' returned by: MyScheduler_Worker-2 23:05:30.183 [MyScheduler_QuartzSchedulerThread] DEBUG o.quartz.core.QuartzSchedulerThread - batch acquisition of 1 triggers
View Code
通过日志观察可见,首先定时任务有应用A执行,在应用A被关闭后,定时任务由应用B继续触发执行。
注:这里观察到,似乎不是负载均衡,因为在应用A关闭后应用B才有机会运行。而我们理想中,应该是应用A与应用B互相补充、交替运行。这里主要因为只用了一个任务(只有一个触发器)做测试,如果运用多个触发器设置多个任务做测试,应用A与应用B互相补充、交替运行。原文为:
The load balancing mechanism is near-random for busy schedulers (lots of triggers) but favors the same node that just was just active for non-busy (e.g. one or two triggers) schedulers.
相关文章推荐
- nginx反向代理之缓存,负载均衡,动静分离的配置详解
- 如何获取、安装和制作 GTK 主题
- 浅析Linux系统下安装wetty和使用说明
- JSP实现的简单Web投票程序代码
- JSP验证码简单生成方法
- swift中的正则表达式小结
- python3爬虫之入门基础和正则表达式
- ASP.NET如何定时调用WebService服务
- GridView控件如何显示序号
- HTC悄然发布One E9s 售人民币2063元
- PHP+jQuery+Ajax实现分页效果 jPaginate插件的应用
- PHP程序员不应该忽略的3点
- 如何解决phpmyadmin导入数据库文件最大限制2048KB
- PHP中Closure类的使用方法及详解
- ThinkPHP让../Public在模板不解析(直接输出)的方法 原创
- php中删除、清空session的方式总结
- JS实现样式清新的横排下拉菜单效果
- JavaScript实现横向滑出的多级菜单效果
- JS实现可展开折叠层的鼠标拖曳效果
- jQuery拖动布局其结果保存到数据库