TestingCluster是一个可以模拟Zookeeper集群环境的Curator工具类,能够便于开发人员在本地模拟由N台机器组成的集群环境。
import org.apache.curator.test.TestingCluster;
import org.apache.curator.test.TestingZooKeeperServer;
/**
*
* @ClassName: TestingCluster_Sample
* @Description: TODO(这里用一句话描述这个类的作用)
* @author RongShu
* @date 2017年6月17日 下午2:23:22
*
*/
public class TestingCluster_Sample {
public static void 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.print(zs.getInstanceSpec().getServerId() + "-");
System.out.print(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.print(zs.getInstanceSpec().getServerId() + "-");
System.out.print(zs.getQuorumPeer().getServerState() + "-");
System.out.println(zs.getInstanceSpec().getDataDirectory().getAbsolutePath());
}
cluster.stop();
}
}
输出
1-following-C:\Users\陈健飞\AppData\Local\Temp\1497680740231-0
2-following-C:\Users\陈健飞\AppData\Local\Temp\1497680740235-0
3-leading-C:\Users\陈健飞\AppData\Local\Temp\1497680740235-1
--After leader kill:
1-leaderelection-C:\Users\陈健飞\AppData\Local\Temp\1497680740231-0
2-leaderelection-C:\Users\陈健飞\AppData\Local\Temp\1497680740235-0
3-leaderelection-C:\Users\陈健飞\AppData\Local\Temp\1497680740235-1
注意:
上面模拟了3台机器组成的集群环境,同时在运行期间,将Leader服务kill掉,从程序的输出来看,其他两台机器重新进行了Leader选举