1唧喉、安裝及配置
首先呆躲,再安裝前异逐,需要安裝并配置好JDK(選擇Oracle Java8 SE)。
其次插掂,需要下載Zookeeper安裝包灰瞻,比如本例:zookeeper-3.4.9.tar.gz(可從Apache網(wǎng)站上下載http://www.apache.org/dyn/closer.cgi/zookeeper/),建議選擇相對穩(wěn)定的版本辅甥,不要選擇最新版酝润。
然后需要對其進(jìn)行解壓,解壓的目標(biāo)目錄可以自定義璃弄,比如本例為/usr/server等:
[root@ZookeeperA server]# tar –zxvf zookeeper-3.4.9.tar.gz
打開 /etc/profile文件要销,并在文件末尾加入如下路徑信息:
export ZOOKEEPER_HOME=/usr/server/zookeeper-3.4.9
export PATH=$PATH:$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf
然后使修改生效:
[root@ZookeeperA /]# source /etc/profile
最后,需要?jiǎng)?chuàng)建兩個(gè)必備的目錄(可以在任意路徑下谢揪,本例在zookeeper的主目錄下創(chuàng)建)蕉陋,一個(gè)用于裝數(shù)據(jù),另一個(gè)用于裝日志拨扶,這兩個(gè)目錄必須創(chuàng)建凳鬓,否則將會在使用過程中報(bào)錯(cuò);
建議不要使用同一個(gè)目錄患民,目錄名建議采用data和log:
[root@ZookeeperA zookeeper-3.4.9]# mkdir data
[root@ZookeeperA zookeeper-3.4.9]# mkdir log
2缩举、配置集群
2.1、修改主機(jī)名
需要事先將每一臺服務(wù)器名稱修改成指定的主機(jī)名:
[root@localhost /]# hostname
Localhost.localdomain
本例設(shè)置主機(jī)名分別為ZookeeperA、ZookeeperB和ZookeeperC仅孩,其中針對ZookeeperA的設(shè)置如下所示:
[root@localhost /]# hostnamectl --static set-hostname ZookeeperA
[root@localhost /]# hostname
ZookeeperA
2.2托猩、配置主機(jī)
首先需要配置主機(jī)的訪問列表,在/etc/hosts文件中辽慕,將集群中的所有主機(jī)及其IP地址進(jìn)行配置及映射京腥,如下所示:
127.0.0.1? localhost localhost.localdomain localhost4 localhost4.localdomain4
::1? ? ? ? localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.70 ZookeeperA
192.168.1.71 ZookeeperB
192.168.1.72 ZookeeperC
其中黑色內(nèi)容為配置的內(nèi)容,分別配置了ZookeeperA溅蛉、ZookeeperB和ZookeeperC三臺服務(wù)器可以互訪公浪,需要分別在這三臺機(jī)器的/etc/hosts文件添加此內(nèi)容。
特別需要注意:
127.0.0.1一行一定不能做修改船侧,若做了修改(比如講本機(jī)名稱localhost進(jìn)行了映射)欠气,zookeeper啟動后將會出現(xiàn)無法連接網(wǎng)絡(luò)錯(cuò)誤;
在分布式環(huán)境中镜撩,一定要忘記本機(jī) (localhost/127.0.0.1) 的概念预柒,完全用靜態(tài)IP來設(shè)置和定義。
127.0.0.1? localhost ZookeeperA localhost4 localhost4.localdomain4
::1? ? ? ? localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.70 ZookeeperA
192.168.1.71 ZookeeperB
192.168.1.72 ZookeeperC
2.3袁梗、配置文件
需要進(jìn)入zookeeper的conf路徑下宜鸯,將已存在的一個(gè)模板文件(zoo_sample.cfg)復(fù)制成zookeeper的配置文件(zoo.cfg)
[root@ZookeeperA conf]# cp zoo_sample.cfg zoo.cfg
首先,要在zoo.cfg文件中修改數(shù)據(jù)路徑以及增加log日志路徑設(shè)置围段,如下所示:
數(shù)據(jù)路徑顾翼,用于存放myid文件等
dataDir=/usr/server/zookeeper-3.4.9/data
日志文件路徑,用于存放日志
dataLogDir=/usr/server/zookeeper-3.4.9/log
然后打開該文件并添加如下代碼:
server.70=ZookeeperA:2888:3888
server.71=ZookeeperB:2888:3888
server.72=ZookeeperC:2888:3888
本例設(shè)定僅使用三臺服務(wù)器作為zookeeper的集群奈泪,按照如下格式進(jìn)行配置:
server.id=host:port:port
其中其中host名稱和port可以自定義,參數(shù)的含義如下:
? 例子中灸芳,ZookeeperA涝桅、ZookeeperB和ZookeeperC為三臺服務(wù)器的主機(jī)名,service.70通常會配置成master主機(jī)烙样,其他的配置成slave主機(jī)冯遂。
? 其次,第一個(gè)port(2888谒获,默認(rèn)端口號蛤肌,可以自定義)是“從服務(wù)器(follower)”連接到”主服務(wù)器(leader)“的端口號,第二個(gè)port(3888批狱,默認(rèn)端口號裸准,可以自定義)是進(jìn)行l(wèi)eadership選舉的端口號
2.4、設(shè)置MYID
然后在zoo.cfg 文件中配置的dataDir參數(shù)的路徑下(此路徑可以任意修改赔硫,默認(rèn)為”/tmp/zookeeper”)炒俱,創(chuàng)建myid文件,并將與本機(jī)對應(yīng)的service.n(本例為70~72)的n寫入文件,通常service. 后面的的數(shù)字n可以取IP地址的最后一位权悟,比較好識別砸王。
[root@ZookeeperA data]# vi myid
若本機(jī)為ZookeeperA,IP設(shè)為192.168.1.70峦阁,則文件內(nèi)容如下
70
然后將本機(jī)配置和安裝內(nèi)容全部復(fù)制到其他機(jī)器中:
[root@ZookeeperA data]# scp –r zookeeper-3.4.9/ KafkaB:/usr/server/zookeeper-3.4.9
[root@ZookeeperA data]# scp –r zookeeper-3.4.9/ KafkaC:/usr/server/zookeeper-3.4.9
再分別到ZookeeperB和ZookeeperC中修改dataDir參數(shù)指定的路徑下的myid文件內(nèi)容谦铃,將與本機(jī)對應(yīng)的service.n(本例為70~72)的n寫入文件,如本機(jī)為ZookeeperB榔昔,IP設(shè)為192.168.1.71荷辕,則文件內(nèi)容如下
71
為ZookeeperC,IP設(shè)為192.168.1.72件豌,則文件內(nèi)容如下
72
也可以采用Linux中簡便寫法(文件中僅有一行):
[root@ZookeeperA data]# echo “72” > /usr/server/zookeeper-3.4.9/data/myid
2.5疮方、配置防火墻
最后,打開防火墻端口:2888茧彤、3888骡显、2181,具體開放的端口是那個(gè)曾掂,需要根據(jù)配置的服務(wù)器參數(shù):server.id=host:port:port以及zoo.cfg中clientPort參數(shù)來確定:
[root@ZookeeperA zookeeper]# firewall-cmd --permanent --zone=public --add-port=2888/tcp
[root@ZookeeperA zookeeper]# firewall-cmd --permanent --zone=public --add-port=3888/tcp
[root@ZookeeperA zookeeper]# firewall-cmd --permanent --zone=public --add-port=2181/tcp
3惫谤、啟動集群
配置完成后,需要分別在每一臺服務(wù)器上執(zhí)行啟動珠洗,首先進(jìn)入zookeeper安裝目錄下的bin目錄下溜歪,執(zhí)行zkServer啟動即可(建議,在啟動集群之前许蓖,將每臺服務(wù)器重啟動一次):
[root@ZookeeperA bin]# zkServer.sh start
ZooKeeper JMX enabled by default
Using config: /usr/server/zookeeper-3.4.9/bin/../conf/zoo.cfg
Starting zookeeper ... STARTED
然后再執(zhí)行如下命令:
[root@ZookeeperA bin]# jps
2983 QuorumPeerMain
3128 Jps
當(dāng)看你到此信息蝴猪,其中包含QuorumPeerMain(Zookeeper的進(jìn)程名)時(shí),代表當(dāng)前結(jié)點(diǎn)成功啟動膊爪;若沒有啟動自阱,可以通過如下命令,查看啟動過程出現(xiàn)的問題:
[root@ZookeeperA bin]# zkServer.sh start-foreground
此命令將會列出啟動時(shí)遇到的各種異常錯(cuò)誤等信息米酬。
可以在任意一臺主機(jī)上執(zhí)行如下命令沛豌,查看當(dāng)前主機(jī)在集群中節(jié)點(diǎn)的狀態(tài):
[root@ZookeeperB bin]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/server/zookeeper-3.4.9/bin/../conf/zoo.cfg
Mode: follower
本例顯示ZookeeperB機(jī)器處于zookeeper的follower模式。
[root@ZookeeperC bin]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/server/zookeeper-3.4.9/bin/../conf/zoo.cfg
Mode: leader
本例顯示ZookeeperC機(jī)器處于zookeeper的leader模式赃额。
4加派、客戶端訪問
配置完成后,可以使用zookeeper自帶的控制臺客戶端來查看安裝是否成功跳芳。
[root@ZookeeperB bin]# ./zkCli.sh -server ZookeeperA:2181
Connecting to ZookeeperA:2181
2016-09-14 18:03:43,829 [myid:] - INFO? [main:Environment@100] – Client
…
Welcome to ZooKeeper!
…
[zk: ZookeeperA:2181(CONNECTED) 0]
至此芍锦,已經(jīng)成功進(jìn)入了客戶端,并鏈接到了ZookeeperA服務(wù)器的2181端口筛严。
通過如下命令可以查看節(jié)點(diǎn):
[zk: ZookeeperA:21810(CONNECTED) 0] ls /
[zookeeper]
[zk: ZookeeperA:21810(CONNECTED) 1]