2013-12-11 18 views
17

Sto utilizzando Cassandra incorporato. Quando si spegne e si riavvia il servizio Cassandra, i dati vengono persi. Penso che i dati decenti non siano correttamente scaricati nel disco. Così ho provato a usare nodetool per scaricare manualmente i dati e verificare se i dati sono disponibili. Ma nodetool non sembra funzionare correttamente per il servizio di Cassandra incorporato. Ottengo il seguente errore:Scarico a livello di codice su cassandra ogni volta prima che cassandra si spenga

c:\vijay\cassandra\bin>nodetool -host 192.168.2.86 -p 7199 drain

Starting NodeTool

Failed to connect to '192.168.2.86:7199': Connection refused: connect

Ho provato a impostare le proprietà jmx ancora sto ricevendo errore. Ho aggiunto seguenti righe al mio codice:

System.setProperty("com.sun.management.jmxremote", "true"); 
System.setProperty("com.sun.management.jmxremote.port", "7197"); 
System.setProperty("com.sun.management.jmxremote.authenticate", "false"); 
System.setProperty("com.sun.management.jmxremote.ssl", "false"); 
System.setProperty("java.rmi.server.hostname", "my ip"); 

Quindi, c'è un modo per manualmente i dati a filo a Cassandra senza utilizzare nodetool?

Edit 1:
Dopo ore di tentativi sono ora in grado di eseguire nodetool (invece di aggiungere configurazioni JMX per il codice ho aggiunto a Eclipse configurazioni di debug e ha funzionato). Ho eseguito il comando di scarico ora i dati vengono correttamente scaricati sul disco. Quindi ora la mia domanda è: perché i dati non sono stati svuotati correttamente? Ogni volta che riavvio il servizio Cassandra, le modifiche recenti non sono più disponibili.

+2

I dati non devono essere lavati fino a quando il memtable ha raggiunto una certa dimensione. Prima di quel momento la persistenza è garantita dal commit-log che * è * svuotato al momento dell'accettazione della scrittura. – RussS

+0

Ecco dove si trova il problema .. Nel mio caso, suppongo che i registri di commit non siano correttamente scaricati .. quando scarico i dati usando nodetool prima di chiudere il servizio, funziona, i dati sono disponibili dopo il riavvio del server. Quindi è lì un modo per scaricare i dati in modo programmatico ogni volta che il server si arresta ?? – Vijay

+3

Penso che dovresti provare a capire perché il log di commit non sta scaricando. Dovrebbe essere costantemente in fase di scrittura e flushing a meno che tu non abbia disabilitato fsync o fsync non si comportino correttamente sul tuo sistema. Una volta risolto, non perderai i dati al riavvio e non dovrai svuotare manualmente. – RussS

risposta

1

Commitlog non vengono lavati correttamente nelle versioni da 1.1.0 a 1.1.4 di cassandra Questo è un problema aperto. Si prega di fare riferimento al seguente biglietto jira.

Commitlog not replayed after restart

1

Come arrestare e avviare il server Cassandra? La chiamata a stopServer sul daemon Cassandra deve eseguire il flushing di tutte le scritture in sospeso nel log di commit. Il thread continuerà a fare qualche elaborazione anche dopo il ritorno del metodo, quindi se stai uccidendo la JVM dopo stopServer(), potresti impedire la scrittura dei dati.

+0

Ya ho provato un arresto corretto, anche se il problema persiste .. a quanto pare è dovuto a questo ticket aperto https: // issues. apache.org/jira/browse/CASSANDRA-4782 .. Ho aggiornato la mia cassandra alla versione superiore, che ha risolto il problema per me .. Nessun altro andare ..! – Vijay

+2

Dovresti postarlo come risposta e accettarlo. – b4hand

0

Molto probabilmente a causa delle impostazioni del tuo commitlog. Se si utilizza la modalità periodica, provare a ridurre la finestra di sincronizzazione o il batch di utilizzo. Lotto renderà le scritture leggermente più lente.

https://github.com/apache/cassandra/blob/trunk/conf/cassandra.yaml#L231

+2

Ho provato tutte le possibili modifiche in cassandra.yaml relative a questo problema .. non va bene :( – Vijay

0

può essere che un colore viene rilasciato ma sta venendo a mancare. Il lavaggio deve essere registrato nei registri. Verifica che non stai lavando. Se si sta svuotando e non funziona, dovrebbero esserci alcune indicazioni sul motivo per cui lo svuotamento non è riuscito.