一、部署前准備:
1、下載ZooKeeper的安裝包:
http://zookeeper.apache.org/releases.html 我下載的版本是zookeeper-3.4.9。
2、將下載的zookeeper-3.4.9包放到/opt目錄下,目錄結構如下圖所示:
3、在/tmp目錄下新建一個zookeeper目錄,並在zookeeper目錄下新建一個data目錄。
4、三台linux系統的ip:
ip1:10.43.98.6
ip2:10.43.98.8
ip3:10.43.98.18
5、安裝jdk8:
下載路徑: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版本信息。
二、部署ZooKeeper集群環境
1、首先是配置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
2、新建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相對應的。
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命令使修改生效。
4、啟動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的集群環境正式搭建成功了。
5、連接到ZooKeeper:
在命令行中輸入:zkCli.sh -server 192.168.1.30:2181(由於本人在不同的辦公地點在修改該文章,所以ip地址也在變化,知道原理即可)即可連接到其中一台ZooKeeper服務器。其他自動實現同步,客戶端只需要和一台保持連接即可。
成功連接后,系統會輸出ZooKeeper的相關配置信息和相關環境,並在屏幕上輸出Welcome to ZooKeeper!等信息。
6、創建zNode節點:
連接成功后,在屏幕上輸入: create /wurong wrong5566 即可在主節點上創建一個新的zNode節點。zNode節點名稱wurong ,數據wrong5566.
到eclipse上查看信息:(在eclipse上安裝了ZooKeeper的客戶端插件)參考地址:http://www.tuicool.com/articles/bQj2E3
說明zNode節點是創建且同步成功了。
在其他的從節點中輸入get /wurong 即可獲取到該zNode節點中的詳細數據信息。
7、幾個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節點就會被刪除了。其中臨時節點可用於實現分布式鎖。