===> Zookeeper 是什么?
我們一直強(qiáng)調(diào)成都網(wǎng)站設(shè)計(jì)、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司對(duì)于企業(yè)的重要性,如果您也覺得重要,那么就需要我們慎重對(duì)待,選擇一個(gè)安全靠譜的網(wǎng)站建設(shè)公司,企業(yè)網(wǎng)站我們建議是要么不做,要么就做好,讓網(wǎng)站能真正成為企業(yè)發(fā)展過程中的有力推手。專業(yè)網(wǎng)站制作公司不一定是大公司,創(chuàng)新互聯(lián)作為專業(yè)的網(wǎng)絡(luò)公司選擇我們就是放心。
=> ZooKeeper是一個(gè)分布式的,開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的Chubby一個(gè)開源的實(shí)現(xiàn),是Hadoop和Hbase的重要組件。
=> ZooKeeper包含一個(gè)簡(jiǎn)單的原語(yǔ)集,提供Java和C的接口。
=> ZooKeeper代碼版本中,提供了分布式獨(dú)享鎖、選舉、隊(duì)列的接口,代碼在zookeeper-3.4.3\src\recipes。其中分布鎖和隊(duì)列有Java和C兩個(gè)版本,選舉只有Java版本
===> Zookeeper應(yīng)用場(chǎng)景(功能):
=> 它是一個(gè)為分布式應(yīng)用提供一致性服務(wù)的軟件,提供的功能包括:
配置維護(hù)、域名服務(wù)、分布式同步、組服務(wù)等。
=> ZooKeeper的目標(biāo)就是封裝好復(fù)雜易出錯(cuò)的關(guān)鍵服務(wù),將簡(jiǎn)單易用的接口和性能高效、功能穩(wěn)定的系統(tǒng)提供給用戶。
===> Zookeeper體系結(jié)構(gòu)
===> Zookeeper 工作原理:
=> Zookeeper 的核心是原子廣播,這個(gè)機(jī)制保證了各個(gè)Server之間的同步。實(shí)現(xiàn)這個(gè)機(jī)制的協(xié)議叫做Zab協(xié)議。
=> Zab協(xié)議有兩種模式: 恢復(fù)模式(選主)和廣播模式(同步)。
當(dāng)服務(wù)啟動(dòng)或者在領(lǐng)導(dǎo)者崩潰后,Zab就進(jìn)入了恢復(fù)模式,當(dāng)領(lǐng)導(dǎo)者被選舉出來,且大多數(shù)Server完成了和 leader的狀態(tài)同步以后,恢復(fù)模式就結(jié)束了。
(★)狀態(tài)同步保證了leader和Server具有相同的系統(tǒng)狀態(tài)。
=> 為了保證事務(wù)的順序一致性,zookeeper采用了遞增的事務(wù)id號(hào)(zxid)來標(biāo)識(shí)事務(wù)。所有的提議(proposal)都在被提出的時(shí)候加上了zxid。
實(shí)現(xiàn)中zxid是一個(gè)64位的數(shù)字,它高32位是epoch用來標(biāo)識(shí)leader關(guān)系是否改變,每次一個(gè)leader被選出來,它都會(huì)有一個(gè)新的epoch,標(biāo)識(shí)當(dāng)前屬于那個(gè)leader的統(tǒng)治時(shí)期。
低32位用于遞增計(jì)數(shù)。
(★)對(duì)于客戶端來說,ZooKeeper是一個(gè)整體(ensemble),連接到ZooKeeper集群實(shí)際上感覺在獨(dú)享整個(gè)集群的服務(wù),so,你可以在任何一個(gè)結(jié)點(diǎn)上建立到服務(wù)集群的連接
===> Zookeeper 安裝
=>搭建ZooKeeper的集群環(huán)境
1、三臺(tái):bigdata12 bigdata13 bigdata14
時(shí)間同步
2、在bigdata12上進(jìn)行安裝
(*) 解壓 tar -zxvf zookeeper-3.4.10.tar.gz -C ~/training/
(*) 設(shè)置環(huán)境變量:每臺(tái)機(jī)器上
ZOOKEEPER_HOME=/root/training/zookeeper-3.4.10
export ZOOKEEPER_HOME
PATH=$ZOOKEEPER_HOME/bin:$PATH
export PATH
(*)核心的配置文件: conf/zoo.cfg
mkdir /root/training/zookeeper-3.4.10/tmp
編輯 zoo.cfg
dataDir=/root/training/zookeeper-3.4.10/tmp
server.1=bigdata12:2888:3888
server.2=bigdata13:2888:3888
server.3=bigdata14:2888:3888
在/root/training/zookeeper-3.4.10/tmp目錄創(chuàng)建文件: myid
輸入 1
3、把bigdata12的ZK復(fù)制到其他的節(jié)點(diǎn)
scp -r zookeeper-3.4.10/ root@bigdata13:/root/training
scp -r zookeeper-3.4.10/ root@bigdata14:/root/training
4、修改bigdata13和bigdata14上的myid文件
5、在每臺(tái)機(jī)器上,啟動(dòng)ZK: zkServer.sh start
===> 配置文件
=> zookeeper-3.3.3/conf文件夾下面(可以把默認(rèn)的zoosample.cfg復(fù)制一份到zoo.cfg),配置文件zoo.cfg需要在每臺(tái)服務(wù)器中都要編寫,以下是一個(gè)配置文件的樣本:
# Filename zoo.cfg
tickTime=2000
dataDir=/home/zookeeper/data
clientPort=2181
initLimit=5
syncLimit=2
server.1=202.115.36.251:2888:3888
server.2=202.115.36.241:2888:3888
server.3=202.115.36.242:2888:3888
initLimit:這個(gè)配置項(xiàng)是用來配置 Zookeeper 接受客戶端(這里所說的客戶端不是用戶連接 Zookeeper 服務(wù)器的客戶端,而是 Zookeeper 服務(wù)器集群中連接到 Leader 的 Follower 服務(wù)器)初始化連接時(shí)最長(zhǎng)能忍受多少個(gè)心跳時(shí)間間隔數(shù)。當(dāng)已經(jīng)超過 10 個(gè)心跳的時(shí)間(也就是 tickTime)長(zhǎng)度后 Zookeeper 服務(wù)器還沒有收到客戶端的返回信息,
那么表明這個(gè)客戶端連接失敗??偟臅r(shí)間長(zhǎng)度就是 5*2000=10 秒。
syncLimit:這個(gè)配置項(xiàng)標(biāo)識(shí) Leader 與 Follower 之間發(fā)送消息,請(qǐng)求和應(yīng)答時(shí)間長(zhǎng)度,最長(zhǎng)不能超過多少個(gè) tickTime 的時(shí)間長(zhǎng)度,總的時(shí)間長(zhǎng)度就是 2*2000=4 秒
server.A=B:C:D
A是一個(gè)數(shù)字,表示這個(gè)是第幾號(hào)服務(wù)器;
B是這個(gè)服務(wù)器的 ip 地址;
C表示的是這個(gè)服務(wù)器與集群中的 Leader 服務(wù)器交換信息的端口;
D表示的是萬(wàn)一集群中的 Leader 服務(wù)器掛了,需要一個(gè)端口來重新進(jìn)行選舉,選出一個(gè)新的 Leader,而這個(gè)端口就是用來執(zhí)行選舉時(shí)服務(wù)器相互通信的端口。
如果是偽集群的配置方式,由于 B 都是一樣,所以不同的 Zookeeper 實(shí)例通信端口號(hào)不能一樣,所以要給它們分配不同的端口號(hào)。
=> 創(chuàng)建myid文件
除了修改 zoo.cfg 配置文件,集群模式下還要配置一個(gè)文件 myid,這個(gè)文件在 dataDir 目錄下,這個(gè)文件里面就只有一個(gè)數(shù)據(jù)就是 A 的值,Zookeeper 啟動(dòng)時(shí)會(huì)讀取這個(gè)文
件,拿到里面的數(shù)據(jù)與 zoo.cfg 里面的配置信息比較從而判斷到底是那個(gè) server。這個(gè)myid的值要和配置文件中的server.x=ip:port:port中的x一致。
echo 1 > myid
===> Zookeeper 操作
=> 查看zookeeper 的狀態(tài): zkServer.sh status
=> 通過 zookeeper 客戶端連接:
zkCli.sh -server 192.168.10.221:2181
=> 查看znode節(jié)點(diǎn):
ls /
=> 創(chuàng)建znode節(jié)點(diǎn)(數(shù)據(jù)):
create /test "hello"
=> 獲取znode節(jié)點(diǎn)數(shù)據(jù):
get /test
=> 修改znode節(jié)點(diǎn)數(shù)據(jù):
set /test "word"
=> 刪除znode 節(jié)點(diǎn):
delete /test
===> 清除zk狀態(tài)
當(dāng)在zk上已經(jīng)做了很多事情,配置已經(jīng)比較雜亂,現(xiàn)在想重新初始化一下,也就是把所有狀態(tài)刪除,步驟是:
=> 關(guān)閉所有zk節(jié)點(diǎn),用zkServer.sh status查看是否關(guān)閉
=> 刪除zoo.cfg定義的數(shù)據(jù)文件夾下的所有文件,除了myid文件外
=> 啟動(dòng)zk節(jié)點(diǎn)
現(xiàn)在配置就重置了
===> 常見問題
在用zkCli.sh啟動(dòng)客戶端時(shí),Will not attempt to authenticate using SASL (無法定位登錄配置)
這是由于沒有啟用用戶驗(yàn)證導(dǎo)致的,不影響使用,但影響安全性。SASL 即:Simple Authentication and Security Layer
文章標(biāo)題:zookeeper的安裝配置及簡(jiǎn)單使用
文章來源:http://aaarwkj.com/article10/igijgo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、網(wǎng)站制作、Google、定制網(wǎng)站、電子商務(wù)、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)