2011-07-12 20 views
14

Tengo una capa de servidores de aplicaciones idénticas detrás de un equilibrador de carga. Por razones operativas, tengo la limitación de que la configuración de la aplicación en ambos servidores de aplicaciones debe ser idéntica para que los nodos puedan agregarse y eliminarse fácilmente. Todos los servidores de aplicaciones comparten la misma base de datos. Los servidores de aplicaciones no se agrupan/no se agruparán.Uso de Quartz para programar un único trabajo en múltiples servidores de aplicaciones sin estado

Esto ha funcionado bien hasta ahora, pero ahora me gustaría tener un trabajo programado que se ejecuta en exactamente uno de los servidores de aplicaciones. Todos los servidores de aplicaciones ejecutarán Quartz y tendrán el mismo horario para ejecutar trabajos. El disparador se activará en todos los servidores de aplicaciones, pero me gustaría que solo un servidor de aplicaciones ejecute realmente el trabajo. En esencia, todos corren para comenzar y solo uno comienza, los servidores de aplicaciones restantes simplemente ignoran el trabajo. La idea aquí es que si perdemos un servidor de aplicaciones, otro ejecutará el trabajo en su lugar, y si agregamos nuevos servidores de aplicaciones, ellos tomarán su turno para ejecutar trabajos.

que estaba planeando hacer esto por tener una mesa 'anclaje al trabajo' en la base de datos que todos los servidores de aplicaciones leerían antes de comenzar un trabajo y sólo se iniciará si trabajo es 'desbloqueado'. El servidor de aplicaciones que primero realiza la actualización en la tabla esencialmente bloqueará otras al actualizar la tabla a un estado en ejecución/restablecerla al final del trabajo.

Antes construyo esto, se lo agradecería algunas aportaciones de las personas con más experiencia de cuarzo:

a) ¿Puedo conectar este comportamiento en cuarzo de modo que no tiene que ser hecho en un por puesto de trabajo ¿base? Es decir. los desarrolladores pueden agregar nuevos trabajos sin preocuparse por el bloqueo del trabajo, ya que se abstrae.

b) ¿proporcionar cuarzo cualquier construyeron en los mecanismos para lograr algo similar a la anterior, así que no tengo que rodar a mí mismo?

Gracias!

Respuesta

18

¿Crees que esto funcionará para ti? http://quartz-scheduler.org/documentation/quartz-2.x/configuration/ConfigJDBCJobStoreClustering

Extracto del enlace

Clustering Actualmente sólo funciona con el JDBC-JobStore (JobStoreTX o JobStoreCMT), y esencialmente funciona haciendo que cada nodo de la cuota de clúster de la misma base de datos.

balanceo de carga se produce de forma automática, con cada nodo de los puestos de trabajo de disparo cúmulo tan rápidamente como se pueda. Cuando se produce el tiempo de disparo de un disparador, el primer nodo que lo adquiere (al colocarle un candado) es el nodo que lo disparará.

+0

No sé cómo me perdí eso:/Gracias. – Scruffers

+0

Si encuentra que mi respuesta es útil, no olvide marcarla como "respuesta aceptada" – Sap

+0

La agrupación en clúster con Quartz es la de entorno agrupado, –

Cuestiones relacionadas