【发布时间】:2014-04-05 08:27:33
【问题描述】:
我们正在以编程方式创建 Cassandra 节点(自动生成 yaml 并使用 CassandraDaemon)。理想情况下,由于配置需要,我们将能够在不同主机上使用不同的端口。这可能吗(通过种子规范或自定义类的实现)?看来种子列表只能取IP地址,不能取端口。
【问题讨论】:
标签: cassandra
我们正在以编程方式创建 Cassandra 节点(自动生成 yaml 并使用 CassandraDaemon)。理想情况下,由于配置需要,我们将能够在不同主机上使用不同的端口。这可能吗(通过种子规范或自定义类的实现)?看来种子列表只能取IP地址,不能取端口。
【问题讨论】:
标签: cassandra
查看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);
}
}
【讨论】:
看看https://github.com/pcmanus/ccm,他们在同一个节点上使用了多个 cassandra 实例。你可以看看他们是怎么做的。
【讨论】: