问题描述
我正在两个公共网络上部署cassandra,当节点启动时,我可以看到所有节点都加入了环网。此外,nodetool describecluster
表示所有节点都是可达的。
一段时间后,我看到节点无法彼此连接,nodetool describecluster
显示了所有列表中的所有节点。
仅供参考,我使用public_ip作为broADCAST_ADDRESS和RPC_ADDRESS。监听地址是private_ip。
解决方法
发生这种情况的一个原因是,有时会将防火墙配置为查找并杀死空闲连接。 Linux内核具有默认的TCP“ keepalive”设置,可用于刷新长期运行的连接。可以使用sysctl
查看这些设置的默认值:
$ sudo sysctl -a | grep keepalive
net.ipv4.tcp_keepalive_intvl = 75
net.ipv4.tcp_keepalive_probes = 9
net.ipv4.tcp_keepalive_time = 7200
为解决此问题,进行了DataStax recommends adjusting these values in production部署:
$ sudo sysctl -w \
net.ipv4.tcp_keepalive_time=60 \
net.ipv4.tcp_keepalive_probes=3 \
net.ipv4.tcp_keepalive_intvl=10
您还可以将每个这些值添加到系统的等效于/etc/sysctl.conf
文件中(减去反斜杠),并通过sysctl
来实现该目标:
sudo sysctl -p /etc/sysctl.conf