|
5台分布式zookeeper集群
UserClient.java
package putsoft.com.server;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooKeeper;
public class UserClient {
public static String root="/group";
public static final String ZK_LIST="172.17.0.1:2181,172.17.0.2:2181,172.17.0.3:2181,172.17.0.4:2181,172.17.0.5:2181";
public static ZooKeeper zookeeper;
public Watcher wacher=new NodeWatcher();
private static List<String> hostList=new ArrayList<String>();
public UserClient() throws IOException, KeeperException, InterruptedException{
zookeeper=new ZooKeeper(UserClient.ZK_LIST, 5000,new Watcher(){
public void process(WatchedEvent event) {
if(Watcher.Event.KeeperState.SyncConnected==event.getState()){
if(event.getType()==Watcher.Event.EventType.None)
System.out.println("client is running");
}
}
});
zookeeper.getChildren(root,wacher);
}
public static void updateHostConfig(WatchedEvent event) throws Exception{
hostList.clear();
if(event.getType()==Watcher.Event.EventType.NodeChildrenChanged
&&event.getPath().equals(root)){
System.out.println("server node changed");
List<String> nodes=zookeeper.getChildren(root,true);
String value=null;
for(String str:nodes){
byte[] data = zookeeper.getData(root + "/" + str, false, null);
value=new String(data,"utf-8");
hostList.add(value);
}
print(hostList);
}
}
public static void print(List<String> list){
System.out.print("[");
for(String str:list){
System.out.print(str+" ");
}
System.out.println("]");
}
public static void main(String[] args) throws Exception {
new UserClient();
Thread.sleep(Long.MAX_VALUE);
}
class NodeWatcher implements Watcher{
public void process(WatchedEvent event) {
try {
UserClient.updateHostConfig(event);
zookeeper.getChildren(root,wacher);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
UserServer.java
package putsoft.com.server;
import java.util.Calendar;
import java.util.Random;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs.Ids;
import org.apache.zookeeper.ZooKeeper;
public class UserServer {
public static String root="/group";
public static final String ZK_LIST="172.17.0.1:2181,172.17.0.2:2181,172.17.0.3:2181,172.17.0.4:2181,172.17.0.5:2181";
private ZooKeeper zkeeper;
public UserServer(){
final String address=UserServer.gethost();
try{
zkeeper=new ZooKeeper(UserServer.ZK_LIST, 2000, new Watcher() {
public void process(WatchedEvent event) {
if(event.getState()==Watcher.Event.KeeperState.SyncConnected){
if(event.getType()==Watcher.Event.EventType.None){
try {
zkeeper.create(root+"/"+address,address.getBytes("utf-8"), Ids.OPEN_ACL_UNSAFE, CreateMode.EPHEMERAL_SEQUENTIAL);
} catch ( Exception e) {
e.printStackTrace();
}
}
}
}
});
}catch(Exception e){
e.printStackTrace();
}
}
public static String gethost(){
Calendar calendar=Calendar.getInstance();
return "10.172."+calendar.get(Calendar.SECOND)+"."+new Random().nextInt(255);
}
public static void main(String[] args) throws Exception{
new UserServer();
Thread.sleep(Long.MAX_VALUE);
}
}
执行结果
client is running
server node changed
[10.172.1.80 ]
server node changed
[10.172.6.170 10.172.1.80 ]
server node changed
[10.172.6.170 10.172.1.80 10.172.11.57 ]
server node changed
[10.172.6.170 10.172.16.95 10.172.1.80 10.172.11.57 ]
server node changed
[10.172.20.177 10.172.6.170 10.172.16.95 10.172.1.80 10.172.11.57 ]
server node changed
[10.172.20.177 10.172.6.170 10.172.16.95 10.172.11.57 ]
server node changed
[10.172.20.177 10.172.16.95 10.172.11.57 ]
server node changed
[10.172.20.177 10.172.16.95 ]
server node changed
[10.172.20.177 ]
server node changed
[] |
|