无法登录Google Cloud平台上DataStax Cassandra集群的cqlsh
Hey Andy,刚看到你在GCP搭的2节点Cassandra集群没法登录cqlsh的问题,我整理了几个常见的排查方向,你可以一步步试下:
排查GCP上Cassandra集群cqlsh登录失败的步骤
1. 先确认Cassandra服务是否正常运行
- 登录到GCP的Cassandra节点上,先查服务状态:
sudo systemctl status cassandra(如果是用systemd管理的话),或者直接用Cassandra自带工具nodetool status(这个能直接看集群节点状态,前提是本地能连到服务) - 如果服务没启动,赶紧看日志找原因:
tail -n 50 /var/log/cassandra/system.log,重点盯启动失败的报错,比如端口被占、配置文件写错、磁盘空间不够这些常见坑
2. 检查网络与防火墙(GCP里最容易踩的坑)
Cassandra的连接依赖几个关键端口,GCP的防火墙规则一定要配对:
- 确认9042端口(cqlsh连接用的原生传输端口)已经在GCP防火墙里开放,允许你用来连接的IP(比如本地办公IP)以及集群内部节点IP访问
- 同时确认7000端口(节点间通信用的)也开放了,不然两个节点没法组成集群,也会导致连接异常
- 打开Cassandra的配置文件
cassandra.yaml,检查几个关键参数:listen_address:设为节点的GCP私有IP,测试环境可以临时设为0.0.0.0(生产不建议)rpc_address:这个是cqlsh连接的入口,要设为能被外部访问的地址(比如节点的公网IP,或者0.0.0.0)native_transport_port:默认是9042,确认没被修改
- 先试试在节点本地用cqlsh连接:
cqlsh localhost 9042,如果本地能连上,那基本就是外部网络/防火墙的问题;如果本地也连不上,那就是Cassandra服务本身的配置出问题了
3. 认证权限配置检查
如果你手动开启了Cassandra的认证功能:
- 打开
cassandra.yaml,看authenticator参数是不是PasswordAuthenticator(默认是AllowAllAuthenticator,关闭认证) - 如果开了认证,登录的时候要指定用户名密码:
cqlsh <节点IP> 9042 -u cassandra -p cassandra(默认的初始账号密码都是cassandra,如果你改了就用新的) - 如果没开认证,直接用
cqlsh <节点IP> 9042就行,不用加账号密码
4. 确认集群节点是否正常组成集群
2节点集群要确保两个节点都正常加入集群:
- 在其中一个节点执行
nodetool status,看输出里两个节点的状态是不是UN(Up/Normal) - 如果有节点显示
DN(Down),那说明节点间通信有问题,再回去检查7000端口的防火墙,还有cassandra.yaml里的seed_provider配置是不是包含了另一个节点的IP
5. 版本兼容问题
有时候本地的cqlsh版本和服务器端的Cassandra版本差太多,也会导致连接失败,尽量用和服务器同版本的cqlsh工具来连接
内容的提问来源于stack exchange,提问作者Andy
相关产品推荐
相关产品推荐

