2012-10-18 13 views
5

Abbiamo un processo chiamato in modo creativo "bootstrap" che imposta i nostri cluster Cassandra per un dato giro di software in un ambiente (Dev1, Dev2, QA, ..., PROD). Questo bootstrap crea/aggiorna gli spazi delle chiavi e le famiglie di colonne e popola i dati iniziali in non-prod.Come posso interrogare un cluster Cassandra per i suoi metadati?

Stiamo usando Astyanax, ma potremmo usare Hector per il bootstrap.

Dato che un altro team ha deciso che ciascun ambiente avrà i propri nomi di datacenter. E visto che voglio che funzioni in prod quando passiamo da due a più datacenter. E Dato che utilizzeremo PropertyFileSnitch:

Come posso chiedere al cluster Cassandra per il suo layout? (Senza shelling a nodetool ring)

In particolare, ho bisogno di conoscere i nomi dei data center in modo da poter creare o aggiornare uno spazio per le chiavi con le impostazioni corrette per le opzioni di strategia quando si utilizza NetworkTopologyStrategy. Vogliamo 3 copie per datacenter. Alcuni env hanno uno e molti ne hanno due, alla fine la produzione ne avrà di più.

C'è una chiamata CQL o Thrift che mi darà informazioni sul layout del cluster?

Ho cercato diversi TOC in vari set di documenti e ho cercato un po 'su Google. Ho pensato di chiedere qui prima di scavare attraverso il codice nodetool.

risposta

4

Non sono sicuro di come Hector o Astyanax espongano questo, ma il metodo Thrift di base describeRing(keyspace) dovrebbe darti quello che stai cercando. Parte delle informazioni che esso contiene sono EndpointDetails le strutture che assomigliano a questo:

endpoint_details=[EndpointDetails(datacenter='datacenter1', host='127.0.0.1', rack='rack1')] 

Insieme al resto dei risultati di tale metodo, si dovrebbe essere in grado di capire i token, DC, rack, e così via, per ogni nodo nel cluster.

Poiché si utilizza un client Java, è possibile utilizzare anche alcuni dei metodi JMX (che utilizza nodetool) per descrivere più parti selezionate del cluster. Ad esempio, è possibile consultare il m3e snitch ("org.apache.cassandra.db:type=EndpointSnitchInfo"), in particolare i metodi getDatacenter(ip) e getRack(ip).

0

Bene, un'altra opzione (risposta indiretta) è che puoi fare ciò che PlayOrm sta facendo e tutti i CF creati ti passano attraverso e tu salverai alcuni dei dati che vuoi in modo tale che tu possa interrogare i tuoi dati sebbene questo significhi l'altro squadra e faresti meglio a passare attraverso lo stesso intermediario in modo che tutte le informazioni siano lì. Beh, probabilmente non vuoi che tu voglia, ma solo un'idea per farti pensare ad altre potenziali soluzioni.