gpt4 book ai didi

cassandra - 如何集群嵌入式Cassandra实例?

转载 作者:行者123 更新时间:2023-12-03 07:03:10 26 4
gpt4 key购买 nike

我编写了一个小型应用程序来启动 Cassandra 1.2 的嵌入式实例。

我正在尝试通过运行此应用程序的 3 个实例来在本地创建由 3 个嵌入式实例组成的集群。每个人都会查看文件系统上不同的 cassandra.yaml。每个文件有:

  • 相同的集群名称
  • 初始 token 为空
  • 唯一的监听地址(在我的主机文件中全部映射到 127.0.0.1)
  • 独特的 RPC、存储和 ssl_storage 端口
  • 相同的种子(第一个服务器的监听地址(无端口))
  • 应用程序启动时传递的唯一 -Dcom.sun.management.jmxremote.port 值

当我启动应用程序时,一切都正常,并且在文件系统上有单独的存储。但是,当我使用 nodetool 检查每个节点时,每个节点似乎都单独位于一个集群中:

C:\Program Files\DataStax Community\apache-cassandra\bin>nodetool -h 127.0.0.1 -p 7197 ring
Starting NodeTool

Datacenter: datacenter1
==========
Replicas: 1

Address Rack Status State Load Owns Token

127.0.0.1 rack1 Up Normal 198,15 KB 100,00% 8219116491729144532


C:\Program Files\DataStax Community\apache-cassandra\bin>nodetool -h 127.0.0.2 -p 7198 ring
Starting NodeTool

Datacenter: datacenter1
==========
Replicas: 1

Address Rack Status State Load Owns Token

127.0.0.2 rack1 Up Normal 152,13 KB 100,00% -3632227916915216562

在线博客和文档表明这应该足够了。是否可以集群嵌入式实例?如果是这样,有人知道我的配置或理解是错误/不足的吗?

启动嵌入式实例的代码如下。希望您能帮忙,谢谢。

public class EmbeddedCassandraDemo {

private static final String CONF_PATH_FORMAT = "D:\\embedded_cassandra\\Node%d\\";

private ExecutorService executor = Executors.newSingleThreadExecutor();
private CassandraDaemon cassandraDaemon;
private int nodeNumber;

public EmbeddedCassandraDemo(int nodeNumber) {
this.nodeNumber = nodeNumber;
}

public static void main(String [ ] args) throws InterruptedException, ConnectionException {
new EmbeddedCassandraDemo(Integer.parseInt(args[0])).run();
}

private void run() throws InterruptedException, ConnectionException {
setProperties();

activateDeamon();
}

private void activateDeamon() {
executor.execute( new Runnable(){

@Override
public void run() {
cassandraDaemon = new CassandraDaemon();
cassandraDaemon.activate();
}});
}

private void setProperties() {
System.setProperty("cassandra.config", String.format("file:%scassandra.yaml", String.format(CONF_PATH_FORMAT, nodeNumber)));
System.setProperty("log4j.configuration", String.format("file:%slog4j-server.properties", String.format(CONF_PATH_FORMAT, nodeNumber)));
System.setProperty("cassandra-foreground", "true");
}
}

最佳答案

“空白初始 token ”

您使用虚拟节点吗?如果没有,我想知道这是否是你的问题。您应该为每台机器定义不同的初始标记。对于 3 节点集群,这些初始 token 的增量应为 56,713,727,820,156,410,577,229,101,238,628,035,242。

使用 DataStax 的 Python 脚本计算初始 token ,这些值应该满足您的需求:

node 0: 0
node 1: 56713727820156410577229101238628035242
node 2: 113427455640312821154458202477256070485

此外,您使用的是哪个endpoint_snitch?如果您使用“PropertyFileSnitch”,请确保您的 cassandra-topology.properties 文件包含每个节点(以及 DC 和机架)的定义。

尝试一下,看看是否有帮助。

关于cassandra - 如何集群嵌入式Cassandra实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20405341/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com