我已经编写了一个小应用程序来启动Cassandra 1.2的嵌入式实例。
我正在尝试通过运行此应用程序的3个实例在本地创建3个这些嵌入式实例的集群。每个人都在文件系统上查看不同的cassandra.yaml。每个文件都有:
当我启动应用程序时,所有应用程序都很好,并且在文件系统上有单独的存储空间。但是,当我使用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");
}
}
答案 0 :(得分:2)
“blank initial_token”
您使用的是虚拟节点吗?如果没有,我想知道这可能是你的问题。您应该使用不同的初始令牌定义每台计算机。对于3节点集群,这些初始令牌应相互增加56,713,727,820,156,410,577,229,101,238,628,035,242。
使用DataStax的Python脚本来计算初始令牌,这些值应该符合您的需求:
node 0: 0
node 1: 56713727820156410577229101238628035242
node 2: 113427455640312821154458202477256070485
另外,您使用的是哪个endpoint_snitch
?如果您使用的是“PropertyFileSnitch”,请确保您的cassandra-topology.properties
文件包含每个节点的定义(以及DC和机架)。
尝试一下,看看它是否有帮助。
答案 1 :(得分:1)
现在排序。查看https://github.com/pcmanus/ccm上的代码和简介(链接到Run multiple cassandra nodes (a cluster) from the same machine?),这使得所有端口值与JMX连接保持相同。
进行了这些更改,并且每次感谢@ BryceAtNetwork23设置初始令牌,并将所有3台服务器的IP指定为种子,它们现在形成一个集群。