2012-04-20 18 views
12

Para la supervisión de las operaciones de mi solicitud, yo estoy buscando algo similar a la "validación de conexión de SQL" que se utiliza comúnmente consultaChequeo de salud para la conexión de Cassandra (usando hector)?

seleccione 1;

en Cassandra, con el controlador Hector. He intentado cosas como mirar Cluster.getKnownPoolHosts() y .getConnectionManager(). GetActivePools(). Pero parece que su estado no se actualiza continuamente, solo cuando intento acceder a Cassandra con una consulta.

Me gustaría que mi chequeo de salud sea independiente de cualquier espacio de claves o CF de usuario que necesiten existir, por lo que simplemente ejecutar una consulta "ficticia" parece difícil (¿contra qué?). Y, por supuesto, no debería llevar mucha memoria o generar una carga significativa.

¿Puedo forzar a Hector a actualizar el estado de su grupo de conexiones sin ejecutar una consulta real?

(Por cierto: CQL ni siquiera aceptar "SELECT 1" como una consulta válida.)

+0

¿Encontró una respuesta a esto? Intento hacer lo mismo –

+0

Sí, encontré un enfoque que parece funcionar bien para mí. Ver la respuesta a continuación. – HansMari

Respuesta

4

La solución actualmente estoy usando, y que parece ser el más robusto hasta el momento (probado con Cassandra 1.1 y 1.2) es una simple consulta en "sistema":

Query<String> query = Query.selectQuery("*", "system", null, 1, consistencyLevel, StringSerializer.get());

no es exactamente lo que quería, ya que es una consulta "real", pero por otro lado no da ningún falso positivo.

+0

Podría estar equivocado, pero creo que este enfoque siempre llamará al (los) mismo (s) nodo (s). Dependiendo de la consistenciaLevel llamarás siempre 1, Q o todos los nodos de tu RF. Si quiere monitorear si la conexión está activa, puede hacerlo, si desea monitorear el estado del timbre, usaría nodetool dentro de su aplicación java –

+1

Esto está pensado como una verificación de conexión, no como una verificación de operaciones del clúster Cassandra. – HansMari

+0

@HansMari, ¿Cómo se hace este control? ¿Verifica algunas propiedades de consulta? – CAMOBAP

13

Con CQL3, estoy usando la siguiente consulta:

SELECT now() FROM system.local; 

que sería bueno para deshacerse de la cláusula FROM altogther para hacer de este genérico, en caso de que el usuario no tiene acceso a la system keyspace o familia de columnas local por algún motivo. Pero al igual que con las otras respuestas, al menos esto no debería dar falsos positivos.

+0

¿Cómo realmente hace este control? ¿Capturas alguna excepción o examinas el objeto QuerryResult? – CAMOBAP

+0

Sí, solo verificando que este no arroje una excepción. También se podría verificar que la consulta realmente devuelve algo, pero me pareció innecesario. –

Cuestiones relacionadas