分佈式協調服務:zookeeper

協調服務的功能

在分佈式架構中,每一個服務器或者服務之間信息的協調和管理是很是有必要的java

常見的分佈式協調服務有Google的Chubby,Apache的ZooKeeper
由於谷歌的Chubby是不開源的,後來雅虎模仿它開發了zookeeper,並捐贈給Apache,並將其開源供你們使用node

咱們先從zookeeper的幾個功能來了解zookeeper
1.名稱服務:什麼是名稱服務?好比DNS將域名映射到一個IP、手機通信錄將人命映射到手機號...諸如此類功能就是名稱服務,在分佈式系統中,zookeeper的名稱服務是經過名稱來跟蹤一些服務器或者服務的運行狀態linux

2.分佈式鎖:在一臺機器一個服務上,咱們能夠用高併發中學到的對象鎖,重入鎖等知識,來完成不一樣線程對同一資源的順序調度。那麼在分佈式架構下,咱們面對的問題要複雜得多,這時候不一樣進程對於同一資源的調度,就只能使用分佈式鎖來完成協調,zookeeper提供一種簡單的方式來實現分佈式互斥(distributed mutexesapache

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這個文件做爲默認配置文件jvm

啓動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下這些數據通常很小(1M如下),只是用來存儲一些必要信息

每一個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服務器的簡單介紹謝謝閱讀

相關文章
相關標籤/搜索