Apache Cassandra 远程访问

26

我已在远程Ubuntu服务器上安装了Apache Cassandra。如何允许Apache Cassandra数据库进行远程访问?以及如何建立连接?

4个回答

47

访问Cassandra可以通过其thrift端口进行(但请注意,JMX端口可用于执行一些有限的操作)。

在中,rpc_port参数定义了thrift端口,默认为9160。您的Cassandra节点应绑定到服务器网络卡的IP地址 - 不应该是127.0.0.1localhost,这是回环接口的IP地址,绑定到它将阻止直接远程访问。您可以使用中的rpc_address参数配置绑定的地址。将其设置为0.0.0.0表示“侦听所有网络接口”,这可能适合您,也可能不适合。

要建立连接,您可以使用:

  • 目录中的提供简单的get/set/list操作,并依赖于Java
  • 提供对Cassandra的CQL访问,这取决于Python
  • 更高级的接口,如Apollo

1
你能运行这些命令吗:ps -ef | grep CassandraDaemon ; netstat -lntp | grep <上述命令的pid>这将显示你的Cassandra正在监听哪个IP / 端口组合。顺便说一下,尽量避免telnet到thrift端口 - 传递任何非thrift数据可能会导致OutOfMemory情况(这是一个相当恶劣的“特性” - 要测试和确认这一点,请telnet到thrift端口,输入随机文本,然后监视CassandraDaemon pid在接下来的几分钟内的内存使用情况)。 - CraigJPerry
1
请注意,自两年前的0.7.0版本以来,Cassandra对Thrift端口上的随机垃圾数据具有强大的容错能力。 - jbellis
啊,好的,是的,你说得对 - 我刚刚在一个v1.1-0实例上尝试了一下(while [1]; do nc 127.0.0.1 9168 < /mach_kernel; done),即使有2GB的二进制数据,我的堆使用量也不会超过240MB。我现在感到有点傻,因为我一直在传播一个错误!我活着就要学习 :-) (附言:贝利斯先生的产品非常棒) - CraigJPerry
tcp 0 0 0.0.0.0:57621 0.0.0.0:* LISTEN 8536/java
tcp 0 0 0.0.0.0:7000 0.0.0.0:* LISTEN 8536/java
tcp 0 0 0.0.0.0:7199 0.0.0.0:* LISTEN 8536/java
tcp 0 0 0.0.0.0:47684 0.0.0.0:* LISTEN 8536/java
tcp 0 0 127.0.0.1:9160 0.0.0.0:* LISTEN 8536/java
- user1588782
有趣。我想我们应该先检查基础知识:自应用更改以来,Cassandra 是否已重新启动?正确的 Cassandra.yaml 已更新?您可以确认在网络卡的 IP 地址上没有任何东西正在侦听 9160(netstat -an | grep 9160)-为确保该端口可用,您可以运行(nc -l -p 9160 -v)吗? - CraigJPerry
显示剩余2条评论

7

如果有人现在发现这个问题,最佳答案已经过时了。

Apache Cassandra的thrift接口已被弃用,并将在Cassandra 4.0中删除。默认客户端端口现在是9042。

正如Tyler Hobbs所指出的,您需要确保rpc_address参数未设置为127.0.0.1或localhost(默认情况下为localhost)。如果您将其设置为0.0.0.0以侦听所有接口,则还需要将broadcast_rpc_address设置为节点的公共IP地址或私有IP地址(具体取决于您计划如何连接到Cassandra)

Cassandra-cli也已被弃用,Apollo也不再活跃。使用cqlsh代替cassandra-cli,并使用Java驱动程序代替Apollo。

我不建议使JMX端口远程可访问,除非您通过启用SSL和强身份验证来妥善保护

希望这有所帮助。


我尝试了许多针对Cassandra版本3.11.2的解决方案,但都没有奏效。 - Vishal Chaurasia

6
我按照以下步骤使它正常工作。更改cassandra.yaml中的内容:
start_rpc: true

rpc_address: 0.0.0.0

broadcast_rpc_address: ***.***.***.***
broadcast_rpc_address 是安装 Cassandra 的计算机的地址。
 seed_provider:
  - class_name: ...
    - seeds: "127.0.0.1, ***.***.***.***"

我在种子中添加/附加了Cassandra运行机器的IP地址。

我使用TablePlus从Windows访问。在TablePlus中,我写下了Cassandra机器的IP地址,在端口部分我写下了9042并使用了用于SSH连接的用户名和密码。


3

对于使用Azure的任何人来说,问题可能是您需要创建公共IP地址,因为虚拟IP指向云服务本身而不是虚拟机。您可以在此帖子中找到更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接