【问题标题】:Error when running cassandra on Google Cloud on external ip - Failed to bind port 9042 on 34.89.109.98在外部 IP 上在 Google Cloud 上运行 cassandra 时出错 - 无法在 34.89.109.98 上绑定端口 9042
【发布时间】:2020-04-11 01:56:57
【问题描述】:

我正在尝试使用 VM 的外部 IP 在 Google Cloud 上运行 Cassandra。但我收到错误Failed to bind port 9042 on 34.89.109.98。据我所知,我已遵循设置防火墙规则的规则,但我仍然无法解决问题。我附上了我的配置图片供您参考。

1) 防火墙规则是

2) 所有规则的列表是

3) 虚拟机是

更多信息 我按照https://linuxize.com/post/how-to-install-apache-cassandra-on-debian-9/ 中的步骤安装了 Cassandra。这会自动启动 cassandra。然后我杀死了cassandra,将cassandra.yaml文件中的IP地址更改为外部IP并再次启动它。它没有用。然后我开始使用 VPN 设置。

我发出启动 cassandra /usr/sbin/cassandra -f 的命令后的部分消息转储

INFO  [main] 2019-12-18 16:09:40,755 StorageService.java:1521 - JOINING: Finish joining ring
INFO  [main] 2019-12-18 16:09:40,826 StorageService.java:2442 - Node localhost/127.0.0.1 state jump to NORMAL
INFO  [main] 2019-12-18 16:09:41,027 NativeTransportService.java:68 - Netty using native Epoll event loop
INFO  [main] 2019-12-18 16:09:41,071 Server.java:158 - Using Netty Version: [netty-buffer=netty-buffer-4.0.44.Final
.452812a, netty-codec=netty-codec-4.0.44.Final.452812a, netty-codec-haproxy=netty-codec-haproxy-4.0.44.Final.452812
a, netty-codec-http=netty-codec-http-4.0.44.Final.452812a, netty-codec-socks=netty-codec-socks-4.0.44.Final.452812a
, netty-common=netty-common-4.0.44.Final.452812a, netty-handler=netty-handler-4.0.44.Final.452812a, netty-tcnative=
netty-tcnative-1.1.33.Fork26.142ecbb, netty-transport=netty-transport-4.0.44.Final.452812a, netty-transport-native-
epoll=netty-transport-native-epoll-4.0.44.Final.452812a, netty-transport-rxtx=netty-transport-rxtx-4.0.44.Final.452
812a, netty-transport-sctp=netty-transport-sctp-4.0.44.Final.452812a, netty-transport-udt=netty-transport-udt-4.0.4
4.Final.452812a]
INFO  [main] 2019-12-18 16:09:41,071 Server.java:159 - Starting listening for CQL clients on /35.197.238.136:9042 (
unencrypted)...
Exception (java.lang.IllegalStateException) encountered during startup: Failed to bind port 9042 on 35.197.238.136.
java.lang.IllegalStateException: Failed to bind port 9042 on 35.197.238.136.
        at org.apache.cassandra.transport.Server.start(Server.java:163)
        at java.util.Collections$SingletonSet.forEach(Collections.java:4769)
        at org.apache.cassandra.service.NativeTransportService.start(NativeTransportService.java:124)
        at org.apache.cassandra.service.CassandraDaemon.startNativeTransport(CassandraDaemon.java:696)
        at org.apache.cassandra.service.CassandraDaemon.start(CassandraDaemon.java:546)
        at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:635)
        at org.apache.cassandra.service.CassandraDaemon.main(CassandraDaemon.java:742)
