標籤:centos zookeeper install
環境:CentOS 6.7, java version "1.7.0_51, ZooKeeper 3.4.6
環境:CentOS 6.7, jdk 1.7.0_51, ZooKeeper 3.4.6
(可選)建立新使用者
一般我傾向於把需要啟動daemon進程,對外提供服務的程式,即伺服器類的程式,安裝在單獨的使用者下面。這樣可以做到隔離,營運方面,安全性也提高了。
建立一個新的group,
groupadd zookeeperuseradd -g zookeeper zookeeper
1. 單機模式(Standalone mode)單機模式在開發和調試階段很有用。1.1 下載,解壓cd /opt ;mkdir appcd app wget http://archive.apache.org/dist/zookeeper/stable/zookeeper-3.4.6.tar.gztar zxf zookeeper-3.4.6.tar.gz
1.2 啟動預設就是單機模式,$ mv conf/zoo_sample.cfg conf/zoo.cfg$ ./bin/zkServer.sh start
1.3 使用java 用戶端串連ZooKeeper$ ./bin/zkCli.sh -server 127.0.0.1:2181然後就可以使用各種命令了,跟檔案操作命令很類似,輸入help可以看到所有命令。
1.4 關閉$ ./bin/zdServer.sh stop
2. 分布式模式(Replicated mode)在生產環境中,要配置成分布式模式,才能發揮威力。ZooKeeper叢集一般被稱為ZooKeeper ensemble,或者 quorum.
2.1 準備3台機器假設有三台機器,hostname和ip對應關係是:192.168.10.80 zk01192.168.10.81 zk02192.168.10.82 zk03ZooKeeper不存在明顯的master/slave關係,各個節點都是伺服器,leader掛了,會立馬從follower中選舉一個出來作為leader.由於沒有主從關係,也不用配置SSH無密碼登入了,各個zk伺服器是自己啟動的,互相之間通過TCP連接埠來交換資料。
2.2 修改設定檔conf/zoo.cfgdataDir=/opt/zookeeper/datadataLogDir=/opt/zookeeper/logsclientPort=2181tickTime=2000initLimit=5syncLimit=2server.1=zk01:2888:3888server.2=zk02:2888:3888server.3=zk03:2888:3888
註: dataDir:資料目錄 dataLogDir:日誌目錄 clientPort:用戶端串連連接埠 tickTime:Zookeeper 伺服器之間或用戶端與伺服器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。 initLimit:Zookeeper的Leader 接受用戶端(Follower)初始化串連時最長能忍受多少個心跳時間間隔數。當已經超過 5個心跳的 時間(也就是tickTime)長度後 Zookeeper 伺服器還沒有收到用戶端的返回資訊,那麼表明這個 用戶端串連失敗。總的時間長度就是 5*2000=10 秒 syncLimit:表示 Leader 與 Follower 之間發送訊息時請求和應答時間長度,最長不能超過多少 個tickTime 的時間長度,總的時間長度就是 2*2000=4 秒。 server.A=B:C:D:其中A 是一個數字,表示這個是第幾號伺服器;B 是這個伺服器的 ip 地址; C 表示的是這個伺服器與叢集中的 Leader 伺服器交換資訊的連接埠;D 表示的是萬一叢集中的 Leader 伺服器掛了,需要一個連接埠來重新進行選舉,選出一個新的 Leader,而這個連接埠就是用來 執行選舉時伺服器相互連信的連接埠。如果是偽叢集的配置方式,由於 B 都是一樣,所以不同的 Zookeeper 執行個體通訊連接埠號不能一樣,所以要給它們分配不同的連接埠號碼。
2.3 myid檔案要在每台機器的dataDir下,建立一個myid檔案,裡面存放一個數字,用來標識當前主機。echo "1" >> /opt/zookeeper/data/myidecho "2" >> /opt/zookeeper/data/myidecho "3" >> /opt/zookeeper/data/myid
2.4 啟動每台機器zookeeper-3.4.6/bin/zkServer.sh startzookeeper-3.4.6/bin/zkServer.sh startzookeeper-3.4.6/bin/zkServer.sh start
2.5 查看狀態zookeeper-3.4.6/bin/zkServer.sh status
3.使用java用戶端串連ZooKeeper叢集./bin/zkCli.sh -server zk01:2181./bin/zkCli.sh -server zk01:2181./bin/zkCli.sh -server zk01:2181
./zkCli.sh -server 127.0.0.1 2181Connecting to 127.0.0.12015-12-03 16:42:31,452 [myid:] - INFO [main:[email protected]] - [zk: 127.0.0.1:2181(CONNECTED) 0] ls / 顯示當前資料[test1, zookeeper]
1) 建立節點 格式:create [-s] [-e] path data acl 其中"-s"表示建立一個"有序"節點,"-e"表示建立一個臨時節點.預設為持久性節點 ->create -s /test null ->create /test null 如下為包括ACL的例子: ->create -s /test null digest:test:Kk3Nr5X06NH+XdlGMyOrULgK/mo=:rwcda 建立一個path為"/test"的節點,值為"null",ACL授權方式為"digest",其中授權的使用者名稱:密碼為"test:Kk3Nr5X06NH+XdlGMyOrULgK/mo=",ACL的許可權列表為"r""w""c""d""a". "digest"授權方式表示client方位此節點資料,需要指定使用者名稱和密碼,可以參考zookeeper中DigestAuthenticationProvider.generateDigest(String ipName)方法;通過向此方法指定原始的使用者名稱和密碼即可獲得"digest"之後的字串,比如傳入"test:test",將會得到"test:V28q/NynI4JI3Rk54h0r8O5kMug=",其內部原理是將"密碼"部分進行MD5 + sha1操作.再zkCli.sh指令上你需要傳遞digest之後的字串. 其中ACL的授權方式有很多種,你可以在ZooDefs類中找到更多的資訊. 最後一個參數為許可權列表,r表示"read",w表示"write",c表示"create",d表示"delete",a表示"admin" 2) 擷取節點資料 格式:get path -> get /test -e cZxid = 0x5b ctime = Mon Sep 16 14:14:06 CST 2013 mZxid = 0x5b mtime = Mon Sep 16 14:14:06 CST 2013 pZxid = 0x67 cversion = 7 dataVersion = 0 aclVersion = 0 ephemeralOwner = 0x0 dataLength = 2 numChildren = 5 你可以從結果清單中,獲得所有的節點資訊. 3) 查看子節點列表 指令: ls /path4) 設定節點值 格式: set path data [version] -> set /test 1313131 -1 其中值需要為字串,版本號碼可以通過2)中的指令擷取,如果版本號碼為"-1"表示更新時忽略版本校正. 5) 刪除所有節點 格式: rmr path -> rmr /test 將會刪除"/test"以及其下的所有子節點. 6) 設定ACL 格式: setAcl path acl -> setAcl /test digest:test:Kk3Nr5X06NH+XdlGMyOrULgK/mo=:rwcda 和create指令非常相似. 7) 刪除節點 格式: delete path [version] -> delete /test -1 需要注意的是,如果此path下還有子節點,將導致刪除失敗.這是和"rmr"指令的區別. 8) 添加授權資訊 格式: addauth schema auth -> addauth digest test:test 只有授權之後,才能夠訪問那些具有ACL控制的節點資料.注意"auth"資訊為原始的使用者名稱和密碼,而不是經過DigestAuthenticationProvider簽名之後的. 如果使用了錯誤的授權資訊,可能導致"Authentication is not valid : ".
本文出自 “Miles Away” 部落格,謝絕轉載!
CentOS ZooKeeper install