亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

zookeeper 入門講解實例 轉

2019-11-14 09:54:08
字體:
來源:轉載
供稿:網友

轉 http://blackPRoof.VEvb.com/blog/2039040 zookeeper使用和原理探究(一) zookeeper介紹 zookeeper是一個為分布式應用提供一致性服務的軟件,它是開源的Hadoop項目中的一個子項目,并且根據google發表的論文來實現的,接下來我們首先來安裝使用下這個軟件,然后再來探索下其中比較重要一致性算法。

zookeeper安裝和使用 zookeeper的安裝基本上可以按照 http://hadoop.apache.org/zookeeper/docs/current/ zookeeperStarted.html 這個頁面上的步驟完成安裝,這里主要介紹下部署一個集群的步驟,因為這個官方頁面似乎講得并不是非常詳細(Running Replicated Zookeeper)。

由于手頭機器不足,所以在一臺機器上部署了3個server,如果你手頭也比較緊,也可以這么做。那么我建了3個文件夾,如下 server1 server2 server3

然后每個文件夾里面解壓一個zookeeper的下載包,并且還建了幾個文件夾,總體結構如下,最后那個是下載過來壓縮包的解壓文件 data dataLog logs zookeeper-3.3.2

那么首先進入data目錄,創建一個myid的文件,里面寫入一個數字,比如我這個是server1,那么就寫一個1,server2對應myid文件就寫入2,server3對應myid文件就寫個3

然后進入zookeeper-3.3.2/conf目錄,那么如果是剛下過來,會有3個文件,configuration.xml, log4j.properties,zoo_sample.cfg,這3個文件我們首先要做的就是在這個目錄創建一個zoo.cfg的配置文件,當然你可以把zoo_sample.cfg文件改成zoo.cfg,配置的內容如下所示: tickTime=2000 initLimit=5 syncLimit=2 dataDir=xxxx/zookeeper/server1/data dataLogDir=xxx/zookeeper/server1/dataLog clientPort=2181 server.1=127.0.0.1:2888:3888 server.2=127.0.0.1:2889:3889 server.3=127.0.0.1:2890:3890

標紅的幾個配置應該官網講得很清楚了,只是需要注意的是clientPort這個端口如果你是在1臺機器上部署多個server,那么每臺機器都要不同的clientPort,比如我server1是2181,server2是2182,server3是2183,dataDir和dataLogDir也需要區分下。

最后幾行唯一需要注意的地方就是 server.X 這個數字就是對應 data/myid中的數字。你在3個server的myid文件中分別寫入了1,2,3,那么每個server中的zoo.cfg都配server.1,server.2,server.3就OK了。因為在同一臺機器上,后面連著的2個端口3個server都不要一樣,否則端口沖突,其中第一個端口用來集群成員的信息交換,第二個端口是在leader掛掉時專門用來進行選舉leader所用。

進入zookeeper-3.3.2/bin 目錄中,./zkServer.sh start啟動一個server,這時會報大量錯誤?其實沒什么關系,因為現在集群只起了1臺server,zookeeper服務器端起來會根據zoo.cfg的服務器列表發起選舉leader的請求,因為連不上其他機器而報錯,那么當我們起第二個zookeeper實例后,leader將會被選出,從而一致性服務開始可以使用,這是因為3臺機器只要有2臺可用就可以選出leader并且對外提供服務(2n+1臺機器,可以容n臺機器掛掉)。

接下來就可以使用了,我們可以先通過 zookeeper自帶的客戶端交互程序來簡單感受下zookeeper到底做一些什么事情。進入zookeeper-3.3.2/bin(3個server中任意一個)下,./zkCli.sh –server 127.0.0.1:2182,我連的是開著2182端口的機器。

那么,首先我們隨便打個命令,因為zookeeper不認識,他會給出命令的help,如下圖

ls(查看當前節點數據), ls2(查看當前節點數據并能看到更新次數等數據) , create(創建一個節點) , get(得到一個節點,包含數據和更新次數等數據), set(修改節點) delete(刪除一個節點)

通過上述命令實踐,我們可以發現,zookeeper使用了一個類似文件系統的樹結構,數據可以掛在某個節點上,可以對這個節點進行刪改。另外我們還發現,當改動一個節點的時候,集群中活著的機器都會更新到一致的數據。

