1. 程式人生 > >主備伺服器如何倒換?

主備伺服器如何倒換?

  主備伺服器如何倒換?
  
  採用 ZooKeeper 來做主備決策,主備伺服器都連線到 ZooKeeper 建立自己的節點,主伺服器的路徑規則為“/MQ/server/ 分割槽編號 /master”,備機為“/MQ/server/ 分割槽編號 /slave”,節點型別為 EPHEMERAL。
  
  備機監聽主機的節點訊息,當發現主伺服器節點斷連後,備伺服器修改自己的狀態,對外提供訊息讀取服務。
  
  簡單實現程式碼如下:
  
  主服務建立服務節點資訊:
  
  public class Master {
  
  private String MQ = "/MQ";
  
  private String server = "/server";
  
  private String id = "/1";
  
  private String masterNode = "/master";
  
  public void init() {
  
  ZkClient zkClient = new ZkClient("192.168.0.239:2181");
  
  if(!zkClient.exists(MQ)) {
  
  zkClient.createPersistent(MQ);
  
  }
  
  if(!zkClient.exists(MQ + server)) {
  
  zkClient.createPersistent(MQ + server);
  
  }
  
  if(!zkClient.exists(MQ + server + id)) {
  
  zkClient.createPersistent(MQ + server + id);
  
  }
  
  if(!zkClient.exists(MQ + server + id + masterNode)) {
  
  zkClient.createEphemeral(MQ + server + id + masterNode, "192.168.0.156:8080");
  
  }
  
  }
  
  public static void main(String[] args) throws Exception{
  
  Master master = new Master();
  
  master.init();
  
  System.in.read();
  
  }
  
  }
  
  備伺服器監聽主伺服器狀態,主伺服器故障。切換備份伺服器為主伺服器
  
  public class Slave {
  
  private String MQ = "/MQ";
  
  private String server = "/server";
  
  private String id = "/1";
  
  private String salverNode = "/slave";
  
  private String masterNode = "/master";
  
  public void init() {
  
  ZkClient zkClient = new ZkClient("192.168.0.239:2181");
  
  if(!zkClient.exists(MQ)) {
  
  zkClient.createPersistent(MQ);
  
  }
  
  if(!zkClient.exists(MQ + server)) {
  
  zkClient.createPersistent(MQ + server);
  
  }
  
  if(!zkClient.exists(MQ + server + id)) {
  
  zkClient.createPersistent(MQ + server + id);
  
  }
  
  if(!zkClient.exists(MQ + server yongshiyule178.com+ id + salverNode)) {
  
  zkClient.createEphemeral(MQ +www.tongqt178.com server + id + salverNode, "192.168.0.157:8080");
  
  }
  
  zkClient.subscribeDataChanges(MQ + server + id + masterNode, new IZkDataListener() {
  
  @Override
  
  public void handleDataChange(www.tiaotiaoylzc.com/ String dataPath, Object data) throws Exception {
  
  }
  
  @Override
  
  public void handleDataDeleted(String dataPath) throws Exception {
  
  System.out.println("訂閱資料發生變化" + dataPath);
  
  zkClient.delete(MQ + server + id +www.yigouyule2.cn salverNode);
  
  zkClient.createEphemeral(MQ + server + id + masterNode,"192.168.0.157:8080");
  
  }
  
  });
  
  }
  
  public static void main(String[www.mcyllpt.com ] args) throws Exception{
  
  Slave slave = new Slave();
  
  slave.init();
  
  System.in.read();
  
  }