我 Build 了一个由两个DC组成的Cassandra集群,一个在美国东部,一个在美国西部 . 没有VPN /网关 . 每次重新启动整个集群时,nodetool describecluster都会报告所有正常情况,并且具有一致级别ALL的长读取工作正常 .
但是,几分钟后,每个节点上的“describeculster”显示一个UNREACHABLE:[xxx.xxx,...],无法访问的集合逐渐增加,直到两个DC无法相互访问 . 并且读取请求在ReadTimeoutException上失败 .
但是每个节点上的任何“nodetool status”运行都会报告所有节点Up和normal . 并且ssh到节点并ping其他DC工作正常 .
增加read_request_timeout_in_ms,调整GC并不能解决问题 .
任何想法为什么会这样?
casandra.yaml:listen_address:{} rpc_address:0.0.0.0 broadcast_rpc_address:{} broadcast_address:{}
1 回答
经过几轮搜索和调整 . 我现在主要可以缓解这个问题 .
GC调整 .
将read_request_timetout_in_ms增加到更高级别,但这只能最好地隐藏问题 .
这个应该是关键的一个 . 当流量较低时,您的基础架构提供商的防火墙设置可能会休眠空闲连接 . 所以保持tcp更长时间 . 每个DataStax,
sudo sysctl -w net.ipv4.tcp_keepalive_time = 60 net.ipv4.tcp_keepalive_probes = 3 net.ipv4.tcp_keepalive_intvl = 10
我的系统默认设置为75,9和300. http://docs.datastax.com/en/archived/cassandra/2.0/cassandra/troubleshooting/trblshootIdleFirewall.html
其他调整,如DC之间的安装网关和vnet2vnet vpn连接没有帮助 .