【问题标题】:Is it possible to use different ports for nodes in a Cassandra cluster?是否可以为 Cassandra 集群中的节点使用不同的端口?
【发布时间】:2014-04-05 08:27:33
【问题描述】:

我们正在以编程方式创建 Cassandra 节点(自动生成 yaml 并使用 CassandraDaemon)。理想情况下,由于配置需要,我们将能够在不同主机上使用不同的端口。这可能吗(通过种子规范或自定义类的实现)?看来种子列表只能取IP地址,不能取端口。

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    查看Cassandra网络代码中的相关source后,显然不支持这个。在newSocket() 方法中,远程节点的端口是从静态DatabaseDescriptor.getSSLStoragePort() 中获取的(摘录如下)。这不会为每个主机或任何挂钩提供不同的值:

    public Socket newSocket() throws IOException
    {
        // zero means 'bind on any available port.'
        if (isEncryptedChannel())
        {
            return SSLFactory.getSocket(DatabaseDescriptor.getEncryptionOptions(), endPoint(), DatabaseDescriptor.getSSLStoragePort(), FBUtilities.getLocalAddress(), 0);
        }
        else {
            return new Socket(endPoint(), DatabaseDescriptor.getStoragePort(), FBUtilities.getLocalAddress(), 0);
        }
    }
    

    【讨论】:

      【解决方案2】:

      看看https://github.com/pcmanus/ccm,他们在同一个节点上使用了多个 cassandra 实例。你可以看看他们是怎么做的。

      【讨论】:

      • 谢谢,但我不是在询问同一节点上的多个实例。我问的是同一集群中的实例(但在不同的主机上)使用不同的端口。
      • 据我了解,这个 ccm 东西在不同端口上的同一节点上运行不同的实例,这样实例就不会在端口上发生冲突,然后它也将它们放在同一个集群中。所以不是让它们在同一个节点上,而是让不同的实例在不同的端口上运行,,,
      • 我确实看过但我没有看到任何使用不同端口的证据。它们在同一个节点上使用不同的 IP,因此它们不需要使用不同的端口。
      • @MartinSerrano 扩展了这个想法:您可以使用服务器上的代理将特定消息重新路由到另一个端口。这样你就可以让它看起来好像 cassandra 服务器是从一个端口托管的,而它实际上是一个进行重新路由的代理。
      猜你喜欢
      • 1970-01-01
      • 2017-05-20
      • 2019-06-28
      • 2013-05-21
      • 2017-06-03
      • 2017-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多