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