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調用)接下來去服務器上查看數據節點,
可以看到根目錄上有dubbo節點,dubbo下有com.s2s.service.ItemService, 其節點下又有consumers和providers等。
服務提供者啟動時向/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監控中心,查看到消費者和服務提供者
2.負載均衡
3.命名服務
4.分布式通知和協調
5.集群管理與Master選舉
比如SolrCloud管理。管理集群配置,監控集群狀態,選舉分片leader
6.分布式鎖
有很多人用它做分布式鎖 但是做法比較底層。臨時節點是在一次會話內有效,保證了出現異常時,鎖能得以釋放。比如client1 做分布式操作 那他創建一個臨時節點 然后去做一些其他數據操作 做完操作后, 再去把臨時節點移除。這時c2才能去操作。如果有10個客戶端 要操作同一個數據,但是這個數據,有多個復制的版本 在不同的DB當中(當然值是一致)。 這個時候 分布式鎖的作用就是同步操作??蛻舳? 操作 這條數據, 那就去zk立即 就create個節點 代表占用了這條數據,這時候客戶端2 并發操作這條數據 先去zk上get一下這個節點,get到的話 可以等待一下,等客戶端1 釋放掉后,去再次create一下占領數據。
7.分布式隊列
本文主要是安裝配置,分布式理論的學習還是比較好,接下來將會繼續分享實踐中的收獲。
轉載于:https://www.cnblogs.com/tdws/p/8282540.html
總結
以上是生活随笔為你收集整理的Centos7 Zookeeper的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 41)子类和父类的内存关系
- 下一篇: 并发编程实战-第二章学习