无法从远程EC2实例连接Cassandra服务器的问题咨询
跨EC2实例连接Cassandra失败的排查与解决
我之前帮朋友排查过几乎一模一样的问题,咱们一步步来搞定它:
核心问题根源
Cassandra默认配置只监听本地回环地址(127.0.0.1),而且EC2的安全组默认会阻断外部端口访问,这两个点是最常见的坑。
具体解决步骤
1. 修正Cassandra的监听配置
登录运行Cassandra的第一台EC2实例,找到Cassandra的配置文件cassandra.yaml(通常在/etc/cassandra/路径下,源码安装的话可能在你解压的目录里),修改以下几个关键参数:
listen_address: 把默认的127.0.0.1改成这台EC2的私有IP(同一子网内用私有IP通信更稳定,也更安全),或者测试阶段可以临时设为0.0.0.0(允许所有地址监听,生产环境不建议这么做)rpc_address: 同样改成私有IP或者0.0.0.0,这个参数负责处理客户端的连接请求- 如果一定要用公网IP连接,额外设置
broadcast_rpc_address: 你的第一台EC2公网IP,不然客户端可能无法获取正确的连接地址
修改完后重启Cassandra服务:
sudo systemctl restart cassandra # 如果是旧版Amazon Linux,用下面的命令 sudo service cassandra restart
2. 配置EC2安全组放行端口
第一台EC2的安全组必须允许第二台EC2访问Cassandra的CQL端口(默认9042):
- 登录AWS控制台,找到第一台EC2的安全组,添加入站规则
- 规则类型选
TCP,端口范围填9042,来源选第二台EC2的私有IP(或者同一子网的CIDR段,比如10.0.0.0/16,这样子网内所有实例都能访问) - 如果坚持用公网IP连接,来源也可以设为第二台EC2的公网IP,但同一子网内优先用私有IP更高效
3. 验证连接并修改Python代码
在第二台EC2上,先试试用Cassandra自带的cqlsh工具测试连接:
cqlsh 第一台EC2的私有IP
如果cqlsh能成功连接,再把Python代码里的IP替换成这个私有IP执行,应该就能正常连接了。
额外验证:在第一台EC2上执行netstat -tulpn | grep 9042,确认Cassandra的9042端口是绑定在私有IP或者0.0.0.0上,而不是只有127.0.0.1。
内容的提问来源于stack exchange,提问作者Martin
相关产品推荐
相关产品推荐

