Zookeeper的瞭解

一、 什麼是Zookeeperjson

zookeeper是一個Java語言寫的分佈式協調工具,它既能做爲微服務的註冊中心,也能利用zookeeper實現業務邏輯,zooeeper從實現的角度來看,是採用觀察者模式,它負責存儲和管理數據,而後接受客戶端的註冊,當客戶端的數據發生變化的時候,它會負責通知相應的服務,對應的數據發生變化;
複製代碼

二、 Zookeeper的做用服務器

統一命名服務、統一配置管理、統一集羣管理、服務器節點動態上下線、負載均衡等
複製代碼

三、 Zookeeper的節點類型session

註冊到Zookeeper的節點類型稱爲ZNode,節點類型分爲臨時節點和持久化節點,臨時節點分爲臨時節點和臨時順序節點,持久化節點分爲持久化節點和持久化順序節點;臨時節點與會話保持鏈接,當會話斷開以後,臨時節點也跟着消失;持久化節點是保存到硬盤上的,不管會話斷不斷開,都會保存節點,並且節點不容許重複,因此當節點發生變化的時候,Zookeeper會通知相應客戶端,對應的節點發生變化;
複製代碼

四、 Zookeeper中的Watch事件負載均衡

Zookeeper中節點數據變化的通知就是利用了Zookeeper的watch事件,並且事件只會觸發一次;其類型有create、exisit、delete事件
複製代碼

(1)Zookeeper的鏈接:分佈式

private String connectString = "127.0.0.1:2181";
  private int sessionTimeout = 2000;
  private ZooKeeper zkClient;
  @Before
  public void init() throws IOException {

    zkClient = new ZooKeeper(connectString, sessionTimeout, new Watcher() {

        @Override
        public void process(WatchedEvent event) {
        }
    });
}
複製代碼

(2) 判斷節點是否存在ide

@Test
public void exist() throws KeeperException, InterruptedException {

    Stat stat = zkClient.exists("/test", false);

    System.out.println(stat == null ? "not exist" : "exist");
}
複製代碼

(3) 建立節點微服務

@Test
public void createNode() throws KeeperException, InterruptedException {

    User user = new User();
    user.setId(1);
    user.setUsername("aa");

    String json = JSON.toJSONString(user);


    String path = zkClient.create("/" + json, json.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

    if (path != null) {
        System.out.println(path);
    }

    Stat stat = new Stat();

    String str = new String(zkClient.getData("/" + json, true, stat));

    System.out.println(str);

    System.out.println(stat.getAversion());
    System.out.println(stat.getVersion());


    User user1 = new User();
    user1.setId(2);
    user1.setUsername("aa");

    String json1 = JSON.toJSONString(user1);

    String path1 = zkClient.create("/" + json1, json1.getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

    if (path1 != null) {
        System.out.println(path1);
    }

}
複製代碼

這裏須要注意的是,建立節點的"/"須要,因爲Zookeeper建立相同節點的時候,會拋異常,因此在建立節點的時候,須要用exists判斷該節點是否存在;工具

五、 Zookeeper集羣spa

zookeeper集羣必須保證有n/2+1臺機器存活,其集羣才能正常運行,也就是至少3臺zookeeper存在,其集羣纔不受到影響,並且zookeeper的集羣採用ZAB協議,其有:
 (1)消息廣播
  當leader收到消息以後,它會把消息廣播給其餘的服務器
(2)崩潰恢復
 當leader宕機等,zookeeper就會從新選舉出新的leader
複製代碼
相關文章
相關標籤/搜索