Cassandra 如何加速单节点的引导

Cassandra 如何加速单节点的引导,cassandra,Cassandra,我在我的开发机器上安装了单节点Cassandra(对Cassandra的经验很少)。我在节点中始终只有很少的数据,并且没有遇到任何问题。今天,我在一个表中插入了大约9000个元素,以实验真实世界的用例。当我启动节点时,启动时间非常长。我在system.log中得到这个 Replaying /var/lib/cassandra/commitlog/CommitLog-3-1388134836280.log ... Log replay complete, 9274 replayed mutatio

我在我的开发机器上安装了单节点Cassandra(对Cassandra的经验很少)。我在节点中始终只有很少的数据,并且没有遇到任何问题。今天,我在一个表中插入了大约9000个元素,以实验真实世界的用例。当我启动节点时,启动时间非常长。我在system.log中得到这个

Replaying /var/lib/cassandra/commitlog/CommitLog-3-1388134836280.log
...
Log replay complete, 9274 replayed mutations

这花了13分钟,几乎无法忍受。我想知道是否有一种存储数据的方法,可以在不重放日志的情况下一次读取数据。毕竟9000个元素什么都不是,必须有一种更快的启动方式。我在谷歌上搜索线索,搜索卡桑德拉的文档,但什么也没找到。很明显,我找的不是正确的东西,有人能帮我找到正确的文件吗?谢谢。

有些事情可能会有所帮助。您可以做的最明显的事情是在关闭Cassandra之前刷新提交日志。这在生产中也是一个好主意。在停止生产中的Cassandra节点之前,我将运行以下命令:

nodetool disablethrift
nodetool disablegossip
nodetool drain
前两个命令优雅地关闭与连接到此节点的客户端的连接,然后关闭与环中其他节点的连接。drain命令将memtables刷新到磁盘(sstables)。这将最小化启动时需要重播的内容

还有其他一些因素会导致启动需要很长时间。Cassandra在启动时打开磁盘上的所有SSTABLE。因此,磁盘上的列族和SSTABLE越多,节点开始为客户端提供服务所需的时间就越长。有一些工作做了(所以如果你不是1.2,但你应该考虑升级)。减少SSTABLE的数量可能会缩短开始时间


既然您提到了这是一台开发机器,我还将向您介绍我的开发环境观察结果。在我的开发机器上,我做了很多创建和删除列族和键空间的工作。这可能导致一些系统CFs显著增长,并最终导致明显减速。处理这个问题最简单的方法是使用一个脚本,它可以快速引导一个新数据库,并清除
/var/lib/cassandra
中的所有旧数据

这三个命令解决了我的问题。它在启动时重放了0个突变,并快速启动。我过去使用过它们,但最近我改用了sudo服务cassandra start | stop。似乎它没有以正确的方式关闭卡桑德拉。顺便说一下,我现在是2.0.3。还有一个问题。终止这个过程的唯一方法似乎是终止它。是否有一个nodetool命令可以更优雅地执行此操作?没有nodetool命令可以实际阻止Cassandra。在运行上述命令停止进程后,我运行
service cassandra stop