zookeeper的數據模型 在簡單使用了zookeeper之后,我們發現其數據模型有些像操作系統的文件結構,結構如下圖所示

(1) 每個節點在zookeeper中叫做znode,并且其有一個唯一的路徑標識,如/SERVER2節點的標識就為/APP3/SERVER2 (2) Znode可以有子znode,并且znode里可以存數據,但是EPHEMERAL類型的節點不能有子節點 (3) Znode中的數據可以有多個版本,比如某一個路徑下存有多個數據版本,那么查詢這個路徑下的數據就需要帶上版本。 (4) znode 可以是臨時節點,一旦創建這個 znode 的客戶端與服務器失去聯系,這個 znode 也將自動刪除,Zookeeper 的客戶端和服務器通信采用長連接方式,每個客戶端和 服務器通過心跳來保持連接,這個連接狀態稱為 session,如果 znode 是臨時節點,這個 session 失效,znode 也就刪除了 (5) znode 的目錄名可以自動編號,如 App1 已經存在,再創建的話,將會自動命名為 App2 (6) znode 可以被監控,包括這個目錄節點中存儲的數據的修改,子節點目錄的變化等,一旦變化可以通知設置監控的客戶端,這個功能是zookeeper對于應用最重要的特性,通過這個特性可以實現的功能包括配置的集中管理,集群管理,分布式鎖等等。

通過java代碼使用zookeeper Zookeeper的使用主要是通過創建其jar包下的Zookeeper實例,并且調用其接口方法進行的,主要的操作就是對znode的增刪改操作,監聽znode的變化以及處理。

以下為主要的API使用和解釋 //創建一個Zookeeper實例,第一個參數為目標服務器地址和端口,第二個參數為Session超時時間,第三個為節點變化時的回調方法 ZooKeeper zk = new ZooKeeper(“127.0.0.1:2181”, 500000,new Watcher() { // 監控所有被觸發的事件 public void process(WatchedEvent event) { //dosomething } }); //創建一個節點root,數據是mydata,不進行ACL權限控制,節點為永久性的(即客戶端shutdown了也不會消失) zk.create(“/root”, “mydata”.getBytes(),Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

//在root下面創建一個childone znode,數據為childone,不進行ACL權限控制,節點為永久性的 zk.create(“/root/childone”,”childone”.getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.PERSISTENT);

//取得/root節點下的子節點名稱,返回List zk.getChildren(“/root”,true);

//取得/root/childone節點下的數據,返回byte[] zk.getData(“/root/childone”, true, null);

//修改節點/root/childone下的數據,第三個參數為版本,如果是-1,那會無視被修改的數據版本,直接改掉 zk.setData(“/root/childone”,”childonemodify”.getBytes(), -1);

//刪除/root/childone這個節點,第二個參數為版本,-1的話直接刪除,無視版本 zk.delete(“/root/childone”, -1);

//關閉session zk.close();

Zookeeper的主流應用場景實現思路(除去官方示例)

(1)配置管理 集中式的配置管理在應用集群中是非常常見的,一般商業公司內部都會實現一套集中的配置管理中心,應對不同的應用集群對于共享各自配置的需求,并且在配置變更時能夠通知到集群中的每一個機器。

Zookeeper很容易實現這種集中式的配置管理,比如將APP1的所有配置配置到/APP1 znode下,APP1所有機器一啟動就對/APP1這個節點進行監控(zk.exist(“/APP1”,true)),并且實現回調方法Watcher,那么在zookeeper上/APP1 znode節點下數據發生變化的時候,每個機器都會收到通知,Watcher方法將會被執行,那么應用再取下數據即可(zk.getData(“/APP1”,false,null));

以上這個例子只是簡單的粗顆粒度配置監控,細顆粒度的數據可以進行分層級監控,這一切都是可以設計和控制的。 (2)集群管理 應用集群中,我們常常需要讓每一個機器知道集群中(或依賴的其他某一個集群)哪些機器是活著的,并且在集群機器因為宕機,網絡斷鏈等原因能夠不在人工介入的情況下迅速通知到每一個機器。

