天天看點

zookeeper學習筆記-zookpeeper叢集

Zookeeper叢集

1.是一種對等叢集,所有節點(機器)資料都一緻

2. 叢集節點之間靠心跳感覺彼此的存在

3. 所有寫操作都在主節點上,其他節點隻能讀,雖然可以接收寫請求,但是内部會把寫操作轉給主節點

4. 通過選舉機制選出主節點,進而保障了主節點的高可用

5.至少3個節點,必須是基數個節點,這個和zk的選舉算法有關系的,以後介紹

6. 當一半以上的節點資料寫入成功後,則傳回寫入成功,是最終一緻性政策

Zookeeper叢集

zookeeper學習筆記-zookpeeper叢集

分布式系統理論之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檔案如圖

zookeeper學習筆記-zookpeeper叢集
zookeeper學習筆記-zookpeeper叢集
zookeeper學習筆記-zookpeeper叢集

在每個dataDir=/tmp/zookeeper1目錄下建立檔案mypid,分别寫入1,2,3到zookeeper1,zookeeper2,zookeeper3

配置完成,啟動三個zk如圖

zookeeper學習筆記-zookpeeper叢集

修改任何一個節點都會同步其他節點,簡單的同步完成

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");

	}

}
           
zookeeper學習筆記-zookpeeper叢集

如上圖每個節點都有zkclient這個節點

  • zookeeper學習筆記-zookpeeper叢集
  • 大小: 72.5 KB
  • 檢視圖檔附件