无法启动 Cassandra:端口已在使用中

Posted

技术标签:

【中文标题】无法启动 Cassandra:端口已在使用中【英文标题】:Cannot start Cassandra : Port already in use 【发布时间】:2019-01-15 03:44:12 【问题描述】:

我有两个 Ubuntu 16.04 节点,我在其上安装了 Java 版本为“1.8.0_181”的 Cassandra 3.11.3。我想将这两个节点合并到一个 Cassandra 集群中。他们的实习生ip是172.16.10.20和172.16.10.30。

在每个 /etc/cassandra/cassandra.yaml 文件上,我修改了以下几行:

cluster_name: 'my_cluster'
- seeds: "172.16.10.20,172.16.10.30"
listen_address: XXXX
rpc_address: XXXX

其中XXXX分别是当前节点的intern ip。

然后我在每个节点上重新启动 Cassandra

sudo service cassandra restart

并检查 Cassandra 是否运行:

sudo service cassandra status

 cassandra.service - LSB: distributed storage system for structured data
 Loaded: loaded (/etc/init.d/cassandra; generated)
 Active: active (running) since Wed 2018-08-08 00:31:42 UTC; 3s ago
 Docs: man:systemd-sysv-generator(8)

和集群

nodetool status


Datacenter: dc1
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address       Load       Tokens       Owns (effective)  Host ID                               Rack
UN  172.16.10.20  190.11 KiB  256          100.0%            84dded4c-c74e-45f4-9481-ff837fec229d  rack1
UN  172.16.10.30  265.06 KiB  256          100.0%            4695fef4-70c7-46b2-a0bd-8b752fe5beb6  rack1

一切正常。

我现在想连接到 Cassandra:

cqlsh

然后得到:

Connection error: ('Unable to connect to any servers', '127.0.0.1': error(111, "Tried connecting to [('127.0.0.1', 9042)]. Last error: Connection refused"))

稍后谷歌搜索,我想手动启动 cassandra

cassandra

并得到(在一个巨大的消息中):

ERROR [main] 2018-08-07 23:02:51,365 CassandraDaemon.java:708 - Port already in use: 7199; nested exception is: 
java.net.BindException: Address already in use (Bind failed)

看起来端口 7199 已在使用中。我杀了对应的pid,把/etc/cassandra/cassandra-env.sh中的JMX_PORT改成7200...同样的问题,据说端口在使用中,加上报错

00:33:06,236 |-ERROR in ch.qos.logback.core.rolling.RollingFileAppender[SYSTEMLOG] - openFile(/var/log/cassandra/system.log,true) call failed. java.io.FileNotFoundException: /var/log/cassandra/system.log (Permission denied)

我已更改权限,但错误仍然存​​在。在这个故事的这一点上,我已经没有想法了。我想要实现的目标似乎很简单,所以我想其他人一定遇到过类似的问题。

【问题讨论】:

此链接可能会有所帮助***.com/questions/29121904/… 在运行 cqlsh 时尝试指定 rpc_address 和 native_transport_value 杀死 Cassandra 进程,将您对 JMX_PORT 的更改恢复为 7199。重新启动 Cassandra。然后使用“cqlsh 9042 【参考方案1】:

nodetool 状态输出在这里说明了一切。你的一切都运行得很好。因此,请还原端口使用方面的任何更改。

由于您的 nodetool 状态显示您的节点 IP 是 172.16.10.20 和 172.16.10.30,请尝试运行 cqlsh 并提供其中一个 IP。 cqlsh默认尝试连接127.0.0.1,在多节点集群中是不行的。

cqlsh 172.16.10.20 -u yourusername -p yourpassword

注意:如果您没有启用身份验证,您可以省略 -u 和 -p。但如果这是真的,那么你真的应该改变你的集群来启用身份验证。

【讨论】:

在处理多个节点时了解这一点非常重要。因此,当您想知道集群是否正常运行时,nodetool 是值得信赖的命令。谢谢亚伦。

以上是关于无法启动 Cassandra:端口已在使用中的主要内容,如果未能解决你的问题,请参考以下文章

Grails 项目运行错误 - 服务器无法为端口 8080 启动:地址已在使用中:JVM_Bind

无法启动GlassFish 4.0(Windows) - 端口1527 - 已在使用的地址

无法运行已在使用的 gitlab docker 映像端口

Python 无法通过 Docker 连接到 Cassandra

Node.js 服务器进程已在运行,无法调用端点

配置为侦听端口 80 的 Tomcat 连接器无法启动