Zookeeper同樣很容易實現這個功能,比如我在zookeeper服務器端有一個znode叫/APP1SERVERS,那么集群中每一個機器啟動的時候都去這個節點下創建一個EPHEMERAL類型的節點,比如server1創建/APP1SERVERS/SERVER1(可以使用ip,保證不重復),server2創建/APP1SERVERS/SERVER2,然后SERVER1和SERVER2都watch /APP1SERVERS這個父節點,那么也就是這個父節點下數據或者子節點變化都會通知對該節點進行watch的客戶端。因為EPHEMERAL類型節點有一個很重要的特性,就是客戶端和服務器端連接斷掉或者session過期就會使節點消失,那么在某一個機器掛掉或者斷鏈的時候,其對應的節點就會消失,然后集群中所有對/APP1SERVERS進行watch的客戶端都會收到通知,然后取得最新列表即可。

另外有一個應用場景就是集群選master,一旦master掛掉能夠馬上能從slave中選出一個master,實現步驟和前者一樣,只是機器在啟動的時候在APP1SERVERS創建的節點類型變為EPHEMERAL_SEQUENTIAL類型,這樣每個節點會自動被編號,例如 zk.create(“/testRootPath/testChildPath1”,”1”.getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL_SEQUENTIAL);

zk.create(“/testRootPath/testChildPath2”,”2”.getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL_SEQUENTIAL);

zk.create(“/testRootPath/testChildPath3”,”3”.getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL_SEQUENTIAL);

// 創建一個子目錄節點 zk.create(“/testRootPath/testChildPath4”,”4”.getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL_SEQUENTIAL);

System.out.println(zk.getChildren(“/testRootPath”, false));

打印結果:[testChildPath10000000000, testChildPath20000000001, testChildPath40000000003, testChildPath30000000002]

zk.create(“/testRootPath”, “testRootData”.getBytes(),Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);

// 創建一個子目錄節點 zk.create(“/testRootPath/testChildPath1”,”1”.getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);

zk.create(“/testRootPath/testChildPath2”,”2”.getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);

zk.create(“/testRootPath/testChildPath3”,”3”.getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);

// 創建一個子目錄節點 zk.create(“/testRootPath/testChildPath4”,”4”.getBytes(), Ids.OPEN_ACL_UNSAFE,CreateMode.EPHEMERAL);

System.out.println(zk.getChildren(“/testRootPath”, false));

打印結果:[testChildPath2, testChildPath1, testChildPath4, testChildPath3]

我們默認規定編號最小的為master,所以當我們對/APP1SERVERS節點做監控的時候,得到服務器列表,只要所有集群機器邏輯認為最小編號節點為master,那么master就被選出,而這個master宕機的時候,相應的znode會消失,然后新的服務器列表就被推送到客戶端,然后每個節點邏輯認為最小編號節點為master,這樣就做到動態master選舉。

總結 我們初步使用了一下zookeeper并且嘗試著描述了幾種應用場景的具體實現思路,接下來的文章,我們會嘗試著去探究一下zookeeper的高可用性與leaderElection算法。 參考:http://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/ http://hadoop.apache.org/zookeeper/docs/current/

