启用Cassandra 9142端口客户端到节点SSL后,ECS集群部署服务出现Datastax Driver连接超时异常
针对你遇到的Cassandra SSL端口9142在ECS集群连接超时、本地测试正常的问题,结合错误日志和配置信息,我整理了几个关键排查方向和解决方案,按优先级推进:
1. 先排查ECS安全组与节点防火墙(最可能的根因)
从错误里的ConnectTimeoutException可以看出,这是网络层面的连接超时,而非SSL证书验证失败——毕竟非SSL的9042端口能正常连通,说明Cassandra节点本身是可达的,只是9142端口被拦截了:
- 登录ECS控制台,检查Cassandra节点所属的安全组,确保入站规则允许你的应用服务器IP/网段访问TCP 9142端口;
- 登录Cassandra节点,检查本地防火墙(比如
firewalld或iptables):- 用
firewall-cmd --list-ports查看已开放端口,若没有9142,执行:firewall-cmd --add-port=9142/tcp --permanent firewall-cmd --reload - 若用
iptables,执行iptables -L -n检查规则,确保有允许9142端口的条目,没有的话添加对应规则。
- 用
2. 验证Cassandra是否真的在监听9142端口
有时候配置了但服务没生效,或者监听的地址不对:
- 在Cassandra节点上执行:
确认是否有Cassandra的Java进程在监听该端口,且监听地址是netstat -tulpn | grep 91420.0.0.0(允许所有IP访问),而非仅本地127.0.0.1; - 如果没看到监听记录,重启Cassandra服务,然后查看
/var/log/cassandra/system.log启动日志,排查是否有SSL相关错误(比如密钥库路径错误、密码不对导致SSL服务启动失败)。
3. 检查Cassandra的client_encryption_options配置细节
你的配置里client_encryption_options已启用,但有几个细节要确认:
- 密钥库路径
/etc/cassandra/conf/casskeystore在ECS节点上是否存在,且Cassandra进程用户(通常是cassandra)有读取权限:ls -l /etc/cassandra/conf/casskeystore chown cassandra:cassandra /etc/cassandra/conf/casskeystore # 修正权限 - 注意到你配置里的
keystore_password: changeit的内容看起来像是输入错误,确保密码和本地使用的完全一致,是正确的字符串,没有多余后缀。
4. 直接测试ECS集群内的端口连通性
在应用服务器上直接测试,排除应用代码层面的干扰:
- 用
telnet <cassandra-node-ip> 9142测试基础连通性,如果超时,回到步骤1和2继续排查网络; - 用
openssl s_client -connect <cassandra-node-ip>:9142测试SSL握手是否正常,如果能成功建立连接,说明Cassandra的SSL配置没问题,问题出在应用的Datastax驱动配置上。
5. 检查Datastax驱动的SSL配置
如果前面都没问题,确认应用的驱动配置是否正确:
- 确保驱动指定了正确的SSL端口9142,且启用了SSL。比如Spring Boot环境下的配置示例:
spring.data.cassandra.port=9142 spring.data.cassandra.ssl=true spring.data.cassandra.keystore-path=/path/to/your/casskeystore spring.data.cassandra.keystore-password=changeit - 确认驱动使用的信任库与Cassandra的信任库一致,或者临时配置跳过证书验证(仅用于测试,生产环境不建议)。
内容的提问来源于stack exchange,提问作者umair
相关产品推荐
相关产品推荐

