Spring quartz 叢集模式下trigger_state error問題原因
問題描述
在專案中採用了Spring quartz排程任務來執行定時任務,quartz本身是支援叢集化方式的,可以配置一個資料來源,quartz會在資料庫中建立一系列的表,使用這些表來儲存排程的資訊,叢集中所有的節點都訪問這一個資料庫,這樣可以實現叢集環境下的定時任務排程。
但是在最近生產環境出現了這樣的問題,新增的一個定時排程任務,當服務啟動後,執行兩次以後,該任務就不再執行了,但是其他原有的定時任務並沒有出現問題,只有這個新增的任務無法執行,檢查qrtz_triggers表,發現該條排程任務的記錄的trigger_state變成了”error”狀態。
問題分析
1、檢查是否新增的定時任務丟擲異常,導致了任務中斷,加入大量的日誌以及異常捕獲,未發現任何異常的日誌,排除了程式碼報錯的可能
2、猜測是否是因為資料庫中排程相關表存在髒資料,導致了新增的排程任務不執行;隨後將相關表全部清空,重啟叢集中所有節點,觀察,發現仍然是執行兩次後變為”error”
3、檢查qrtz_scheduler_state表,發現存在多條記錄,根據網上查詢的資訊,將多條記錄刪除,只保留一條,再重啟叢集,觀察,發現仍然不行
4、由第三條可知,qrtz_scheduler_state表中有多條記錄,仔細觀察instance_name的記錄,發現是由伺服器節點的例項名加數字組成,將instance的地址與叢集中每個節點進行對比,發現問題原因,有兩個instance的id並不在生成環境的叢集節點中,但是與叢集公用一個資料庫,那兩個節點的程式碼版本,發現與當前線上版本不一致,沒有新增的定時排程任務,由此導致了該問題的發生
問題總結
當使用quartz叢集模式時,當叢集中的程式碼版本不一致,會出現qrtz_triggers中trigger_state的狀態變為”error”的情況,原因是叢集模式先quartz執行排程任務,是根據資料庫表中的排程記錄進行執行,當執行到有對應程式碼的節點上,不會出現問題,但是當執行到沒有對應程式碼的節點上,就會變為”error”,
因此在叢集環境下,節點較多的時候使用quartz,需要注意每個節點的程式碼版本一定要保持一致
相關文章
- Spring quartz 叢集模式的坑Springquartz模式
- Quartz在Spring中叢集quartzSpring
- spring整合quartz的叢集配置例項Springquartz
- Quartz - Spring整合Quartz實現叢集的定時任務quartzSpring
- 【Redis叢集原理專題】分析一下相關的Redis叢集模式下的腦裂問題!Redis模式
- quartz叢集增強版🎉quartz
- 求助websphere下的叢集問題?急!!Web
- springmvc+quartz叢集+sqlserverSpringMVCquartzSQLServer
- Spring Boot Quartz 分散式叢集任務排程實現Spring Bootquartz分散式
- Spring&Quartz使用資料庫叢集配置(MySQL/SQLServer/Oracle)Springquartz資料庫MySqlServerOracle
- Quartz叢集原理及配置應用quartz
- Spring Boot整合Redis叢集(Cluster模式)Spring BootRedis模式
- windows叢集下 ORACLE EM 的啟動問題WindowsOracle
- WebServer叢集的問題WebServer
- OSCache叢集環境下快取同步的問題快取
- CCE叢集VPC網路模式下幾種訪問場景模式
- Quartz叢集增強版_01.叢集及缺火處理(ClusterMisfireHandler)quartz
- redis叢集密碼問題Redis密碼
- spring4.x 整合quartz2.x 叢集化配置專案例項Springquartz
- redis偽叢集配置Cluster叢集模式Redis模式
- Redis系列:搭建Redis叢集(叢集模式)Redis模式
- mysql叢集02:幾個問題MySql
- redis 叢集常見問題 QARedis
- 【問題追查】mc叢集寫入恍惚問題排查
- Spring Boot(十三):整合Redis哨兵,叢集模式實踐Spring BootRedis模式
- repmgr 叢集雙主問題處理
- 搭建postgresql叢集的問題彙總SQL
- 專案叢集引發的問題
- 請教個mysql叢集的問題MySql
- Memcached 叢集架構方面的問題架構
- Quartz叢集增強版_00.How to use?(如何使用)quartz
- linux下搭建ZooKeeper叢集(偽叢集)Linux
- Quartz在weblogic下初始化兩次問題quartzWeb
- 解決叢集 Yellow 與 Red 的問題
- rocketMq叢集master模式搭建MQAST模式
- CarbonData叢集模式體驗模式
- Redis三種叢集模式Redis模式
- zookeeper偽叢集模式搭建模式