一、解壓zookeeperjava
二、在$ZOOKEEPER_HOME/conf下建立zoo.cfg文件(參考配置文件:zoo_sample.cfg),內容爲:node
# CS通訊心跳時間,Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每一個 tickTime 時間就會發送一個心跳。tickTime以毫秒爲單位 tickTime=2000 # LF初始化通訊時限,集羣中的follower服務器(F)與leader服務器(L)之間初始鏈接時能容忍的最多心跳數(tickTime的數量) initLimit=10 # LF同步通訊時限,集羣中的follower服務器與leader服務器之間請求和應答之間能容忍的最多心跳數(tickTime的數量)。 syncLimit=5 #數據文件目錄,Zookeeper保存數據的目錄,默認狀況下,Zookeeper將寫數據的日誌文件也保存在這個目錄裏。 dataDir=/root/app/zookeeper/data #客戶端鏈接端口,客戶端鏈接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求。 clientPort=2181 #服務器名稱與地址:集羣信息(服務器編號,服務器地址,LF通訊端口,選舉端口) #這個配置項的書寫格式比較特殊,規則以下: #server.N=YYY:A:B server.1=hadoop.master:2888:3888 server.2=hadoop.slave:2888:3888 #端口 #2181:用於客戶端的鏈接 #2888:follower與leader通訊 #3888:leader選舉端口
三、根據zoo.cfg在dataDir配置的路徑下建立myid文件,且輸入server.N的N內容(例如:當前機器是server.1,那麼在 myid中輸入1)apache
四、複製配置完畢的zookeepr到其餘節點服務器
scp -r $ZOOKEEPER_HOME root@hostname:/home
五、複製完畢以後記得修改myidapp
六、在各個節點上分別啓動腳本:ide
$ZOOKEEPER_HOME/bin/zkServer.sh start
七、檢查命令oop
7.一、#zkServer.sh status //若是出現Error contacting service. It is probably not running.錯誤,是由於節點只啓動了一個,沒法啓動集羣模式 7.二、#echo ruok | nc localhost 2181 //若是命令成功會返回imok(I'm ok)
八、zk客戶端日誌
$ZOOKEEPER_HOME/bin/zkCli.sh -server hostname:2181 //啓動一個zk客戶端 //最終要記住一個help命令便可掌握其餘命令的用法 (操做以前須要瞭解相似文件系統的znode, 簡單描述:zk中全部節點都是znode節點,znode節點不只能夠做爲目錄還能夠存儲數據.) CREATE 建立znode SET 設置znode的數據 GET 查詢znode RMR 刪除znode ...等等自行查詢
九、Java客戶端code
相關代碼:server
import org.apache.zookeeper.CreateMode; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watcher; import org.apache.zookeeper.ZooDefs.Ids; import org.apache.zookeeper.ZooKeeper; public class ZKClient { // 鏈接地址 private final static String CONN = "192.168.1.200:2181"; // client與zk超時時間(unit:ms) private final static int SESSION_TIMEOUT = 5000; public static void main(String[] args) throws Exception { //一、持久節點:建立的節點成功時,節點便會持久化在zk上 //二、臨時節點:建立節點過程當中一旦發生有意或無心的客戶端超時或者關閉,節點都被刪除 ZooKeeper zk = new ZooKeeper(CONN, SESSION_TIMEOUT, new Watcher() { @Override public void process(WatchedEvent event) { //接收zk各個時間通知 System.out.println("------------------------"); System.out.println("Path:"+event.getPath()); System.out.println("type:"+event.getType()); System.out.println("state"+event.getState()); System.out.println("wrapper:"+event.getWrapper()); System.out.println("------------------------"); } }); String path = "/hello"; byte[] data = "testhello!".getBytes(); zk.create(path,data, Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT); zk.close(); } }