之前部署hadoop&hbase集羣的時候使用的hbase內置的zookeeper所以一直也沒有對zookeeper進行獨立的部署,近期需要獨立部署使用,藉機也總結一篇文檔
zookeeper是一個分佈式的開源框架,能夠提供高性能的分佈式服務,應用場景涉獵:數據發佈與訂閱;軟負載均衡;命名服務;分佈式通知/協調;集羣管理和master選舉;分佈式鎖和分佈式隊列等等
有兩種運行的模式:Standalone模式和Distributed模式
Standalone模式安裝:
1.首先安裝java環境
查看當前是否存在java:
系統自帶的openjdk需要卸載,查看:
rpm -qa|grep gcj
yum -y remove java-1.5.0-gcj-1.5.0.0-29.1.el6.x86_64
yum -y remove libgcj-4.4.7-3.el6.x86_64
安裝java環境:
java版本:jdk1.7.0_17
解壓縮安裝包到/usr/local下:
tar zxvf jdk-7u17-linux-x64.tar.gz -C /usr/local
添加環境變量:
export JAVA_HOME=/usr/local/jdk1.7.0_17
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
然後source /etc/profile
查看環境變量:
2.下載並解壓縮zookeeper
官方下載地址:http://zookeeper.apache.org/releases.html#download
選擇鏡像地址並下載
選擇版本:zookeeper-3.4.5.tar.gz
3.拷貝配置文件並修改
cp zoo_sample.cfg zoo.cfg
修改dataDir 默認是:/tmp/zookeeper系統重啓後/tmp目錄會清空
修改dataDir目錄,默認端口是2181不做修改:
4.創建數據目錄:
mkdir -p /data/zookeeper/data
5.啓動zookeeper並驗證
/usr/local/zookeeper-3.4.5/bin/zkServer.sh start
查看端口的監聽情況:
Distributed模式安裝:
Distributed模式的zookeeper集羣有兩個重要的角色:分別是Leader和Follower,所以集羣中的每個節點之間需要相互的通信,在沒有內部DNS解析的前提下,需要在zookeeper集羣的每個節點上配置/etc/hosts文件,╮(╯▽╰)╭這一點和hadoop集羣是一個道理
1.首先編輯/etc/hosts文件
2.修改之前配置的standealone節點的配置:
新增:
與/etc/hosts對應的命名方式相對應
3.分發zookeeper的安裝文件到其他的節點
scp -r zookeeper-3.4.5/ root@zookeeper2:/usr/local/
同樣需要創建dataDir指定的目錄和安裝java環境
4.分別創建myid文件,用來標識當前的主機,文件內容爲數字,與zoo.cfg中server.X中的數字一致,存放的目錄爲dataDir指定的目錄
[root@zookeeper1 ~]# echo "1"> /data/zookeeper/data/myid
[root@zookeeper2 ~]# echo "2"> /data/zookeeper/data/myid
5.啓動zookeeper的集羣
[root@zookeeper1 ~]# /usr/local/zookeeper-3.4.5/bin/zkServer.sh start
[root@zookeeper2 ~]# /usr/local/zookeeper-3.4.5/bin/zkServer.sh start
在每個zookeeper的節點上分別啓動zookeeper的服務
因爲啓動的順序有先後而zookeeper啓動的時候會嘗試去連接集羣中的其他的節點,先啓動的節點在zkServer.sh同級目錄的zookeeper.out文件中有出現報錯的可能,可以忽略
6.查詢各節點的角色(驗證使用,可忽略)
當集羣中的所有的節點的服務都啓動後,我們可以觀察各個節點的角色:
注:Zookeeper採用的是Leader election的選舉算法,集羣的運行過程中,只有一個Leader,其他的都是Follower,當Leader出現宕機或者其他的問題時,會從剩下的Follower節點中重新選舉一個Leader。
命令:
/usr/local/zookeeper-3.4.5/bin/zkServer.sh status
由此可見zookeeper2是leader,不過對於客戶端,zookeeper的集羣是一個整體,可以在任何的一個節點上建立到服務集羣的連接~\(≧▽≦)/~