【问题标题】:Apache Cassandra remote accessApache Cassandra 远程访问
【发布时间】:2018-11-29 20:44:30
【问题描述】:

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

【问题讨论】:

    标签: cassandra remote-access


    【解决方案1】:

    对 Cassandra 的远程访问是通过其节俭端口(尽管请注意 JMX 端口可用于执行一些有限的操作)。

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

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

    • cassandra 发行版的 bin 目录中的 cassandra-cli 提供简单的 get/set/list 操作,并且依赖于 Java
    • 提供对 cassandra 的 CQL 访问的 cqlsh shell,这取决于 Python
    • 更高级别的接口,例如Apollo

    【讨论】:

    • 你能运行这些命令吗:ps -ef | grep CassandraDaemon ;网络统计-lntp | grep 这将显示您的 cassandra 正在侦听的 IP/端口组合。顺便说一句,尽量避免远程登录到 thrift 端口 - 传递任何非 thrift 数据都可能导致 OutOfMemory 情况(这是一个非常讨厌的“功能” - 测试并确认这一点,以随机文本远程登录到 thrift 端口类型,点击返回,然后在接下来的几分钟内监控 CassandraDaemon pid 的内存使用情况)。
    • 请注意,Cassandra 从两年前的 0.7.0 版本开始对 Thrift 端口上的随机垃圾具有鲁棒性。
    • 啊,好吧,你是对的 - 我只是在 v1.1-0 实例上尝试过(虽然 [1]; do nc 127.0.0.1 9168; done)即使在 2Gb 之后对于二进制数据,堆使用量对我来说不会超过 240Mb。我现在感觉有点愚蠢,因为我一直在编造谎言!我生活和学习 :-) (附:伟大的产品 Mr Bellis)
    • 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
    • 我的输出看起来像这样。似乎它只在端口 9160 上监听 localhost,虽然我将 rpc_address 配置为 0.0.0.0 有什么问题?
    【解决方案2】:

    对于现在发现此问题的任何人,最佳答案已过时。

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

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

    Cassandra-cli 也被弃用,Apollo 不再活跃。使用 cqlsh 代替 cassandra-cli 和 Java driver 代替 Apollo。

    我不建议让 JMX 端口远程访问,除非您通过启用 SSL 和强身份验证secure it properly

    希望这有帮助。

    【讨论】:

    • 我为 cassandra 版本 3.11.2 尝试了许多解决方案,但没有一个对我有用,
    【解决方案3】:

    卡桑德拉 3.11.3

    我做了以下工作来让我的工作。 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连接的用户名和密码。

    【讨论】:

      【解决方案4】:

      对于使用 Azure 的任何人,问题可能是您需要创建一个公共 ip 地址,因为虚拟 ip 指向云服务本身而不是虚拟机。你可以找到更多信息in this post

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-09
        • 2017-06-16
        • 1970-01-01
        • 2021-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-01
        相关资源
        最近更新 更多