Ubuntu16.04安装Cassandra后cqlsh连接失败求助
解决Ubuntu 16.04中Cassandra后台启动无法连接cqlsh的问题
这问题我之前帮朋友排查过,核心原因就是前台用sudo启动Cassandra是root权限,而后台服务默认用cassandra用户运行,权限或者配置不匹配导致的,咱们一步步来解决:
1. 先确认Cassandra后台服务的状态
首先得搞清楚后台服务是不是真的正常启动了:
- 运行命令查看服务状态:
如果显示sudo systemctl status cassandraactive (running)那还好,要是failed或者inactive,就看系统日志找错误:journalctl -u cassandra.service - 最常见的问题就是权限:Cassandra的数据目录(
/var/lib/cassandra)和日志目录(/var/log/cassandra)的属主必须是cassandra:cassandra,你可以检查一下:
如果属主是root,就修改权限:ls -ld /var/lib/cassandra /var/log/cassandrasudo chown -R cassandra:cassandra /var/lib/cassandra /var/log/cassandra
2. 检查Cassandra的监听配置
打开Cassandra的主配置文件,确认几个关键参数:
sudo nano /etc/cassandra/cassandra.yaml
重点看这三个参数:
listen_address:默认是localhost,如果被改成了其他IP,cqlsh默认连127.0.0.1就会被拒绝,改回localhost即可;rpc_address:这是CQL客户端(比如cqlsh)连接的地址,默认也是localhost,如果设成了0.0.0.0或者其他IP,你需要用cqlsh <对应IP>来连接;start_rpc:必须设为true,不然Cassandra不会启动CQL服务,默认是true,但万一被误改了呢?
3. 检查9042端口是否被占用
Cassandra的CQL默认端口是9042,要是被其他程序占用了,后台启动时就无法绑定这个端口,导致连接拒绝:
sudo netstat -tulpn | grep 9042
或者用lsof:
sudo lsof -i :9042
如果有其他进程占用,要么停掉那个进程,要么修改Cassandra的端口(在cassandra.yaml里改native_transport_port参数)。
4. 重启服务并验证
改完配置或权限后,重启Cassandra服务:
sudo systemctl restart cassandra
注意Cassandra启动需要一点时间,等个30秒左右,再尝试连接:
cqlsh
或者指定IP和端口:
cqlsh 127.0.0.1 9042
一般来说,做完这些步骤就能解决后台启动无法连接的问题了,毕竟前台能正常启动说明Cassandra本身是没问题的,就是后台运行的环境(权限、配置)有差异。
内容的提问来源于stack exchange,提问作者Disha
相关产品推荐
相关产品推荐

