ZooKeeper是一個(gè)開(kāi)源的分布式應(yīng)用程序協(xié)調(diào)服務(wù)露筒,是Google的Chubby一個(gè)開(kāi)源的實(shí)現(xiàn)胃珍。ZooKeeper為分布式應(yīng)用提供一致性服務(wù)蓝牲,提供的功能包括:分布式同步(Distributed Synchronization)傅蹂、命名服務(wù)(Naming Service)励稳、集群維護(hù)(Group Maintenance)、分布式鎖(Distributed Lock)等犬金,簡(jiǎn)化分布式應(yīng)用協(xié)調(diào)及其管理的難度念恍,提供高性能的分布式服務(wù)。
ZooKeeper本身可以以單機(jī)模式安裝運(yùn)行晚顷,不過(guò)它的長(zhǎng)處在于通過(guò)分布式ZooKeeper集群(一個(gè)Leader峰伙,多個(gè)Follower),基于一定的策略來(lái)保證ZooKeeper集群的穩(wěn)定性和可用性该默,從而實(shí)現(xiàn)分布式應(yīng)用的可靠性瞳氓。
1. 服務(wù)器環(huán)境準(zhǔn)備
我們這次環(huán)境搭建,將采用5臺(tái)主機(jī)來(lái)完成栓袖。其中兩臺(tái)主要用來(lái)做控制ZKFC(Zookeeper Failure Controller)匣摘,另外三臺(tái)作為客戶端。
主機(jī) | IP地址 | ZK | OS |
---|---|---|---|
master | 192.168.137.100 | CentOS7 | |
secondary | 192.168.137.101 | CentOS7 | |
slave1 | 192.168.137.102 | Y | CentOS7 |
slave2 | 192.168.137.103 | Y | CentOS7 |
slave3 | 192.168.137.104 | Y | CentOS7 |
1.1 關(guān)閉網(wǎng)絡(luò)防火墻
為了保證系統(tǒng)能夠正常運(yùn)行叽赊,我們先關(guān)閉網(wǎng)絡(luò)防火墻恋沃,在CentOS7下這樣完成:
sudo systemctl stop firewalld
sudo systemctl disable firewalld
1.2 關(guān)閉SELinux
SELinux也需要關(guān)閉必搞,臨時(shí)關(guān)閉采用這種:
sudo setenforce 0
永久關(guān)閉這樣操作:
vi /etc/Selinux/config
將 SELINUX=行必指,修改為
SELINUX=disabled
1.3 設(shè)置主機(jī)名
在各臺(tái)電腦上,分別編輯/etc/hostname恕洲,按照上述表格的主機(jī)名進(jìn)行設(shè)置塔橡。
sudo vi /etc/hostname
138.137.100主機(jī):
master
138.137.101主機(jī):
secondary
138.137.102主機(jī):
slave1
138.137.103主機(jī):
slave2
138.137.104主機(jī):
slave3
1.4 設(shè)置主機(jī)名稱解析
再在各臺(tái)主機(jī)上,編輯/etc/hosts文件:
sudo vi /etc/hosts
內(nèi)容是一樣的霜第,均為:
192.168.137.100 master
192.168.137.101 secondary
192.168.137.102 slave1
192.168.137.103 slave2
192.168.137.104 slave3
1.5 創(chuàng)建相應(yīng)的用戶
為了方便葛家,以后有關(guān)Hadoop、Zookeeper泌类、Hive癞谒、HBase、Spark集群的安裝刃榨,我們都將采用以下設(shè)置的賬號(hào)和密碼來(lái)進(jìn)行弹砚。
useradd -m hadoop -G hadoop -s /bin/bash
password hadoop
2. 安裝配置Zookeeper
Zookeeper的官方網(wǎng)站為: http://zookeeper.apache.org。
大家可以去官網(wǎng)看看是否有新版本更新枢希。
注意:
以下操作桌吃,將全部使用hadoop用戶來(lái)完成。執(zhí)行以下指令切換到hadoop用戶:
su - hadoop
2.1 設(shè)置工作目錄
執(zhí)行以下指令苞轿,創(chuàng)建Zookeeper的程序和數(shù)據(jù)存放目錄茅诱,并設(shè)置相應(yīng)的權(quán)限逗物。
sudo mkdir -p /opt/zookeeper
sudo mkdir -p /home/hadoop/data/zookeeper/data
sudo mkdir -p /home/hadoop/data/zookeeper/logs
sudo chown -R hadoop:hadoop /opt/zookeeper
sudo chown -R hadoop:hadoop /home/hadoop/data/zookeeper
2.2 下載
從國(guó)內(nèi)鏡像站點(diǎn)下載會(huì)快點(diǎn):
wget http://mirrors.hust.edu.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
2.3 解壓
執(zhí)行以下指令解壓后,移動(dòng)到剛才創(chuàng)建的工作目錄瑟俭。
tar zxvf zookeeper-3.4.13.tar.gz
mv zookeeper-3.4.13/* /opt/zookeeper/
2.4 配置Zookeeper
執(zhí)行以下指令編輯Zookeeper的配置文件:
cd /opt/zookeeper/conf
cp zoo_sample.cfg zoo.cfg
vi /opt/zookeeper/zoo.cfg
最后的內(nèi)容如下:
# 服務(wù)器之間或客戶端與服務(wù)器之間維持心跳的時(shí)間間隔
# tickTime以毫秒為單位翎卓。
tickTime=2000
# 集群中的follower服務(wù)器(F)與leader服務(wù)器(L)之間的初始連接心跳數(shù)
initLimit=10
# 集群中的follower服務(wù)器與leader服務(wù)器之間請(qǐng)求和應(yīng)答之間能容忍的最多心跳數(shù)
syncLimit=5
# 快照保存目錄
# 不要設(shè)置為/tmp,該目錄重新啟動(dòng)后會(huì)被自動(dòng)清除
dataDir=/home/hadoop/data/zookeeper/data
# 日志保存目錄
dataLogDir=/home/hadoop/data/zookeeper/logs
# 客戶端連接端口
clientPort=2181
# 客戶端最大連接數(shù)摆寄。
# 根據(jù)自己實(shí)際情況設(shè)置莲祸,默認(rèn)為60個(gè)
# maxClientCnxns=60
# 三個(gè)接點(diǎn)配置,格式為:
# server.服務(wù)編號(hào)=服務(wù)地址椭迎、LF通信端口锐帜、選舉端口
server.1=salve1:2888:3888
server.2=slave2:2888:3888
server.3=slave3:2888:3888
將該文件分發(fā)到各個(gè)節(jié)點(diǎn):
scp -R /opt/zookeeper/* secondary:/opt/zookeeper/
scp -R /opt/zookeeper/* slave1:/opt/zookeeper/
scp -R /opt/zookeeper/* slave2:/opt/zookeeper/
scp -R /opt/zookeeper/* slave2:/opt/zookeeper/
2.5 寫入節(jié)點(diǎn)標(biāo)記
在三個(gè)slave節(jié)點(diǎn)上,分別在/home/hadoop/data/zookeeper/data/myid寫入節(jié)點(diǎn)標(biāo)記:
slave1:
1
slave2:
2
slave3:
3
3. 啟動(dòng)Zookeeper
在slave1畜号、slave2缴阎、slave3上,分別啟動(dòng)zkServer简软。
zkServer.sh start
4. 可用性測(cè)試
4.1 節(jié)點(diǎn)狀態(tài)查看
在slave1蛮拔、slave2、slave3上痹升,分別執(zhí)行以下指令看Zookeeper是否啟動(dòng)成功建炫。
zkServer.sh status
可以看到,3個(gè)節(jié)點(diǎn)疼蛾,一個(gè)leader肛跌,其他的都是follower。
4.2 客戶端連接測(cè)試
在客戶端電腦上察郁,執(zhí)行以下指令測(cè)試連接:
# 連接服務(wù)器
[hadoop@master ~]$ zkCli.sh -server slave1:2181
# 查看目錄
[zk: slave1(CONNECTED) 0] ls /