Zookeeper 簡介
Zookeeper是一個高效的分佈式協調服務,可以提供配置信息管理、命名、分佈式同步、集羣管理、數據庫切換等服務。它不適合用來存儲大量信息,可以用來存儲一些配置、發佈與訂閱等少量信息。Hadoop、Storm、消息中間件、RPC服務框架、分佈式數據庫同步系統,這些都是Zookeeper的應用場景。
Zookeeper集羣中節點個數一般爲奇數個(>=3),若集羣中Master掛掉,剩餘節點個數在半數以上時,就可以推舉新的主節點,繼續對外提供服務。
Zookeeper集羣搭建
- 下載zookeeper對應的tar包,上傳
- 將解壓後的文件名zookeeper-3.4.10修改爲zookeeper。tar -zxvf zookeeper-3.4.10.tar.gz -C /usr/local/
- 在三個zookeeper節點配置環境變量
- vim /etc/profile
- 添加export ZOOKEEPER_HOME=/usr/local/zookeeper
- 在path中添加$ZOOKEEPER_HOME/bin
- 執行source /etc/profile 使環境變量立即生效
- 修改zookeeper中conf目錄下的zoo_sample.cfg爲zoo.cfg
修改三個zookeeper節點中的zoo.cfg文件,修改dataDir- 在zookeeper目錄下,創建data目錄。在3個zookeeper節點中data目錄下分別創建myid文件,並分別添加內容0、1、2
- 啓動zookeeper
-
ZK常見命令
命令 | 含義 |
---|---|
ls / | 查找根目錄 |
create /test abc | 創建節點並賦值 |
get /test | 獲取指定節點的值 |
set /test cb | 設置已存在節點的值 |
rmr /test | 遞歸刪除節點 |
delete /test/test01 | 刪除不存在子節點的節點 |
ZK 的java連接API
/**
*
*/
package zookeeper;
import java.util.List;
import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooKeeper;
public class zk {
public static void main(String[] args) throws Exception {
String connectionString = "master:2181,node1:2181,node2:2181";
int sessionTimeout = 30000;
ZooKeeper zk = new ZooKeeper(connectionString,sessionTimeout,null);
zk.create("/testRoot","testRoot".getBytes(),
ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
zk.create("/testRoot/child1","child1_data".getBytes(),
ZooDefs.Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);
List<String>children=zk.getChildren("/testRoot",new Watcher() {
public void process(WatchedEvent event) {
System.out.println("this is children node event");
System.out.println(event);
}
});
System.out.println(children);
zk.delete("/testRoot", -1);
zk.delete("/testRoot/child1", -1);
zk.close();
}
}