天天看點

Centos7 Zookeeper

本文版權歸部落格園和作者吳雙本人共同所有 轉載和爬蟲請注明原文位址 www.cnblogs.com/tdws

一.寫在前面

ZK是一個高效的分布式協調服務,高可用的分布式管理協調架構。 朋友推薦一本書《從paxos到zookeeper》,對我幫助的确很大。 

二.叢集配置和踩坑

java安裝和環境變量配置可以參考 http://www.cnblogs.com/tdws/p/4096300.html 

1 wget https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz   下載下傳
2  
3 tar -zxvf zookeeper-3.4.10.tar.gz   解壓
4  
5 mv zookeeper-3.4.10 /usr/local  剪切
6  
7 mv zookeeper-3.4.10/ zookeeper 重命名      

下面修改配置檔案命名

1 cd /usr/local/zookeeper/conf
2 mv zoo_sample.cfg zoo.cfg      

配置一共沒幾行 。指定配置中的  dataDir

dataDir=/usr/local/zookeeper/data      

自行mkdir建立data檔案夾。

在配置檔案末尾 配置叢集 我是單台機器僞叢集 三個節點

1 server.1=your_ip:20881:30881
2 server.2=your_ip:20882:30882
3 server.3=your_ip:20883:30883      

在data檔案夾中建立檔案myid 來做一個辨別

nano myid 在檔案中填寫0 并且儲存。需要注意的是剛才我們的zookeeper檔案夾是不使用的,僅作為我們copy新節點的原本。

接下來複制三份zk

1 cp -r zookeeper/ zookeeper1
2 cp -r zookeeper/ zookeeper2
3 cp -r zookeeper/ zookeeper3      

分别修改三台節點 其datadir 将路徑指定到自己節點之下

分别修改其端口号和myid,是各個zoo.conf 配置的其中port 設定分别為2181 2182 2183

各個myid内容分别為1 2 3

下面 去三個zk bin目錄下 執行zkServer.sh start

第一次 出錯

Error contacting service. It is probably not running.

哎 檢查好幾個小時ZK配置檔案 試了十幾種方法, 結果之前JAVA_HOME不小心配置錯了,我是yum安裝的jdk。

第二次 出錯與解決

後來又出一次錯誤 是我stop zk所有節點之後 再次啟動起不來 首先 jps指令 然後看到程序id和QuorumPeerMain

把Quorumpeermain的程序kill -9殺死

第三次 我丢雷樓某! 這個真是困擾了

如果使用阿裡雲ECS 專有網絡+彈性公網IP

一般不能直接在ECS執行個體的程式例綁定和使用彈性公網IP位址。因為這個公網IP位址在ECS之外。是以我開了所有的端口,根本沒有用,最後使用0.0.0.0解決問題。

1 server.1=0.0.0.0:20881:30881
2 server.2=0.0.0.0:20882:30882
3 server.3=0.0.0.0:20883:30883      

三.應用和小結

學習ZK一段時間,原生API比較難以使用,一般使用zkClient(dubbo依賴于此)和curator架構來操作ZK比較容易。 其典型應用場景包括以下幾點:

1.資料釋出與訂閱

    ZK在dubbo中作為注冊中心的角色,服務方和調用方都在這裡注冊。舉例來說明,我釋出了一個dubbo service,消費者webapp引用這個服務

<dubbo:service interface="com.s2s.service.ItemService" ref="itemServiceImpl"/>   釋出的服務      
<dubbo:reference interface="com.s2s.service.ItemService" id="itemService"/>     引用服務(将使用RPC調用)      

  接下來去伺服器上檢視資料節點,

Centos7 Zookeeper

可以看到根目錄上有dubbo節點,dubbo下有com.s2s.service.ItemService, 其節點下又有consumers和providers等。

Centos7 Zookeeper
Centos7 Zookeeper

服務提供者啟動時向/dubbo/com.s2s.service.ItemService/providers目錄下寫入URL

服務消費者啟動時訂閱/dubbo/com.s2s.service.ItemService/providers目錄下的URL。 并且向/dubbo/com.s2s.service.ItemService/consumers目錄下寫入自己的URL 

監控中心啟動時訂閱/dubbo/com.s2s.service.ItemService/目錄下的所有提供者和消費者URL。

是以dubbo監控中心,檢視到消費者和服務提供者

Centos7 Zookeeper
Centos7 Zookeeper

2.負載均衡

3.命名服務

4.分布式通知和協調

5.叢集管理與Master選舉

 比如SolrCloud管理。管理叢集配置,監控叢集狀态,選舉分片leader

6.分布式鎖

    有很多人用它做分布式鎖 但是做法比較底層。臨時節點是在一次會話内有效,保證了出現異常時,鎖能得以釋放。比如client1 做分布式操作 那他建立一個臨時節點 然後去做一些其他資料操作 做完操作後, 再去把臨時節點移除。這時c2才能去操作。如果有10個用戶端 要操作同一個資料,但是這個資料,有多個複制的版本 在不同的DB當中(當然值是一緻)。

這個時候 分布式鎖的作用就是同步操作。用戶端1 操作 這條資料, 那就去zk立即 就create個節點 代表占用了這條資料,這時候用戶端2 并發操作這條資料 先去zk上get一下這個節點,get到的話 可以等待一下,等用戶端1 釋放掉後,去再次create一下占領資料。

7.分布式隊列

本文主要是安裝配置,分布式理論的學習還是比較好,接下來将會繼續分享實踐中的收獲。