ZooKeeper所提供的服務(wù)主要是通過:數(shù)據(jù)結(jié)構(gòu)Node+原語+watcher機(jī)制
ZooKeeper是一個分布式小文件系統(tǒng),通過選舉算法和集群復(fù)制可以避免單點故障,
由于是文件系統(tǒng),所以即使所有的ZooKeeper節(jié)點全部掛掉,數(shù)據(jù)也不會丟失,
重啟服務(wù)器之后,數(shù)據(jù)即可恢復(fù)。
ZooKeeper所實現(xiàn)的一切功能,都是由ZK節(jié)點的性質(zhì)和該節(jié)點所關(guān)聯(lián)的數(shù)據(jù)實現(xiàn)的,
至于關(guān)聯(lián)什么數(shù)據(jù)那就要看你干什么事了
① 集群管理:利用臨時節(jié)點特性,節(jié)點關(guān)聯(lián)的是機(jī)器的主機(jī)名、IP地址等相關(guān)信息,集群單點故障也屬于該范疇。
② 統(tǒng)一命名:主要利用節(jié)點的唯一性和目錄節(jié)點樹結(jié)構(gòu)。
③ 配置管理:節(jié)點關(guān)聯(lián)的是配置信息。
④ 分布式鎖:節(jié)點關(guān)聯(lián)的是要競爭的資源。
以下為項目中的實際應(yīng)用
1.利用watcher機(jī)制:
vqsapi 往6個接口發(fā)數(shù)據(jù)的時候,可以用zookeeper來監(jiān)控目前存活的mongodb與api,
vqsapi 動態(tài)獲取,往mongodb與api都存活的接口發(fā)數(shù)據(jù)
2.利用臨時節(jié)點的特性
運維接口探測,可以每個服務(wù)器在zookeeper注冊一個臨時節(jié)點,當(dāng)接口掛了時候,
session斷開,達(dá)到監(jiān)控的目的
3.利用節(jié)點唯一性的特性
分布式鎖,同時操作同一資源,可能出現(xiàn)并發(fā)問題時候,上一把鎖
因為原生的zookeeper 語句比較繁瑣,難以理解,所以curator 框架很好的實現(xiàn)了,下面為加鎖操作
String path = String.format(LockPathScheme.STRATEGY_MODEL_ROUTE, modelId, isp,province,value); //加鎖操作 CuratorFramework curator = CuratorFrameworkFactory.builder().retryPolicy(new ExponentialBackoffRetry(10000, 3)).connectString(zookeeperserver).build(); curator.start(); InterProcessMutex lock = new InterProcessMutex(curator, path); try { boolean b = lock.acquire(3, TimeUnit.SECONDS); if (!b) { resultMap.put("statusCode", 300); resultMap.put("message", "記錄正在被操作!"); return resultMap; } //加鎖后,該干嘛干嘛了 resultMap = this.strategyRoute_dnspod_save_detail(request, id, modelId, modelName, category, province, isp, containCname, type, remark, node, value, ttl, weight, status,customerViewId); return resultMap; }catch(Exception e){ e.printStackTrace(); resultMap.put("statusCode", 300); resultMap.put("message", "內(nèi)部錯誤!"); return resultMap; }finally { //記得一定要釋放鎖 try{ lock.release(); }catch (Exception e){ System.out.println(path + "釋放鎖失敗" + e); } CloseableUtils.closeQuietly(curator); }
最后上一個非常完美的例子,很好的使用了zookeeper 框架的各種特性
轉(zhuǎn)自 http://www.cnblogs.com/wuxl360/p/5817549.html
假設(shè)我們的集群有:
(1) 20個搜索引擎的服務(wù)器:每個負(fù)責(zé)總索引中的一部分的搜索任務(wù)。
① 搜索引擎的服務(wù)器中的15個服務(wù)器現(xiàn)在提供搜索服務(wù)。
② 5個服務(wù)器正在生成索引。
這20個搜索引擎的服務(wù)器,經(jīng)常要讓正在提供搜索服務(wù)的服務(wù)器停止提供服務(wù)開始生成索引,或生成索引的服務(wù)器已經(jīng)把索引生成完成可以搜索提供服務(wù)了。
(2) 一個總服務(wù)器:負(fù)責(zé)向這20個搜索引擎的服務(wù)器發(fā)出搜索請求并合并結(jié)果集。
(3) 一個備用的總服務(wù)器:負(fù)責(zé)當(dāng)總服務(wù)器宕機(jī)時替換總服務(wù)器。
(4) 一個web的cgi:向總服務(wù)器發(fā)出搜索請求。
使用Zookeeper可以保證:
(1) 總服務(wù)器:自動感知有多少提供搜索引擎的服務(wù)器,并向這些服務(wù)器發(fā)出搜索請求。
(2) 備用的總服務(wù)器:宕機(jī)時自動啟用備用的總服務(wù)器。
(3) web的cgi:能夠自動地獲知總服務(wù)器的網(wǎng)絡(luò)地址變化。
(4) 實現(xiàn)如下:
① 提供搜索引擎的服務(wù)器都在Zookeeper中創(chuàng)建znode,zk.create("/search/nodes/node1", "hostname".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateFlags.EPHEMERAL);
② 總服務(wù)器可以從Zookeeper中獲取一個znode的子節(jié)點的列表,zk.getChildren("/search/nodes", true);
③ 總服務(wù)器遍歷這些子節(jié)點,并獲取子節(jié)點的數(shù)據(jù)生成提供搜索引擎的服務(wù)器列表;
④ 當(dāng)總服務(wù)器接收到子節(jié)點改變的事件信息,重新返回第二步;
⑤ 總服務(wù)器在Zookeeper中創(chuàng)建節(jié)點,zk.create("/search/master", "hostname".getBytes(), Ids.OPEN_ACL_UNSAFE, CreateFlags.EPHEMERAL);
⑥ 備用的總服務(wù)器監(jiān)控Zookeeper中的"/search/master"節(jié)點。當(dāng)這個znode的節(jié)點數(shù)據(jù)改變時,把自己啟動變成總服務(wù)器,并把自己的網(wǎng)絡(luò)地址數(shù)據(jù)放進(jìn)這個節(jié)點。
⑦ web的cgi從Zookeeper中"/search/master"節(jié)點獲取總服務(wù)器的網(wǎng)絡(luò)地址數(shù)據(jù),并向其發(fā)送搜索請求。
⑧ web的cgi監(jiān)控Zookeeper中的"/search/master"節(jié)點,當(dāng)這個znode的節(jié)點數(shù)據(jù)改變時,從這個節(jié)點獲取總服務(wù)器的網(wǎng)絡(luò)地址數(shù)據(jù),并改變當(dāng)前的總服務(wù)器的網(wǎng)絡(luò)地址。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
當(dāng)前文章:zookeeper在項目中的實際應(yīng)用-創(chuàng)新互聯(lián)
URL鏈接:http://aaarwkj.com/article0/cdheio.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站收錄、網(wǎng)站策劃、標(biāo)簽優(yōu)化、外貿(mào)網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)、定制開發(fā)
聲明:本網(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)
猜你還喜歡下面的內(nèi)容