TestingCluster是一个可以模拟ZooKeeper集群环境的Curator工具类,能够便于开发人员在本地模拟由n台机器组成的集群环境。下面我们将通过模拟一个由3台机器组成的ZooKeeper集群的场景来了解TestingCluster工具类的使用。
public class TestingCluster_Sample {
public static vod main(String[] args) throws Exception {
TestingCluster cluster = new TestingCluster(3);
cluster.start();
Thread.sleep(2000);
TestingZooKeeperServer leader = null;
for (TestingZooKeeperServer zs : cluster.getServers()) {
System.out.println(zs.getInstanceSpec().getServerId() + "-");
System.out.println(zs.getQuorumPeer().getServerState() + "-");
System.out.println(zs.getInstanceSpec().getDataDirectory().getAbsolutePath());
if(zs.getQuorumPeer().getServerState().equals("leading")) {
leader = zs;
}
}
leader.kill();
System.out.println("--After leader kill:");
for (TestingZooKeeperServer zs : cluster.getServers()) {
System.out.println(zs.getInstanceSpec().getServerId() + "-");
System.out.println(zs.getQuorumPeer().getServerState() + "-");
System.out.println(zs.getInstanceSpec().getDataDirectory().getAbsolutePath());
}
cluster.stop();
}
}
运行程序,输出结果如下:
在上面这个示例程序中,我们模拟了一个由3台机器组成的ZooKeeper集群,同时在运行期间,将Leader服务器Kill掉。从程序运行的输出结果中可以看到,在Leader服务器被Kill后,其他两台机器重新进行了Leader选举。
哈哈