ERROR [main] 2019-12-18 16:09:41,100 CassandraDaemon.java:759 - Exception encountered during startup
java.lang.IllegalStateException: Failed to bind port 9042 on 35.197.238.136.
        at org.apache.cassandra.transport.Server.start(Server.java:163) ~[apache-cassandra-3.11.5.jar:3.11.5]
        at java.util.Collections$SingletonSet.forEach(Collections.java:4769) ~[na:1.8.0_232]
        at org.apache.cassandra.service.NativeTransportService.start(NativeTransportService.java:124) ~[apache-cass
andra-3.11.5.jar:3.11.5]
        at org.apache.cassandra.service.CassandraDaemon.startNativeTransport(CassandraDaemon.java:696) [apache-cass
andra-3.11.5.jar:3.11.5]
        at org.apache.cassandra.service.CassandraDaemon.start(CassandraDaemon.java:546) [apache-cassandra-3.11.5.ja
r:3.11.5]
        at org.apache.cassandra.service.CassandraDaemon.activate(CassandraDaemon.java:635) [apache-cassandra-3.11.5
.jar:3.11.5]

【问题讨论】:

  • 我听说错误消息是“无法在 34.89.109.98 上绑定端口 9042”。你能详细说明一下吗?消息在哪里发出?是否发布了任何堆栈驱动程序日志记录?你有没有遵循安装 Cassandra 的方法?
  • 我有一种直觉......这是疯狂的猜测......您可能已将软件安装配置为使用 34.xxx IP 地址,因为您的逻辑说“那是我的公共 IP,我只希望我的数据库响应该 IP”。如果是,那么这很可能是错误。您的 Compute Engine 没有与该公共 IP 的接口……只有它的 VPC 接口。
  • 更新了问题。 IP 是我的计算机的公共 IP/接口。我在安装 cassandra 时没有指定它。 cassandra.yaml 中的 IP 是 35.197.238.136,它现在是我计算机的新 IP。我得到了新的 IP,因为我重新启动了机器。新错误是java.lang.IllegalStateException: Failed to bind port 9042 on 35.197.238.136,我认为这表明34... ip 没有在任何地方硬编码

标签: google-cloud-platform cassandra-3.0


【解决方案1】:

在 Cassandra cassandra.yaml 文件中,您可以将 Cassandra 服务器绑定到它正在侦听的 IP 地址。默认为 127.0.0.1 (localhost),不适合外部连接。

您可以使用的地址值是 Compute Engine 与其关联的地址。这些可以通过以下方式发现:

ip addr

重要的是要意识到 Compute Engine 在 GCP Console 中显示时可能看似具有公共 IP 地址,但这不是网络接口计算引擎。在原始问题的示例中,Compute Engine IP 地址为10.154.0.4。这是您要在配置文件中设置的地址。

另请参阅描述在 GCP 上设置 Cassandra 的文档:

【讨论】:

  • 谢谢。确实很有帮助。如果我使用10.xxx 地址,一切正常。我想从我的笔记本电脑连接到cassandra 计算机(比如在我的笔记本电脑上运行 cqlsh)。如果我使用10.xxx 地址,我就不能这样做,因为它甚至无法从我的笔记本电脑上ping。
  • 您的回答非常有帮助,但老实说,我对这两个 IP 地址感到困惑,无法弄清楚如何从外部连接到 cassandra。这应该很容易,因为我想最终从可能托管在其他地方的 Web 服务器连接到 cassandra。
  • 我想我明白了,但如果没有,请告诉我。我必须使用 10.xxx 地址将 cassadra 绑定到 NIC 的 ip,因为那是实际地址。但要从外部连接,我必须使用35.xxx 地址。这似乎是避免将10.xxx 地址暴露给外界的方法。但是,我必须先启用防火墙,然后外部工作才能使用35.xxx 地址进行连接。
  • 考虑它的方式是您的计算引擎(您的虚拟机)具有网络接口。这些连接到 VPC 网络。这些地址仅对 VPC 私有。应用程序(例如 Cassandra)可以绑定到的正是这些网络接口。公共 IP 地址是从您的虚拟机创建 DISTINCT 并与路由/路径相关联,这样当 Internet 请求到达公共 IP 地址时,它会通过 VPC 路由以终止于您的私有 IP 地址。
猜你喜欢
  • 2020-03-19
  • 2015-08-25
  • 2022-10-23
  • 2022-01-05
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2014-01-30
相关资源
最近更新 更多