Zookeeper叢集
1.是一種對等叢集,所有節點(機器)資料都一緻
2. 叢集節點之間靠心跳感覺彼此的存在
3. 所有寫操作都在主節點上,其他節點隻能讀,雖然可以接收寫請求,但是内部會把寫操作轉給主節點
4. 通過選舉機制選出主節點,進而保障了主節點的高可用
5.至少3個節點,必須是基數個節點,這個和zk的選舉算法有關系的,以後介紹
6. 當一半以上的節點資料寫入成功後,則傳回寫入成功,是最終一緻性政策
Zookeeper叢集
分布式系統理論之CAP定義
1. 一個分布式系統不可能同時時滿足一緻性(Consistency),可用性(Availability)和分區容忍性(Partition tolerance)這些基本需求,隻能滿足其中的兩項
CAP解讀
1.一緻性:分布式環境下,一緻性主要是指資料在多個副本間是否保持一緻
2.可用性:是指系統提供的服務必須是一直處于可用的狀态,對于使用者的請求總是能夠在有限的時間内傳回結果,有限
時間強調的是使用者能接受的時間
– 可用性和常說的高可用性的可用性不是一個概念,即如果服務通路不到,不屬于沒有可用性
– P:叢集出現網絡割裂(即腦裂)時,叢集還能繼續提供一定的可用性和一緻性,除非整個網絡不可用
– 隻能滿足其中的兩項不是另外一項就完全沒有,而是要求沒有那麼嚴格
3. 分區容忍是分布式系統必須有的特性,因為網絡不可靠,是以隻能在C和A中進行平衡
分布式系統理論之BASE理論
BASE是Basically Available(基本可用), Soft state(軟狀态)和Eventually Consistent最終一緻性)幾個短語的簡寫,它是對CAP中的一緻性和可用性權衡的結果
– BASE的核心思想是即使無法做到強一緻性,但是每個應用可以根據自身的業務特點,采用适當的方式
達到最終一緻性,同時擷取到系統可用性
1.BASE之基本可用
– 響應時間上的損失:有些要求1s内傳回,有些要求5s内傳回
– 功能上的損失:對于電商來說,某些區域可能不能購買某些商品,又或者大促時,部分消費者被引流
到降級的頁面
2.BASE之弱狀态
– 也稱為軟狀态,是指允許系統中的資料存在中間狀态,并認為該狀态不會影響系統的整體可用性,即
允許系統在不同節點的資料副本之間存在一定的延時
– 舉例:雙11的時候,我在京東購買東西,明明已經付款成功,但是系統提示的還是未付款
3. BASE之最終一緻性
– 系統中的資料副本在經過一段時間同步後,最終能夠達到一個一緻的狀态
叢集搭建
把安裝的zk複制成3份分别改寫zoo.cfg檔案如圖
在每個dataDir=/tmp/zookeeper1目錄下建立檔案mypid,分别寫入1,2,3到zookeeper1,zookeeper2,zookeeper3
配置完成,啟動三個zk如圖
修改任何一個節點都會同步其他節點,簡單的同步完成
java用戶端代碼如下
package com.xue.zk1;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.ZooDefs.Ids;
public class ZkclientTest {
ZooKeeper zkclient = null;
public ZkclientTest() throws Exception {
this.zkclient = new ZooKeeper("localhost:2181,localhost:2182,localhost:2183", 5000, null);
}
public void createPersistentNode(String path, Object data) throws Exception, InterruptedException {
zkclient.create(path, "meiren".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
}
public static void main(String[] args) throws Exception {
ZkclientTest zt = new ZkclientTest();
zt.createPersistentNode("/zkclient", "zkclientnode2");
}
}
如上圖每個節點都有zkclient這個節點
- 大小: 72.5 KB
- 檢視圖檔附件