我正在使用嵌入式Cassandra。当我关闭并重新启动我的Cassandra服务数据时会丢失。我认为正常的数据没有正确刷入磁盘。所以我尝试使用nodetool手动刷新数据并检查数据是否可用。但是nodetool似乎不适用于嵌入式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的情况下手动将数据刷新到Cassandra?
编辑1:
经过几个小时的尝试,我现在能够运行nodetool(而不是将jmx配置添加到我添加到Eclipse调试配置的代码中,并且它有效)。我现在运行drain命令将数据正确刷新到磁盘。所以现在我的问题是:为什么数据没有正确刷新?每次重新启动Cassandra服务时,最近的更改都会消失。
答案 0 :(得分:1)
你是如何停止和启动Cassandra服务器的?在Cassandra守护程序上调用stopServer应该刷新对提交日志的任何未完成的写入。即使在方法返回后,线程仍将继续进行一些处理,因此如果你在stopServer()之后杀死了JVM,那么你可能会阻止写入数据。
答案 1 :(得分:1)
在cassandra版本1.1.0到1.1.4中未正确刷新提交日志这是一个未解决的问题。请参考以下jira票。
答案 2 :(得分:0)
很可能是因为您的提交日志设置。如果您使用的是定期模式,请尝试缩小同步窗口或使用批次。批处理会使写入速度稍慢。
https://github.com/apache/cassandra/blob/trunk/conf/cassandra.yaml#L231
答案 3 :(得分:0)
可能是发出了冲洗但是失败了。刷新应记录在日志中。确认您没有冲洗。如果你正在冲洗并且它失败了,那么应该说明为什么冲洗失败了。