如何加速单个节点的引导程序

时间:2013-12-27 23:23:00

标签: cassandra

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

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

花了13分钟,几乎无法忍受。我想知道是否有一种方法可以在不重播日志的情况下立即读取数据。在所有9,000个元素都没有之后,必须有更快的启动方式。我用Google搜索提示并搜索了Cassandra的文档,但我没有找到任何内容。显而易见的是,我不是在找正确的事情,是否有人会如此友好地指出正确的文件?感谢。

1 个答案:

答案 0 :(得分:9)

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

nodetool disablethrift
nodetool disablegossip
nodetool drain

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

还有其他因素可能会让创业需要很长时间。 Cassandra在启动时打开磁盘上的所有SSTable。因此,在磁盘上拥有的列系列和SSTable越多,在节点能够开始为客户端提供服务之前所需的时间就越长。在1.2 release to speed this up中完成了一些工作(所以如果你不在1.2上,你应该考虑升级)。减少SSTable的数量可能会缩短您的开始时间。

既然你提到这是一台开发机器,我也会给你我的开发环境观察。在我的开发机器上,我做了很多创建和删除列族和键空间。这可能导致一些系统CF显着增长并最终导致明显的减速。处理此问题的最简单方法是使脚本能够快速引导新数据库并清除/var/lib/cassandra中的所有旧数据。