您好,我正在尝试在Azure Linux VM上建立一个三节点的Cassandra群集,并使用C#datastax客户端从外部计算机连接到它。但是,我无法从网络外部通过VM的公共IP连接。如果我现在迷路了,任何帮助将不胜感激。
这是机器正在运行的Java版本。
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)
我的卡桑德拉版本是
3.11.3
当我运行nodetool状态时,我可以看到群集中的计算机,但是显示的是Azure VNetwork上的本地IP地址,而不是其公共IP地址。我不确定这是否正确?
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
时出现以下错误:
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端口,但是我不确定这是否正确:
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时,会得到以下信息:
Trying XX.XXX.XXX.XXX...
但是永远不会建立连接。
这是我为集群中所有三个节点编辑的cassandra.yaml文件中的相关设置
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>
我已经天蓝色地编辑了NSG,以允许所有所需的入站端口,包括7000、7001、7199、9042、9160、9142,因此这应该不是问题。
我不确定问题是否出在我的Azure VM /网络配置或我的Cassandra安装程序上。任何指针或帮助都会很棒!
谢谢。
答案 0 :(得分:1)
我的设置。
Windows VM作为Web服务器
Ubuntu作为Cassandra节点。
在相同的订阅中,并且在不同的资源组和VNET中。
用于从Windows计算机连接到Cassandra。
按照以下步骤操作,即可:)
1)对等VNet。这必须在两个vnet上完成。最初在对等后,我无法从Windows VM ping Ubuntu VM。
2)在Cassandra VM上打开端口9042,可以为Web服务器的地址范围添加限制。
3)在Ubuntu VM中,编辑etc / cassandra / cassandra.yaml并更改以下设置。 IP是Ubuntu VM的专用IP地址
1) rpc_address: 10.0.1.5
2) listen_address: 10.0.1.5
3) seeds: "10.0.1.5"
4)现在,尝试使用任何测试应用程序从Web服务器连接到cassandra。
例如
var cluster = Cluster.Builder()
.AddContactPoints("10.0.1.5")
.WithPort(9042)
.WithAuthProvider(new PlainTextAuthProvider("cassandra", "cassandra"))
.Build();
ISession session = cluster.Connect();
您应该能够连接并运行语句。
干杯
Hemant
答案 1 :(得分:0)
根据您的描述,这听起来像是“自然转发/端点”。我认为它是经典的部署,因此下面是查看端点的信息。
https://docs.microsoft.com/en-us/azure/virtual-machines/linux/classic/setup-endpoints