1、部署前準備:html
一、下載ZooKeeper的安裝包:java
http://zookeeper.apache.org/releases.html 我下載的版本是zookeeper-3.4.9。linux
二、將下載的zookeeper-3.4.9包放到/opt目錄下,目錄結構以下圖所示:數據庫
三、在/tmp目錄下新建一個zookeeper目錄,並在zookeeper目錄下新建一個data目錄。apache
四、三臺linux系統的ip:centos
ip1:10.43.98.6api
ip2:10.43.98.8服務器
ip3:10.43.98.18oracle
五、安裝jdk8:eclipse
下載路徑:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html,我選擇的是jdk-8u112-linux-i586.tar.gz(Linux x64)。
下載下來後拷貝到/usr/java目錄下,而後:tar-zxvf jdk-8u112-linux-i586.tar.gz解壓後目錄下有一個jdk1.8.0_111文件下。而後經過vi /etc/profile命令來設置環境變量:
export JAVA_HOME=/usr/java/jdk1.8.0_111
export CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
保存後進入cd /etc目錄下,輸入source profile命令使修改生效,而後java -version命令查看jdk版本信息。
2、部署ZooKeeper集羣環境
一、首先是配置zoo.cfg文件:
將/opt/zookeeper-3.4.9/conf目錄下的zoo-sample.cfg文件名統一修改成zoo.cfg。
而後vi zoo.cfg。修改配置信息以下:
其中:
initLimit=10: 對於從節點最初鏈接到主節點時的超時時間,單位爲tick值的倍數。
syncLimit=5:對於主節點與從節點進行同步操做時的超時時間,單位爲tick值的倍數。
dataDir=/tmp/zookeeper: 用於配置內存數據庫保存的模糊快照的目錄。即剛剛建立的data文件夾就是在此目錄中。文件信息都存放在data目錄下。
clientPort=2181: 表示客戶端所鏈接的服務器所監聽的端口號,默認是2181。即zookeeper對外提供訪問的端口號。
server.1=10.43.98.6:2888:3888
server.2=10.43.98.8:2888:3888
server.3=10.43.98.18:2888:3888
二、新建myid文件:
在三個linux機器上剛剛建立的data目錄下新建一個myid文件並打開,vi myid命令。
在10.43.98.6機器上輸入1,保存退出;在10.43.98.8機器上輸入2,保存退出;在10.43.98.18機器上輸入3,保存退出。這裏的1,2,3是與server1,2,3相對應的。
三、配置環境變量:
vi etc/profile 在最後添加以下兩個。
export ZOOKEEPER_HOME=/opt/zookeeper-3.4.9
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf
保存後進入cd /etc目錄下,輸入source profile命令使修改生效。
四、啓動zookeeper:
分別在3臺機器上/opt/zookeeper-3.4.5/bin目錄下啓動;
[root@zk1 bin]# zkServer.sh start來啓動。
zkServer.sh restart (重啓)
zkServer.sh status (查看狀態)
zkServer.sh stop (關閉)
zkServer.sh start-foreground (以打印日誌方式啓動)
當對三臺機器同時 zkServer.sh start啓動時,發現都啓動成功了,可是以zkServer.sh status命令來查看啓動狀態時,發現老是在報錯,以下圖:
而後以 zkServer.sh start-foreground 打印日誌方式啓動,發現是報找不到主機的路由異常。以下圖:
報這種異常通常有三種狀況:
(1):zoo.cfg配置文件中,server.x:2888:3888配置出現錯誤;
(2):myid文件內容和server.x不對應,或者myid不在data目錄下;
(3):系統防火牆是否在啓動。
我檢查了三種緣由後發現是防火牆running。
centos7下查看防火牆狀態的命令:
firewall-cmd --state
關閉防火牆的命令:
systemctl stop firewalld.service
systemctl disable firewalld.service (禁止開機啓動,永久關閉防火牆)
而後重啓三個zookeeper服務:zkServer.sh restart,在zkServer.sh status後發現成功了。
我選擇的這臺機器是leader,其餘兩臺是follower。
到此爲止,Linux環境下ZooKeeper的集羣環境正式搭建成功了。
五、鏈接到ZooKeeper:
在命令行中輸入:zkCli.sh -server 192.168.1.30:2181(因爲本人在不一樣的辦公地點在修改該文章,因此ip地址也在變化,知道原理便可)便可鏈接到其中一臺ZooKeeper服務器。其餘自動實現同步,客戶端只須要和一臺保持鏈接便可。
成功鏈接後,系統會輸出ZooKeeper的相關配置信息和相關環境,並在屏幕上輸出Welcome to ZooKeeper!等信息。
六、建立zNode節點:
鏈接成功後,在屏幕上輸入: create /wurong wrong5566 便可在主節點上建立一個新的zNode節點。zNode節點名稱wurong ,數據wrong5566.
到eclipse上查看信息:(在eclipse上安裝了ZooKeeper的客戶端插件)參考地址:http://www.tuicool.com/articles/bQj2E3
說明zNode節點是建立且同步成功了。
在其餘的從節點中輸入get /wurong 便可獲取到該zNode節點中的詳細數據信息。
七、幾個zNode節點操做的api簡單介紹:
create /parh data 建立一個名爲/path的zNode節點,幷包含數據data
delete /path 刪除名爲/path的zNode節點
exists /path 檢查是否存在名爲/path的zNode節點
setData /path data 設置名爲/path的zNode的數據爲data
getData /path 返回名爲/path的zNode節點的數據信息
getChildren /path 返回全部/path節點的全部子節點列表
zNode節點還有不一樣的類型,持久(persistent)節點和臨時(ephemeral)節點。持久的zNode,如/path,只能經過調用delete來進行刪除,而臨時的zNode則與之相反,當建立該節點的客戶端崩潰或者關閉了與ZooKeeper服務器的鏈接時候,這個臨時zNode節點就會被刪除了。其中臨時節點可用於實現分佈式鎖。