摘要:協調服務的功能在分布式架構中,每個服務器或者服務之間信息的協調和管理是非常有必要的常見的分布式協調服務有的,的因為谷歌的是不開源的,后來雅虎模仿它開發了,并捐贈給,并將其開源供大家使用我們先從的幾個功能來了解名稱服務什么是名稱服務比如將域名
協調服務的功能
在分布式架構中,每個服務器或者服務之間信息的協調和管理是非常有必要的
常見的分布式協調服務有Google的Chubby,Apache的ZooKeeper
因為谷歌的Chubby是不開源的,后來雅虎模仿它開發了zookeeper,并捐贈給Apache,并將其開源供大家使用
我們先從zookeeper的幾個功能來了解zookeeper
1.名稱服務:什么是名稱服務?比如DNS將域名映射到一個IP、手機通訊錄將人命映射到手機號...諸如此類功能就是名稱服務,在分布式系統中,zookeeper的名稱服務是通過名稱來跟蹤一些服務器或者服務的運行狀態
2.分布式鎖:在一臺機器一個服務上,我們可以用高并發中學到的對象鎖,重入鎖等知識,來完成不同線程對同一資源的順序調度。那么在分布式架構下,我們面對的問題要復雜得多,這時候不同進程對于同一資源的調度,就只能使用分布式鎖來完成協調,zookeeper提供一種簡單的方式來實現分布式互斥(distributed mutexes
3.配置管理:zookeeper通過集中式存儲和管理分布式系統的配置,加入加入一個新的服務節點(znode),那么可以立即使用zookeeper的最新配置,也可以通過一個zookeeper客戶端來更改集中式配置
4.領導者選舉:當分布式系統中一個服務出現故障(比如停機),zookeeper通過領導者選舉來轉移故障,使系統繼續運行
zookeeper的安裝首先在linux上安裝zookeeper,必須保證linux上裝有jdk,因為zookeeper是在jvm上運行的
下載地址:http://www.apache.org/dist/zo...
使用wget下載后,
打開解壓文件夾,進入到conf文件下,拷貝zoo_sample.cfg副本,命名為zoo.cfg
此步驟的原因是:Zookeeper 在啟動時會找zoo.cfg這個文件作為默認配置文件
啟動zookeeper(在解壓根目錄下輸入):./bin/zkServer.sh start(關閉stop)
當然為了方便,在etc/profile下添加:
export ZOOKEEPER_HOME=/zookeeper export PATH=$PATH:$ZOOKEEPER_HOME/bin
這樣便可直接使用zkServer.sh start啟動
zookeeper的UI模型zookeeper的數據模型是由zondes構成的,你可以把zookeeper的數據模型看成是操作系統中的目錄結構,每個目錄的文件夾名就是一個zonde,在每個文件夾(znode)下都有一些存儲數據,類似于目錄下的文件,但是在zookeeper下這些數據一般很?。?M以下),只是用來存儲一些必要信息
每個zookeeper服務器下都存儲了znodes,這也遵循了分布式的原則,因為zookeeper本身也是一個分布式應用,此外每個zookeeper服務器都維護了一個事務日志(記錄的是所有的請求)
zk客戶端與zk服務器的交互在啟動一個zk服務器的時候,我們先來看下它的配置
默認啟動的配置文件在zookeeper/conf/下:
tickTime=2000 initLimit=10 syncLimit=5 dataDir=/tmp/zookeeper/data dataLogDir=/tmp/zookeeper/log clientPort=2181 #端口2888由對等的zookeeper服務器使用,用于互相通信 #端口3888用于領導者選舉 server.1=106.15.205.155:2888:3888
clientPort是給客戶端連接用的端口
dataDir是節點數據存儲的目錄
dataLogDir是日志輸出的目錄,不指定的話默認在dataDir下
在/tmp/zookeeper/data目錄下新建一個文件myid,并存入一個值為1
它對應zoo.cfg中的server.1
在server.1=106.15.205.155:2888:3888這行代碼中
106.15.205.155是Ip(寫自己的)
2888是領導者選舉端口
3888是zookeeper服務器間的通信端口
打開zookeeper服務器(關閉為stop):
zkServer.sh start
打印出以下日志說明zookeeper啟動成功:
ZooKeeper JMX enabled by default Using config: /zookeeper/bin/../conf/zoo.cfg Starting zookeeper ... STARTED
啟動zk客戶端:
zkCli.sh
成功連接之后,便可以對zkServer進行節點操作
1.增加節點并且給予success數據:
create /znode1 success
2.查看該zk服務器znode明細:
ls /
3.查看指定節點詳情:
get znode1
4.設置節點(比如修改數據:sunnces變為error)
set /znode1 error
5.關閉zkCli:
close
6.刪除節點
delete /znode1
同樣可以使用java代碼來實現對zookeeper服務器的操作
但是很多框架已經封裝了操作類
如果想要自己實現,推薦使用nio的模型來操作
可以去看下Doug Lea的PPT:Scalable io in java
我們監聽的是zookeeper/bin下zookeeper.out日志
因為我們已經配置了系統環境變量,所以直接在根目錄下啟動:
tail -f zookeeper.out
以上便是zookeeper服務器的簡單介紹
謝謝閱讀
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/35903.html
摘要:的設計目標是將那些復雜且容易出錯的分布式一致性服務封裝起來,構成一個高效可靠的原語集,并以一系列簡單易用的接口提供給用戶使用。具有不可分割性即原語的執行必須是連續的,在執行過程中不允許被中斷。 該文已加入開源文檔:JavaGuide(一份涵蓋大部分Java程序員所需要掌握的核心知識)。地址:https://github.com/Snailclimb... showImg(https:...
摘要:當已經超過個心跳的時間也就是長度后服務器還沒有收到客戶端的返回信息那么表明這個客戶端連接失敗。 基礎篇 1、zookeeper是什么 Zookeeper,一種分布式應用的協作服務,是Google的Chubby一個開源的實現,是Hadoop的分布式協調服務,它包含一個簡單的原語集,應用于分布式應用的協作服務,使得分布式應用可以基于這些接口實現諸如同步、配置維護和分集群或者命名的服務。...
摘要:好吧,就是給指定的結點里面稱之為提供了統一的名稱。分布式鎖服務這個特性是最吸引我的特性了,如何實現分布式鎖呢,就是使用提供的有序且臨時的特性實現。當然詳細的可以參照分布式鎖避免羊群效應這篇文章,同時寫了如何避免羊群效應。 最近想學東西,于是就又拿起前段時間因為沒時間而落下的zookeeper啃了起來,第一次啃完教程發現什么都不明白,第二次啃完發現,這東西,就這么簡單的東西啊? 先來摘...
摘要:所以,雅虎的開發人員就試圖開發一個通用的無單點問題的分布式協調框架,以便讓開發人員將精力集中在處理業務邏輯上。在立項初期,考慮到之前內部很多項目都是使用動物的名字來命名的例如著名的項目雅虎的工程師希望給這個項目也取一個動物的名字。 前言 提到ZooKeeper,相信大家都不會陌生。Dubbo,Kafka,Hadoop等等項目里都能看到它的影子。但是你真的了解 ZooKeeper 嗎?如...
閱讀 2830·2021-11-22 15:11
閱讀 3550·2021-09-28 09:43
閱讀 2896·2019-08-30 13:05
閱讀 3438·2019-08-30 11:18
閱讀 1454·2019-08-29 16:34
閱讀 1311·2019-08-29 13:53
閱讀 2916·2019-08-29 11:03
閱讀 1668·2019-08-29 10:57