http://rdc.taobao.com/team/jm/archives/448
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产亚洲精品久久久久久| 欧美一区二粉嫩精品国产一线天| 91老司机精品视频| 久久久久亚洲精品国产| 亚洲第一区第一页| 久久久久久97| 国产精品h片在线播放| 亚洲视频自拍偷拍| 亚洲精品综合精品自拍| 国产中文欧美精品| 亚洲乱码国产乱码精品精| 亚洲性av在线| 最近日韩中文字幕中文| 亚洲偷欧美偷国内偷| 欧美成人午夜剧场免费观看| 国产一区二区三区丝袜| 亚洲精品美女久久| 搡老女人一区二区三区视频tv| 亚洲精品suv精品一区二区| 国产成人中文字幕| 丰满岳妇乱一区二区三区| 日本a级片电影一区二区| 91色中文字幕| 97成人精品区在线播放| 久久久国产精品一区| 精品无码久久久久久国产| 亚洲成avwww人| 在线观看日韩视频| 91亚洲va在线va天堂va国| 亚洲综合在线小说| 色综合天天狠天天透天天伊人| 日韩免费在线电影| 亚洲欧美日本伦理| 亚洲国产日韩精品在线| 在线观看视频99| 亚洲午夜未满十八勿入免费观看全集| 精品福利樱桃av导航| 欧美激情伊人电影| 亚洲国产成人精品一区二区| 欧美情侣性视频| 97人洗澡人人免费公开视频碰碰碰| 亚洲欧美日韩中文视频| 久久av资源网站| 欧美激情小视频| 亚洲精品成人免费| 国产精品国产三级国产aⅴ浪潮| 日韩a**中文字幕| 亚洲免费视频在线观看| 精品性高朝久久久久久久| 久久久人成影片一区二区三区观看| 国产日韩欧美一二三区| 国内精品中文字幕| 欧美一级大片在线免费观看| 91av福利视频| 91成人免费观看网站| 国产精品偷伦一区二区| 欧美午夜女人视频在线| 日韩高清电影好看的电视剧电影| 久久精品国产欧美亚洲人人爽| 亚洲人成在线观| 久久久精品999| 国产欧美最新羞羞视频在线观看| 久久久久久网址| 久久综合免费视频| 91夜夜未满十八勿入爽爽影院| 欧美激情精品久久久久久黑人| 国产精品网址在线| 久久精品小视频| 8x拔播拔播x8国产精品| 成人午夜激情免费视频| 日韩中文字幕不卡视频| 国产综合久久久久久| 国语自产精品视频在线看| 成人激情在线观看| 美女撒尿一区二区三区| 欧美一级淫片aaaaaaa视频| 美女性感视频久久久| 亚洲欧美日韩一区二区在线| 欧美日韩免费一区| 国产精品91久久| 91久久在线播放| 国产精品久久久久秋霞鲁丝| 久青草国产97香蕉在线视频| 亚洲第一精品电影| 国产精品美女av| 性欧美在线看片a免费观看| 欧美一级视频在线观看| 亚洲欧美日本伦理| 亚洲福利在线看| 亚洲摸下面视频| 久久久这里只有精品视频| 在线观看91久久久久久| 国产精品男女猛烈高潮激情| 午夜精品久久久久久久久久久久久| 91精品国产91久久久久福利| 午夜精品美女自拍福到在线| 亚洲精品成人久久久| 日本午夜精品理论片a级appf发布| 不卡av电影院| 日韩成人av在线播放| 亚洲片国产一区一级在线观看| 精品精品国产国产自在线| 精品中文字幕久久久久久| 亚洲最大的免费| 欧美精品久久久久久久| 久久久久久亚洲| 亚洲欧美日韩一区在线| 久久69精品久久久久久国产越南| 日韩电视剧在线观看免费网站| 亚洲国产精品小视频| 欧美日韩国产成人在线观看| 亚洲一区国产精品| 久久久久久久97| 3344国产精品免费看| 午夜精品久久久久久久男人的天堂| 黄色成人av网| 91色在线视频| 欧美老肥婆性猛交视频| 久久成人精品视频| 欧美性受xxxx白人性爽| 欧美韩国理论所午夜片917电影| 成人疯狂猛交xxx| 亚洲精品成人免费| 中文字幕精品一区二区精品| 韩国三级日本三级少妇99| 久久久91精品国产一区不卡| 亚洲丝袜av一区| 国产情人节一区| 久热在线中文字幕色999舞| 日韩中文字幕av| 国产精品成人国产乱一区| 日韩欧美999| 久久久97精品| 亚洲成年人在线播放| 一本色道久久88亚洲综合88| 欧美电影免费播放| 国产97在线播放| 欧美乱大交做爰xxxⅹ性3| 亚洲免费视频网站| 日韩欧美在线中文字幕| 91欧美日韩一区| 国产精欧美一区二区三区| 亚洲欧美色图片| 欧美在线观看视频| 国产日产久久高清欧美一区| 欧美巨大黑人极品精男| 成人亚洲欧美一区二区三区| 日韩美女中文字幕| 最新国产成人av网站网址麻豆| 国产精品久久精品| 欧美成人午夜剧场免费观看| 国产精品看片资源| 中文字幕免费精品一区高清| 色伦专区97中文字幕| 国产精品吹潮在线观看| 久久深夜福利免费观看| 成人激情电影一区二区| 日本最新高清不卡中文字幕| 日本一区二区三区在线播放| 在线观看视频亚洲| 亚洲天堂av在线播放| 欧美激情a在线| 国产精品 欧美在线| 欧美亚洲国产成人精品|