Cassandra经常被问到的问题(二)

2017-02-19 22:40

9 我可以通过批量提交加速我的大量写入吗?

不,使用批量提交只会带来延迟尖峰,使用异步的INSERT来代替,或者使用真正的“批量载入”

对同一个分区key的批量更新是一个例外,只要一个批量的大小保持在合理范围内,还是有好处的,但是要记住不要任何时候都盲目使用批量。

10、在Red Hat企业版(RHEL)中,节点无法加入到集群中。

查看SELinux是否开启了,把它关掉。

11、我怎么取消订阅apache cassandra邮件列表

发邮件到user-unsubscribe@cassandra.apache.org

12、为什么使用top命令看到cassandra使用了比java虚拟机限制的对内存还要多的内存?

cassandra内部使用内存映射文件(mmap). 也就是锁,我们使用操作系统的虚拟内存系统把一定数量的磁盘文件映射到了cassandra进程的地址空间里。这将使用虚拟内存,也就是地址空间,这可以使用一些工具例如top命令发现,不过在64位操作系统中,虚拟地址空间是无限大的,所以你不需要担心这些。

那使用的内存的所代表的意义是什么呢?它是使用brc()或者mmap所实际占用的内存,问题的关键是,对于mmap的文件不一定会永久驻留在内存里。所以这些使用的内存不过是缓存而已,就像系统的IO会使用内核的page缓存一样。

一般的IO和mmap的差别就在于mmap引擎的内存是映射到某个进程上的,所以你用top命令可以看到该进程对应的虚拟内存大小。mmap比IO的一个好处是只要内存里有,你里面就能读到了,不会碰到page fault(读系统page缓存,内核可能需要做semi-context切换?),更多细节参考http://www.varnish-cache.org/trac/wiki/ArchitectNotes

13、种子节点是什么?

种子节点用于节点启动的时候发现整个集群。

如果你配置了你的节点指向几个节点作为种子,那么你集群中的节点会发送相比非种子节点较多的gossip信息到种子节点。换句话说:种子节点相当于gossip网络的集线器,每个节点通过种子节点可以很快知道其他节点的状态。

在一个节点新加入集群的时候,需要指定种子节点用于发现集群中其它节点,当你增加一个新节点到集群中的时候,你需要至少指定一个活着的种子节点可以连接,一旦一个节点加入这个集群,它学习到了其它节点,他在下次启动的时候就不需要种子节点了。

你可以任何时候设置任何一个节点为种子, 对于种子节点没有什么特殊的,只要你把它写入种子列表里,他就是一个种子节点。

种子是无法自启动的(bootstrap)(因为如果一个节点把自己加入了种子列表,那就是说他需要自己传输数据给自己),如果你需要这样,你可以先把这个节点当非种子节点启动,等启动以后再把它加入种子列表里。当然如果你是初始化一个新集群,没有任何数据,那你就不需要担心这个事情了。

提醒以下两点:

为每个Data center都选择大于两个节点作为种子节点

保持你所有节点种子列表是一样的。