1.登陸zookeeper官網下載 https://zookeeper.apache.org/
zookeeper-3.4.8.tar.gz
解壓:tar -zxvf zookeeper-3.4.8.tar.gz
1.單機
進入conf文件夾 創建一個配置文件zoo.cfg。
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/zk/data
clientPort=2181
前提創建了/usr/local/zookeeper/zk/data文件夾
tickTime:Zookeeper 服務器之間或客戶端與服務器之間心跳的時間間隔。
dataDir:Zookeeper 保存數據的目錄,默認情況下,Zookeeper 將寫數據的日志文件也保存在這個目錄里。
clientPort:Zookeeper 服務器監聽端口,用來接受客戶端的訪問請求。
配置完以后,就可以啟動zookeeper服務了,進入Zookeeper/bin目錄,運行下面的命令來啟動Zookeeper服務
[root@localhost bin]# ./zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/local/software/zookeeper-3.4.8/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
默認加載conf名為 zoo.cfg文件,或者可以這樣指定文件
[root@localhost bin]# ./zkServer.sh start ../conf/zoo.cfg
ZooKeeper JMX enabled by default
Using config: ../conf/zoo.cfg
Starting zookeeper ... STARTED
查看服務狀態
./zkServer.sh status ../conf/zoo.cfg
ZooKeeper JMX enabled by default
Using config: ../conf/zoo.cfg
Mode: standalone
使用Zookeeper的客戶端來連接並測試了
$ ./zkCli.sh
或
$ ./zkCli.sh -server 127.0.0.1:2181
連接之后可以時候help來查看有哪些命令可以使用
[zk: 127.0.0.1:2181(CONNECTED) 0] ls / #查看根節點
[zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 1] create /mykey1 myvalue1 #創建一個新節點mykey1
Created /mykey1
[zk: 127.0.0.1:2181(CONNECTED) 2] create /mykey2 myvalue2 #創建一個新節點mykey2
Created /mykey2
[zk: 127.0.0.1:2181(CONNECTED) 13] ls / #查看根節點
[mykey1, mykey2, zookeeper]
[zk: 127.0.0.1:2181(CONNECTED) 23] get /mykey1 #獲取mykey1節點
myvalue1
cZxid = 0x6
ctime = Sat Sep 20 21:00:17 CST 2014
mZxid = 0x8
mtime = Sat Sep 20 21:01:06 CST 2014
pZxid = 0x6
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 0
[zk: 127.0.0.1:2181(CONNECTED) 23] get /mykey2 #獲取mykey2節點
myvalue2
cZxid = 0x6
ctime = Sat Sep 20 21:00:17 CST 2014
mZxid = 0x8
mtime = Sat Sep 20 21:01:06 CST 2014
pZxid = 0x6
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 0
[zk: 127.0.0.1:2181(CONNECTED) 24] set /mykey1 myvalue11 #獲取mykey1節點
[zk: 127.0.0.1:2181(CONNECTED) 25] set /mykey2 myvalue22 #獲取mykey2節點
[zk: 127.0.0.1:2181(CONNECTED) 26] set /mykey1 #刪除mykey1節點
[zk: 127.0.0.1:2181(CONNECTED) 27] set /mykey2 #刪除mykey2節點
2.集群
注意事項
在一台機器上部署了3個server,需要注意的是在集群為分布式模式下我們使用的每個配置文檔模擬一台機器,也就是說單台機器及上運行多個Zookeeper實例。但是,必須保證每個配置文檔的各個端口號不能沖突,除了clientPort不同之外,dataDir也不同。另外,還要在dataDir所對應的目錄中創建myid文件來指定對應的Zookeeper服務器實例。
■ clientPort端口:如果在1台機器上部署多個server,那么每台機器都要不同的 clientPort,比如 server1是2181,server2是2182,server3是2183
■ dataDir和dataLogDir:dataDir和dataLogDir也需要區分下,將數據文件和日志文件分開存放,同時每個server的這兩變量所對應的路徑都是不同的
■ server.X和myid: server.X 這個數字就是對應,data/myid中的數字。在3個server的myid文件中分別寫入了0,1,2,那么每個server中的zoo.cfg都配 server.0 server.2,server.3就行了。因為在同一台機器上,后面連着的2個端口,3個server都不要一樣,否則端口沖突
---------------------------------------------
新建3個配置文件
內容如下
zoo1.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/zk1/data
clientPort=2182
dataLogDir=/usr/local/zookeeper/zk1/logs
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389
zoo2.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/zk2/data
clientPort=2183
dataLogDir=/usr/local/zookeeper/zk2/logs
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389
zoo3.cfg
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/usr/local/zookeeper/zk3/data
clientPort=2184
dataLogDir=/usr/local/zookeeper/zk3/logs
server.1=localhost:2287:3387
server.2=localhost:2288:3388
server.3=localhost:2289:3389
每個實例都初始化相應data和log文件,例如zoo1.cfg的
啟動 zoo1.cfg ,好像成功了
[root@localhost bin]# ./zkServer.sh start ../conf/zoo1.cfg
ZooKeeper JMX enabled by default
Using config: ../conf/zoo1.cfg
Starting zookeeper ... STARTED
查看狀態發現,沒成功
[root@localhost bin]# ./zkServer.sh status ../conf/zoo1.cfg
ZooKeeper JMX enabled by default
Using config: ../conf/zoo1.cfg
Error contacting service. It is probably not running.
應該就是zoo1.cfg出錯了,原來是配置文件有錯誤,要么路徑錯,要么mypid錯了
zoo.cfg配置文件里dataDir指定的那個目錄下創建myid文件,並且指定id,改id為你zoo.cfg文件中server.1=localhost:2888:3888中的 1.只要在myid頭部寫入1即可.
vim myid
同理,為其他兩個實例是指myid
在運行完第一條指令之后,會出現一些錯誤異常,產生異常信息的原因是由於Zookeeper 服務的每個實例都擁有全局配置信息,他們在啟動的時候會隨時隨地的進行Leader選舉操作。此時,第一個啟動的Zookeeper需要和另外兩個 Zookeeper實例進行通信。但是,另外兩個Zookeeper實例還沒有啟動起來,因此就產生了這的異樣信息。我們直接將其忽略即可,待把圖中“2 號”和“3號”Zookeeper實例啟動起來之后,相應的異常信息自然會消失。此時,可以通過下面三條命令,來查詢。
[root@localhost bin]# ./zkServer.sh start ../conf/zoo1.cfg
ZooKeeper JMX enabled by default
Using config: ../conf/zoo1.cfg
Starting zookeeper ... STARTED
[root@localhost bin]# ./zkServer.sh status ../conf/zoo1.cfg
ZooKeeper JMX enabled by default
Using config: ../conf/zoo1.cfg
Error contacting service. It is probably not running.
[root@localhost bin]# ./zkServer.sh start ../conf/zoo2.cfg
ZooKeeper JMX enabled by default
Using config: ../conf/zoo2.cfg
Starting zookeeper ... STARTED
[root@localhost bin]# ./zkServer.sh status ../conf/zoo2.cfg
ZooKeeper JMX enabled by default
Using config: ../conf/zoo2.cfg
Mode: leader
[root@localhost bin]# ./zkServer.sh status ../conf/zoo1.cfg
ZooKeeper JMX enabled by default
Using config: ../conf/zoo1.cfg
Mode: follower
[root@localhost bin]# ./zkServer.sh start ../conf/zoo3.cfg
ZooKeeper JMX enabled by default
Using config: ../conf/zoo3.cfg
Starting zookeeper ... STARTED
[root@localhost bin]# ./zkServer.sh status ../conf/zoo3.cfg
ZooKeeper JMX enabled by default
Using config: ../conf/zoo3.cfg
Mode: follower
成功
一些命令
啟動
./zkServer.sh start ../conf/zoo1.cfg
停止
./zkServer.sh stop ../conf/zoo1.cfg
查看狀態
./zkServer.sh status ../conf/zoo1.cfg
啟動客戶端
./zkCli.sh -server 127.0.0.1:2181
出,fa