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 zookeeper
useradd -g zookeeper zookeeper


1. 單機模式(Standalone mode)

單機模式在開發和調試階段很有用。
1.1 下載,解壓
cd /opt ;mkdir app
cd app 
wget http://archive.apache.org/dist/zookeeper/stable/zookeeper-3.4.6.tar.gz
tar 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 zk01
192.168.10.81 zk02
192.168.10.82 zk03
ZooKeeper不存在明顯的master/slave關係,各個節點都是服務器,leader掛了,會立馬從follower中
選舉一個出來作爲leader.由於沒有主從關係,也不用配置SSH無密碼登錄了,各個zk服務器是自己啓動
的,互相之間通過TCP端口來交換數據。


2.2 修改配置文件conf/zoo.cfg
dataDir=/opt/zookeeper/data
dataLogDir=/opt/zookeeper/logs
clientPort=2181
tickTime=2000
initLimit=5
syncLimit=2
server.1=zk01:2888:3888
server.2=zk02:2888:3888
server.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/myid
echo "2" >> /opt/zookeeper/data/myid
echo "3" >> /opt/zookeeper/data/myid


2.4 啓動每臺機器
zookeeper-3.4.6/bin/zkServer.sh start
zookeeper-3.4.6/bin/zkServer.sh start
zookeeper-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 2181
Connecting to 127.0.0.1
2015-12-03 16:42:31,452 [myid:] - INFO  [main:Environment@100] - 
[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 /path
4) 設置節點值
    格式: 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 : ".


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章