【问题标题】:How to configure cassandra for remote connection如何配置 cassandra 进行远程连接
【发布时间】:2016-07-08 02:02:36
【问题描述】:

我正在尝试为 Windows 上的远程连接配置 Cassandra Datastax 社区版,

Cassandra Server 安装在 Windows 7 PC 上,使用本地 CQLSH 可以完美连接到本地服务器。

但是当我尝试从同一网络中的另一台 PC 连接 CQLSH 时,我收到以下错误消息:

连接错误: ('无法连接到任何服务器', {'MYHOST': 错误(10061,“尝试连接到[('HOST_IP',9042)]。最后一个错误:否 可以建立连接,因为目标机器主动拒绝 它")})

所以我想知道如何正确配置(我应该对 cassandra.yaml 配置文件进行哪些更改)Cassandra 服务器以允许远程连接。

提前谢谢你!

【问题讨论】:

    标签: cassandra cqlsh cassandra-cli nosql


    【解决方案1】:

    这个怎么样:

    在 cassandra.yaml 配置文件中进行这些更改:

    start_rpc: true
    
    rpc_address: 0.0.0.0
    
    broadcast_rpc_address: [node-ip]
    
    listen_address: [node-ip]
    
    seed_provider:
      - class_name: ...
        - seeds: "[node-ip]"
    

    参考:https://gist.github.com/andykuszyk/7644f334586e8ce29eaf8b93ec6418c4

    【讨论】:

    【解决方案2】:

    通过 Cassandra 2.0 的节俭端口远程访问 Cassandra。在 Cassandra 2.0.x 中,默认的 cqlsh 侦听端口是 9160,它在 cassandra.yaml 中由 rpc_port 参数定义。默认情况下,Cassandra 2.0.x 及更早版本通过在 cassandra.yaml 文件中将 start_rpc 配置为 true 来启用 Thrift。

    在 Cassandra 2.1 中,cqlsh 实用程序使用本地协议。在使用 Datastax python 驱动的 Cassandra 2.1 中,默认的 cqlsh 监听端口是 9042。

    cassandra 节点应该绑定到服务器网卡的 IP 地址 - 它不应该是 127.0.0.1 或作为环回接口 IP 的 localhost,绑定到此将阻止直接远程访问。要配置绑定地址,请使用 cassandra.yaml 中的 rpc_address 参数。将此设置为 0.0.0.0 将侦听所有网络接口。

    您是否检查过远程机器可以连接到 Cassandra 节点?机器之间有防火墙吗?您可以尝试以下步骤进行测试:

    1) 确保您可以从您所在的服务器连接到该 IP:

    $ ssh user@xxx.xxx.xx.xx

    2)检查节点的状态,并确认它显示相同的IP:

    $nodetool 状态

    3) 运行命令连接IP(不使用默认只指定端口):

    $ cqlsh xxx.xxx.xx.xx

    【讨论】:

    • 您好,感谢您的帮助,实际上您的第二点对我找出导致问题的原因非常有帮助。打印的nodetool状态显示该节点没有指向机器的本地IP,然后使用“ipconfig”命令,我发现机器正在使用Virtualbox以太网适配器。因此,在禁用 Virtualbox 虚拟适配器后,nodetool 打印了真正的本地 ip,远程连接对我有用!!!再次感谢您!
    【解决方案3】:

    Kat 的替代解决方案。使用 Ubuntu 16.04

    1. ssh 进入服务器server_user@**.**.**.**
    2. 如果正在运行,请停止 cassandra:

      • 检查是否使用ps aux | grep cassandra 运行
      • 如果运行,将输出一大块命令/标志,例如

        ubuntu 14018 4.6 70.1 2335692 712080 pts/2 Sl+ 04:15 0:11 java -Xloggc:./../logs/gc.log ........

        例子中注14018是进程id

      • 停止使用kill <process_id>(在本例中为 14018)
    3. 编辑 cassandra.yaml 文件如下

      • rpc_address: 0.0.0.0
      • broadcast_rpc_address: **.**.**.**
    4. 重新启动 cassandra ./bin/cassandra -f(从 cassandra 根目录内)
    5. 在本地机器上打开另一个终端并通过cqlsh **.**.**.**(您的服务器的IP)连接进行测试。

    ./bin/nodetool status 地址报告了我的本地主机 IP (127.0.0.1),但尽管如此,远程 cqlsh 仍然有效。

    【讨论】:

    • 这应该是公认的答案。像魅力一样工作
    猜你喜欢
    • 2018-03-23
    • 1970-01-01
    • 2016-06-24
    • 2015-07-10
    • 1970-01-01
    • 2015-01-03
    • 2018-06-21
    • 2013-11-25
    • 1970-01-01
    相关资源
    最近更新 更多