首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法连接公网IP上的Cassandra客户端

无法连接公网IP上的Cassandra客户端
EN

Stack Overflow用户
提问于 2018-12-01 21:23:59
回答 2查看 898关注 0票数 1

你好,我正在尝试在Azure linux am上设置一个三节点的Cassandra集群,并使用C# datastax客户端从外部机器连接到它。但是,我在通过am公共IP从网络外部连接时遇到问题。任何帮助都将不胜感激,因为我现在已经迷失了。

下面是机器正在运行的Java版本。

代码语言:javascript
复制
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-0ubuntu0.18.04.1-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

我的cassandra版本是

代码语言:javascript
复制
3.11.3

当我运行nodetool status时,我可以看到集群上的机器,但是它显示的是Azure VNetwork上的本地ip地址,而不是它们的公共IP地址。我不确定这是不是正确的?

代码语言:javascript
复制
Datacenter: dc1europe
=====================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
--  Address   Load       Tokens       Owns (effective)  Host ID                               Rack
DN  10.1.0.7  101.37 KiB  256          32.8%             617d3f87-cb04-4c29-9e0c-e2c712487ad5  rack1europe
UN  10.1.0.6  158.26 KiB  256          33.1%             b79a1aa0-a049-46f2-8efc-679d10a097e2  rack1europe
DN  10.1.0.9  101.36 KiB  256          34.2%             58a101e5-51f2-491e-833f-cc5c49a8740a  rack1europe

我可以使用cqlsh Internal IP Address连接到任何一台机器,但是当我使用cqlsh Public IP Address时,我得到以下错误:

代码语言:javascript
复制
Connection error: ('Unable to connect to any servers', {'XX.XXX.XXX.XXX': error(None, "Tried connecting to [('XX.XXX.XXX.XXX', 9042)]. Last error: timed out")})

当我运行netstat -vatn时,它显示我的机器实际上正在监听端口9042,但我仍然不确定这是否正确:

代码语言:javascript
复制
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:9042            0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.53:53           0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 10.1.0.6:7000           0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:42271         0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:7199          0.0.0.0:*               LISTEN
tcp        0     64 10.1.0.6:22             109.76.85.23:51728      ESTABLISHED
tcp6       0      0 :::22                   :::*                    LISTEN

我可以使用当前登录到群集上的计算机的公共IP地址进行telnet,但是当我尝试使用群集上另一台计算机的公共IP地址进行telnet时,我得到以下信息:

代码语言:javascript
复制
Trying XX.XXX.XXX.XXX...

但是连接永远不会建立。

下面是我的cassandra.yaml文件中的相关设置,我已经为群集上的所有三个节点编辑了该文件

代码语言:javascript
复制
seed_provider:
    - class_name: org.apache.cassandra.locator.SimpleSeedProvider
      parameters:
          - seeds: "10.1.0.6, 10.1.0.7"

listen_address:

# broadcast_address: 1.2.3.4

start_rpc: false

rpc_address: 0.0.0.0

broadcast_rpc_address: <PUBLIC IP OF CURRENT NODE>

我已经在azure中编辑了NSG,允许所有需要的入站端口,包括7000,7001,7199,9042,9160,9142,所以这应该不是问题。

我不确定问题出在我的Azure VM/网络配置还是Cassandra设置上。任何建议或帮助都是很棒的!

谢谢。

EN

回答 2

Stack Overflow用户

发布于 2019-04-19 08:52:52

我的设置。

作为Webserver服务器的Windows VM

Ubuntu作为Cassandra节点。

在相同的订阅和不同的资源组和VNET中。

用于从Windows计算机到Cassandra的连接。

遵循以下步骤,它起作用了:)

1)对等VNet。这必须在两个vnet上完成。最初,我无法从Windows VM ping Ubuntu VM,但在对等之后,我可以ping通。

2)在Cassandra VM上打开9042端口,可以添加对Webserver地址范围的限制。

3)在Ubuntu VM中,编辑etc/cassandra/cassandra.yaml并更改以下设置。IP是Ubuntu虚拟机的内网ip地址

代码语言:javascript
复制
1) rpc_address: 10.0.1.5
2) listen_address: 10.0.1.5
3) seeds: "10.0.1.5"

4)现在尝试任何测试应用程序从Now服务器连接到cassandra。

e.g

代码语言:javascript
复制
            var cluster = Cluster.Builder()
                 .AddContactPoints("10.0.1.5")
                 .WithPort(9042)
                 .WithAuthProvider(new PlainTextAuthProvider("cassandra", "cassandra"))
                 .Build();
            ISession session = cluster.Connect();

您应该能够连接和运行语句。

干杯,

赫曼特

票数 2
EN

Stack Overflow用户

发布于 2018-12-02 08:23:57

从您的描述中,它听起来像Nat转发/端点。我假设这是一个典型的部署,所以下面是查看端点的信息。

https://docs.microsoft.com/en-us/azure/virtual-machines/linux/classic/setup-endpoints

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53571213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档