Zookeeper 的功能,安裝使用方法,可視化工具ZooInspector

http://zookeeper.apache.org/
Apache ZooKeeper is an effort to develop and maintain an open-source server which enables highly reliable distributed coordination.html


1、zookeeper提供了什麼

一、文件系統

Zookeeper維護一個相似文件系統的數據結構:
每一個子目錄項如 zookeeper 都被稱做爲 znode,和文件系統同樣,咱們可以自由的增長、刪除znode,在一個znode下增長、刪除子znode,惟一的不一樣在於znode是能夠存儲數據的。java

znode有四種類型:
PERSISTENT:                          持久化目錄節點
PERSISTENT_SEQUENTIAL:    持久化順序編號目錄節點
EPHEMERAL:                          臨時目錄節點
EPHEMERAL_SEQUENTIAL:    臨時順序編號目錄節點node

二、通知機制 Watcher

客戶端註冊監聽它關心的目錄節點,當目錄節點發生變化(數據改變、被刪除、子目錄節點增長刪除)時,zookeeper會通知客戶端。linux

能夠註冊watcher的方法:getData、exists、getChildren。
能夠觸發watcher的方法:create、delete、setData。鏈接斷開的狀況下觸發的watcher會丟失。
一個Watcher實例是一個回調函數,被回調一次後就被移除了。若是還須要關注數據的變化,須要再次註冊watcher。
New ZooKeeper時註冊的watcher叫default watcher,它不是一次性的,只對client的鏈接狀態變化做出反應。apache


2、如何使用Zookeeper

一、單機模式部署

配置JAVA環境變量: JAVA_HOME
建立配置文件 zookeeper/conf/zoo.cfg:服務器

tickTime=2000
dataDir=/data/zookeeper
clientPort=2181

tickTime: 客戶端與服務端鏈接的心跳間隔(毫秒)。 
dataDir: 數據文件目錄。 
clientPort: 客戶端鏈接服務端的端口。數據結構

運行啓動腳本
linux:           zookeeper/bin/zkServer.sh
Windows:    zookeeper/bin/zkServer.cmd分佈式

二、集羣模式部署、僞集羣部署

配置文件 zoo.cfg:ide

tickTime=2000
dataDir=/tmp/zookeeper
clientPort=2181

initLimit=5
syncLimit=2
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890

initLimit :服務端集羣之間初始化鏈接的心跳單位。
syncLimit :服務端集羣之間同步數據的心跳單位。
server.{myid}={每一個實例ip}:{集羣交換信息的端口}:{集羣選舉Leader的端口}函數

clientPort: 每一個實例不能相同。
myid: 集羣中服務器編號,須要在dataDir目錄中建立一個myid文件,內容就是編號的值。
僞集羣模式,因爲ip地址相同,因此全部的端口不能相同。

三、經過命令行鏈接

Zookeeper/bin/zkCli.sh 或 zkCli.cmd

zkCli.sh -server [ip]:[port]

-- 查看
ls  /
-- 建立節點及數據
create  /zoo  "mydata"
-- 獲取節點數據
get  /zoo
-- 設置(修改)節點數據
set  /zoo  "newData"
-- 刪除節點
delete  /zoo

四、經過JAVA API鏈接

ZooKeeper zk = new ZooKeeper("127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183", 5000, new Watcher() {
	@Override
	public void process(WatchedEvent event) {
		System.out.println("event: " + event.getType());
	}
});

zk.create("/zoo", null, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
zk.create("/zoo/node", "nodeData".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
zk.setData("/zoo", "zooData".getBytes(), -1);

System.out.println(new String(zk.getData("/zoo", false, null)));
System.out.println(zk.getChildren("/zoo", false));

zk.delete("/zoo/node", -1);
zk.delete("/zoo", -1);

zk.close();

五、Zookeeper可視化工具ZooInspector

https://issues.apache.org/jira/secure/attachment/12436620/ZooInspector.zip

 

3、Zookeeper在中藝庫分佈式圖片處理項目中的應用

 

 

 

參考資料:
http://zookeeper.apache.org/doc/trunk/zookeeperStarted.html
https://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/
http://www.open-open.com/lib/view/open1415453633887.html

相關文章
相關標籤/搜索