问题描述
我只是想通过使用 Curator frame work 或 zookeeper 的 Java 实现来启动 Zookeeper 集成(Leader - Follower)。
最初我使用二进制模式进行了检查,并且在下面显示的示例配置中运行良好。
zoo.cfg
tickTime=2000
dataDir=/var/lib/zookeeper/
clientPort=2181
initLimit=5
syncLimit=2
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
相应地创建了 和 myid 文件,并按照我的预期创建了 zookeeper 集合(创建了领导者 - 追随者)。
Connections: 4
Outstanding: 0
Zxid: 0x30000052a
Mode: leader
Node count: 158
Proposal sizes last/min/max: 146/36/1471
当我尝试使用带有类的 org.apache.zookeeper.server.quorum.QuorumPeerConfig 配置来实现相同的效果时,
org.apache.zookeeper.server.ZooKeeperServerMain
ZooKeeperServerMain zkServer = new ZooKeeperServerMain();
final ServerConfig configuration = new ServerConfig();
configuration.readFrom(peerConfig);
new Thread(() -> {
try {
zkServer.runFromConfig(configuration);
Thread.sleep(2000);
} catch (Exception e) {
logger.error("ZooKeeper Failed",e);
}
}).start();
org.apache.curator.test.TestingServer
InstanceSpec spec = new InstanceSpec(zkDataDir,clientPort,electionPort,-1,true,serverId,tickTime,maxClientCnxns,customProperties);
zkServer = new TestingServer(spec,true);
两者都以独立模式启动zookeeper,似乎两个实现都不关心配置server.1=..... server.2=.... server.3=..... 。
我在这里遗漏了什么?如何在leader follower模式下使用java启动zookeeper?
注意:我是动物园管理员相关的东西和文档的新手,仍然让我感到困惑。请指导我同样...谢谢... :)
解决方法
Curator TestingServer 可以被视为常规的 ZooKeeper 服务器。因此,可以使用它来测试领导者-跟随者,例如使用 Curator LeaderLatch。
Leader-follower unit test example
Leader-follower implementation example
注意:我是这个项目的作者。