2013-12-11 20 views
17

我正在使用嵌入式Cassandra。當我關閉並重新啓動Cassandra時,服務數據丟失。我認爲體面的數據沒有適當地刷入磁盤。所以我嘗試使用nodetool手動刷新數據並檢查數據是否可用。但是,對於嵌入式Cassandra服務,nodetool似乎不能正常工作。我收到以下錯誤:在Cassandra關閉之前,每次都以程序方式將數據刷新到cassandra

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

我嘗試設置jmx屬性,但仍出現錯誤。我加了以下幾行我的代碼:

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"); 

那麼,有沒有什麼辦法可以手動刷新數據卡桑德拉不使用nodetool?

編輯1:
經過努力我小時我現在能夠nodetool運行(而不是增加JMX配置,代碼加我到Eclipse調試配置和它的工作)。我運行了排水命令,現在數據正確刷新到磁盤。所以現在我的問題是:爲什麼數據沒有適當刷新?每當我重新啓動Cassandra服務時,最近的更改都消失了。

+2

直到memtable達到一定大小後才能刷新數據。在那段時間之前,持久性是通過寫入確認時刷新的提交日誌來保證的。 – RussS

+0

這就是問題所在。就我而言,我猜提交日誌沒有正確刷新..當我關閉服務之前使用nodetool刷新數據時,它工作正常,服務器重新啓動後數據可用。每當服務器出現故障時,以任何方式編程刷新數據? – Vijay

+3

我認爲你應該嘗試弄清楚爲什麼提交日誌不會沖洗。除非禁用fsync或fsync在您的系統上無法正常運行,否則應該不斷寫入和刷新。一旦解決了這個問題,您不會在重新啓動時丟失數據,也不必手動刷新。 – RussS

回答

1

你是如何停止並啓動Cassandra服務器的?在Cassandra守護程序上調用stopServer應該清除任何未完成的寫入提交日誌。即使在方法返回後,該線程仍將繼續執行一些處理,因此如果在stopServer()之後殺死JVM,則可能會阻止寫入數據。

+0

Ya我嘗試了正確的關閉,即使此時問題仍然存在..顯然這是由於此打開的票證https://問題。 apache.org/jira/browse/CASSANDRA-4782 ..我將我的cassandra升級到更高版本,這爲我解決了問題..沒有其他的去..! – Vijay

+2

您應該將其作爲回答發佈並接受它。 – b4hand

0

這可能是沖洗發出,但失敗了。沖洗應記錄在日誌中。確認你沒有沖洗。如果你正在沖洗並且失敗,應該有一些跡象表明沖洗失敗的原因。

相關問題