一、 什麼是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
複製代碼