2013-12-11 87 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

这可能是冲洗发出,但失败了。冲洗应记录在日志中。确认你没有冲洗。如果你正在冲洗并且失败,应该有一些迹象表明冲洗失败的原因。

相关问题