内容简介:Cassandra经常被问到的问题(三)
14、是不是单个seed意味着单点故障?
即便没有seed节点,集群也可以运行和重启,但是不能再往集群里增加节点。还是推荐在生产系统中配置多个种子节点。
15、为什么不可以在jconsole里调用某个jmx方法呢?
一些JMX操作的参数是个数组,而Jconsole并不支持数组型参数。对于那些不能用jconsole调用的操作(在jconsole里点击按钮无效)。有需要自己写一个JMX客户端去调用,或者使用一个支持数组的jmx监控工具。
16、为什么我会在日志文件里看到 “… messages dropped …”这样的信息?
这是cassandra在面对超出自己处理能力的请求时,为了保护自己做出的流控措施。
一个节点接收到其它节点发送过来的消息,但是在他们合适的超时时间内不能得到处理(具体参考 read_request_timeout, write_request_timeout等配置项)。就会被丢弃,而不是处理(因为接受用户请求的节点也就是协调节点不会再等这个响应返回)
对于写,这意味着它的请求不会被写入所有的副本,这个一致性将会被读修复、hints或者是人工修复等方式修复。因为这,一个写操作返回给客户端的结果就是超时的。
对于读,意味着一个读请求可能没有完成。负载流控是cassandra架构的一部分,如果这个问题一直持续下去,这标志着你的节点或者集群已经超载了。
17、Cassandra因为java.lang.OutOfMemoryError: Map failed挂掉了
如果cassandra挂掉的时候输出“Map failed”的消息,表示操作系统不允许 java 锁定更多的内存。在 linux 里,内存锁定是有限制的,你可以通过/proc/
18、如果再同一时刻发生两次更新会发生什么?
更新顺序必须是可交换的,因为他们很有可能到达不同副本的顺序是不一样的。只要cassandra有一个确定的方法选出这个赢家(相同的时间戳),那么这在其它节点也是一样的,这是一个重要的实现细节。也就是说,对于相同时间戳的操作,Cassandra遵循以下两个原则:第一:删除要优先于更新和插入,第二:如果两个都是更新,那个在语法上比较大的更新会被选中。
19、为什么在加入一个新节点的时候,会有Stream failed错误?
两个可能性:
GC可能导致的长时间暂停可能会扰乱传输进程
在后台执行的压缩会导致传输时间太长从而TCP连接断开。
对于第一种情况,建议在应用中经常的进行GC优化,
第二种情况,你需要设置系统的TCP keepalive参数短一些(linux中默认是很长的),尝试执行下面的语句:
sudo /sbin/sysctl -w net.ipv4.tcp_keepalive_time=60 net.ipv4.tcp_keepalive_intvl=60 net.ipv4.tcp_keepalive_probes=5
如果要让这些配置永久有效,需要把他们加入到/etc/sysctl.conf文件中。
注意:GCE(Google的云服务吧)的防火墙经常切断TCP连接,当一个连接超过10分钟不活动的话。这种情况强烈推荐执行上述命令。
以上所述就是小编给大家介绍的《Cassandra经常被问到的问题(三)》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- acme.sh 续期问题(路径问题)
- 缓存的一些问题和一些加密算法【缓存问题】
- 如何把设计问题转化为数学问题(方法论)
- 推荐系统中的冷启动问题和探索利用问题
- GraphQL 教程(六)—— N+1问题和缓存等问题
- Golang 并发问题(四)之单核上的并发问题
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。