Zookeeper該怎樣入門,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
嘉善ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
官方文檔上這么解釋zookeeper,它是一個分布式服務框架,是Apache Hadoop 的一個子項目,它主要是用來解決分布式應用中經(jīng)常遇到的一些數(shù)據(jù)管理問題,如:統(tǒng)一命名服務、狀態(tài)同步服務、集群管理、分布式應用配置項的管理等。
上面的解釋有點抽象,簡單來說zookeeper=文件系統(tǒng)+監(jiān)聽通知機制。
1、 文件系統(tǒng)
Zookeeper維護一個類似文件系統(tǒng)的數(shù)據(jù)結(jié)構(gòu):
每個子目錄項如 NameService 都被稱作為 znode(目錄節(jié)點),和文件系統(tǒng)一樣,我們能夠自由的增加、刪除znode,在一個znode下增加、刪除子znode,唯一的不同在于znode是可以存儲數(shù)據(jù)的。
有四種類型的znode:
使用客戶端命令操作zookeeper
1、使用 ls 命令來查看當前 ZooKeeper 中所包含的內(nèi)容
2、創(chuàng)建一個新的 znode ,使用 create /zkPro myData
3、再次使用 ls 命令來查看現(xiàn)在 zookeeper 中所包含的內(nèi)容:
4、下面我們運行 get 命令來確認第二步中所創(chuàng)建的 znode 是否包含我們所創(chuàng)建的字符串:
5、下面我們通過 set 命令來對 zk 所關(guān)聯(lián)的字符串進行設(shè)置:
6、下面我們將剛才創(chuàng)建的 znode 刪除
使用Java API操作zookeeper需要引用下面的包
下面我們來實現(xiàn)上面說的分布式配置中心:
1、在zookeeper里增加一個目錄節(jié)點,并且把配置信息存儲在里面
2、啟動兩個zookeeper客戶端程序,代碼如下所示
import java.util.concurrent.CountDownLatch;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.Watcher.Event.EventType;
import org.apache.zookeeper.Watcher.Event.KeeperState;
import org.apache.zookeeper.ZooKeeper;
import org.apache.zookeeper.data.Stat;
public class ZooKeeperProSync implements Watcher {
private static CountDownLatch connectedSemaphore = new CountDownLatch(1);
private static ZooKeeper zk = null;
private static Stat stat = new Stat();
public static void main(String[] args) throws Exception {
//zookeeper配置數(shù)據(jù)存放路徑
String path = "/username";
//連接zookeeper并且注冊一個默認的監(jiān)聽器
zk = new ZooKeeper("192.168.31.100:2181", 5000, //
new ZooKeeperProSync());
//等待zk連接成功的通知
connectedSemaphore.await();
//獲取path目錄節(jié)點的配置數(shù)據(jù),并注冊默認的監(jiān)聽器
System.out.println(new String(zk.getData(path, true, stat)));
Thread.sleep(Integer.MAX_VALUE);
}
public void process(WatchedEvent event) {
if (KeeperState.SyncConnected == event.getState()) { //zk連接成功通知事件
if (EventType.None == event.getType() && null == event.getPath()) {
connectedSemaphore.countDown();
} else if (event.getType() == EventType.NodeDataChanged) { //zk目錄節(jié)點數(shù)據(jù)變化通知事件
try {
System.out.println("配置已修改,新值為:" + new String(zk.getData(event.getPath(), true, stat)));
} catch (Exception e) {
}
}
}
}
}
兩個程序啟動后都正確的讀取到了zookeeper的/username目錄節(jié)點下的數(shù)據(jù)'qingfeng'
3、我們在zookeeper里修改下目錄節(jié)點/username下的數(shù)據(jù)
修改完成后,我們看見兩個程序后臺都及時收到了他們監(jiān)聽的目錄節(jié)點數(shù)據(jù)變更后的值,如下所示
本例搭建的是偽集群模式,即一臺機器上啟動三個zookeeper實例組成集群,真正的集群模式無非就是實例IP地址不同,搭建方法沒有區(qū)別
Step1:配置JAVA環(huán)境,檢驗環(huán)境:java -version
Step2:下載并解壓zookeeper
# cd /usr/local# wget http://mirror.bit.edu.cn/apache/zookeeper/stable/zookeeper-3.4.12.tar.gz# tar -zxvf zookeeper-3.4.12.tar.gz# cd zookeeper-3.4.12
Step3:重命名 zoo_sample.cfg文件
# cp conf/zoo_sample.cfg conf/zoo-1.cfg
Step4:修改配置文件zoo-1.cfg,原配置文件里有的,修改成下面的值,沒有的則加上
# vim conf/zoo-1.cfgdataDir=/tmp/zookeeper-1clientPort=2181server.1=127.0.0.1:2888:3888server.2=127.0.0.1:2889:3889server.3=127.0.0.1:2890:3890
配置說明
tickTime:這個時間是作為 Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發(fā)送一個心跳。
initLimit:這個配置項是用來配置 Zookeeper 接受客戶端(這里所說的客戶端不是用戶連接 Zookeeper 服務器的客戶端,而是 Zookeeper 服務器集群中連接到 Leader 的 Follower 服務器)初始化連接時最長能忍受多少個心跳時間間隔數(shù)。當已經(jīng)超過 10個心跳的時間(也就是 tickTime)長度后 Zookeeper 服務器還沒有收到客戶端的返回信息,那么表明這個客戶端連接失敗??偟臅r間長度就是 10*2000=20 秒
syncLimit:這個配置項標識 Leader 與 Follower 之間發(fā)送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,總的時間長度就是 5*2000=10秒
dataDir:顧名思義就是 Zookeeper 保存數(shù)據(jù)的目錄,默認情況下,Zookeeper 將寫數(shù)據(jù)的日志文件也保存在這個目錄里。
clientPort:這個端口就是客戶端連接 Zookeeper 服務器的端口,Zookeeper 會監(jiān)聽這個端口,接受客戶端的訪問請求。
server.A=B:C:D:其中 A 是一個數(shù)字,表示這個是第幾號服務器;B 是這個服務器的 ip 地址;C 表示的是這個服務器與集群中的 Leader 服務器交換信息的端口;D 表示的是萬一集群中的 Leader 服務器掛了,需要一個端口來重新進行選舉,選出一個新的 Leader,而這個端口就是用來執(zhí)行選舉時服務器相互通信的端口。如果是偽集群的配置方式,由于 B 都是一樣,所以不同的 Zookeeper 實例通信端口號不能一樣,所以要給它們分配不同的端口號。
Step4:再從zoo-1.cfg復制兩個配置文件zoo-2.cfg和zoo-3.cfg,只需修改dataDir和clientPort不同即可
# cp conf/zoo-1.cfg conf/zoo-2.cfg# cp conf/zoo-1.cfg conf/zoo-3.cfg# vim conf/zoo-2.cfgdataDir=/tmp/zookeeper-2clientPort=2182# vim conf/zoo-2.cfgdataDir=/tmp/zookeeper-3clientPort=2183
Step5:標識Server ID
創(chuàng)建三個文件夾/tmp/zookeeper-1,/tmp/zookeeper-2,/tmp/zookeeper-2,在每個目錄中創(chuàng)建文件myid 文件,寫入當前實例的server id,即1.2.3
# cd /tmp/zookeeper-1# vim myid1# cd /tmp/zookeeper-2# vim myid2# cd /tmp/zookeeper-3# vim myid3
Step6:啟動三個zookeeper實例
# bin/zkServer.sh start conf/zoo-1.cfg# bin/zkServer.sh start conf/zoo-2.cfg# bin/zkServer.sh start conf/zoo-3.cfg
Step7:檢測集群狀態(tài),也可以直接用命令“zkCli.sh -server IP:PORT”連接zookeeper服務端檢測
看完上述內(nèi)容,你們掌握Zookeeper該怎樣入門的方法了嗎?如果還想學到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
當前標題:Zookeeper該怎樣入門
標題路徑:http://chinadenli.net/article6/gjeoog.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計公司、網(wǎng)站收錄、移動網(wǎng)站建設(shè)、建站公司、商城網(wǎng)站、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)