資料05 zookeeperzookeeper筆記_第1頁
資料05 zookeeperzookeeper筆記_第2頁
資料05 zookeeperzookeeper筆記_第3頁
資料05 zookeeperzookeeper筆記_第4頁
資料05 zookeeperzookeeper筆記_第5頁
已閱讀5頁,還剩18頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、JavaEE 課程系列Zookeeper 筆記2019 年 5 月 7 日1 方法遠(yuǎn)程調(diào)用代碼的對(duì)比1更多 Java 大數(shù)據(jù) 前端 python 人工智能資料下載,可訪問百度:尚硅谷官網(wǎng)/ 不使用遠(yuǎn)程方法調(diào)用框架/ 1.創(chuàng)建 HttpClient 實(shí)例CloseableHttpClient client = HttpClientBuilder.create().build(); try / 2.聲明服務(wù)器端 URL 地址Stringurl=http:/服務(wù)器端實(shí)際IP:54321/bookManager/book/getBook/23?requestParam=AAA;/ 3.創(chuàng)建具體請(qǐng)求方式

2、實(shí)例HttpGet get = new HttpGet(url);/ 4.調(diào)用客戶端對(duì)象執(zhí)行請(qǐng)求,進(jìn)而獲得響應(yīng)對(duì)象CloseableHttpResponse response = client.execute(get);/ 使用遠(yuǎn)程方法調(diào)用框架Controllerpublic class HelloController / 將封裝了遠(yuǎn)程服務(wù)功能的接口類型的 bean 裝配到當(dāng)前組件Autowiredprivate EmpRemoteService empRemoteService;RequestMapping(/aaa/bbb/ccc) public String doXxx()mpList(

3、);/ .JavaEE 課程系列2 遠(yuǎn)程方法調(diào)用框架和注冊(cè)中心工作機(jī)制2.1 技術(shù)方案一Dubbo 作為遠(yuǎn)程方法調(diào)用框架+Zookeeper 作為注冊(cè)中心2更多 Java 大數(shù)據(jù) 前端 python 人工智能資料下載,可訪問百度:尚硅谷官網(wǎng)/ 5.從響應(yīng)結(jié)果中獲取封裝響應(yīng)數(shù)據(jù)的 Entity 對(duì)象HttpEntity entity = response.getEntity();/ 6.借助工具類將 HttpEntity 中包含的數(shù)據(jù)轉(zhuǎn)換成可識(shí)別的字符串String responseData = EntityUtils.toString(entity, UTF-8);/ 7.處理響應(yīng)結(jié)果Syst

4、em.out.println(responseData);/Ensures that the entity content is fully consumed and the content stream, if exists, is closed./確認(rèn) entity 的內(nèi)容已經(jīng)完全被 consume 了,而且如果內(nèi)容的流存在,確認(rèn)其已經(jīng)關(guān)閉了。EntityUtils.consume(entity); catch (ClientProtocolException e) e.printStackTrace(); catch (IOException e) e.printStackTrace()

5、; finally / 8.釋放連接,無論操作是否成功都必須釋放連接if(client != null) try client.close(); catch (IOException e) e.printStackTrace();JavaEE 課程系列2.2 技術(shù)方案二SpringBoot+SpringCloudEureka 作為注冊(cè)中心Feign 作為遠(yuǎn)程方法調(diào)用框架3Zookeeper3.1 簡(jiǎn)介ZooKeeper is a centralizedservice for maintainingconfiguration information, naming,providing distr

6、ibuted synchronization, and providing group services. All of these kinds of servicesare used in some form or another by distributed applications. Each time they are implemented there is a lot of work that goes into fixing the bugs and race conditions that are inevitable. Because of the difficulty of

7、 implementing these kinds of services, applications initially usually skimp on them, which make them brittle in the presence of change and difficult to manage. Even when done correctly, different implementations of these services lead to managementcomplexity when the applications are deployed.3更多 Ja

8、va 大數(shù)據(jù) 前端 python 人工智能資料下載,可訪問百度:尚硅谷官網(wǎng)JavaEE 課程系列3.2 樹形目錄結(jié)構(gòu)ZooKeeper 使用樹形結(jié)構(gòu)管理數(shù)據(jù)。而且以“/”作為樹形結(jié)構(gòu)的根節(jié)點(diǎn)。樹形結(jié)構(gòu)中的每一個(gè)節(jié)點(diǎn)都稱為“znode”。文件系統(tǒng)中的目錄可以存放其他目錄和文件,znode 中可以存放其他 znode,也可以對(duì)應(yīng)一個(gè)具體的值。znode 和它對(duì)應(yīng)的值之間是鍵值對(duì)的關(guān)系。每一個(gè) znode 上同時(shí)還有一套狀態(tài)信息,稱為:stat。3.3 異步機(jī)制在分布式項(xiàng)目中隨著業(yè)務(wù)功能越來越多,具體的功能模塊也會(huì)越來越多,一個(gè)大型的電商項(xiàng)目能達(dá)到幾十個(gè)模塊甚至更多。這么多業(yè)務(wù)模塊的工程有可能需要共

9、享一些信息,這些信息一旦發(fā)生變化,在各個(gè)相關(guān)模塊工程中手動(dòng)逐一修改會(huì)非常麻煩,甚至可能發(fā)生遺漏,嚴(yán)重的可能導(dǎo)致系統(tǒng),造成經(jīng)濟(jì)損失。使用 ZooKeeper機(jī)制后,各個(gè)模塊工程在特定 znode 上設(shè)置 Watcher(觀察者)來監(jiān)控當(dāng)前節(jié)點(diǎn)上值的變化。一旦 Watcher 檢測(cè)到了數(shù)據(jù)變化就會(huì)立即程,從而自動(dòng)實(shí)現(xiàn)“一處修改,處處生效”的效果。模塊工4更多 Java 大數(shù)據(jù) 前端 python 人工智能資料下載,可訪問百度:尚硅谷官網(wǎng)JavaEE 課程系列3.4 leader-follower 集群4 Zookeeper 安裝4.1 環(huán)境準(zhǔn)備Zookeeper 需要在 JVM 虛擬機(jī)上運(yùn)行,所以

10、一定要保證有 JDK 支持。4.2 上傳 Zookeeperzookeeper-3.4.9.tar.gz4.3 解壓tar -zxvf /opt/zookeeper-3.4.9.tar.gz4.4 準(zhǔn)備配置文件cp /opt/zookeeper-3.4.9/conf/zoo_sample.cfg /opt/zookeeper-3.4.9/conf/zoo.cfgZookeeper 要求配置文件的文件名必須是:zoo.cfg4.5 創(chuàng)建數(shù)據(jù)目錄mkdir /opt/zookeeper-3.4.9/data4.6 在 zoo.cfg 中配置數(shù)據(jù)目錄的位置dataDir=/opt/zookeeper

11、-3.4.9/data5更多 Java 大數(shù)據(jù) 前端 python 人工智能資料下載,可訪問百度:尚硅谷官網(wǎng)rootrich redis# java -version java version 1.8.0_121Java(TM) SE Runtime Environment (build 1.8.0_121-b13)Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)JavaEE 課程系列5 Zookeeper 服務(wù)器端操作5.1 zoo.cfg 文件解讀5.2 常用命令5.2.1 ZooKeeper 服務(wù)器與客戶端啟

12、動(dòng)服務(wù)器:./zkServer.sh start 停止服務(wù)器:./zkServer.sh stop 啟動(dòng)客戶端:./zkCli.sh退出客戶端:zk: localhost:2181(CONNECTED) 6 quit5.2.2 ls查看當(dāng)前 znode 中所包含的內(nèi)容6更多 Java 大數(shù)據(jù) 前端 python 人工智能資料下載,可訪問百度:尚硅谷官網(wǎng)tickTime通信心跳數(shù),ZooKeeper 服務(wù)器心跳時(shí)間,單位毫秒ZooKeeper 使用的基本時(shí)間,服務(wù)器之間或客戶端與服務(wù)器之間維持心跳的時(shí)間間隔,也就是每個(gè) tickTime時(shí)間就會(huì)發(fā)送一個(gè)心跳,時(shí)間單位為毫秒。用于心跳機(jī)制,并且設(shè)置

13、最小的 session 超時(shí)時(shí)間為兩倍心跳時(shí)間(session 的最小超時(shí)時(shí)間是 2*tickTime)。initLimitLF 初始通信時(shí)限集群中的Follower 跟隨者服務(wù)器(F)與Leader 領(lǐng)導(dǎo)者服務(wù)器(L)之間初始連接時(shí)能容忍的最多心跳數(shù)(tickTime 的數(shù)量)。投票選舉新 Leader 的初始化時(shí)間,F(xiàn)ollower 在啟動(dòng)過程中,會(huì)從 Leader 同步所有最新數(shù)據(jù),然后確定自己能夠?qū)ν夥?wù)的起始狀態(tài)。Leader 允許 Follower 在 initLimit 時(shí)間內(nèi)完成這個(gè)工作。syncLimitLF 同步通信時(shí)限集群中Leader 與 Follower 之間的最大響

14、應(yīng)時(shí)間單位,假如響應(yīng)超過 syncLimit * tickTime,Leader 認(rèn)為Follwer死掉,從服務(wù)器列表中刪除 Follwer。在運(yùn)行過程中,Leader 負(fù)責(zé)與 ZooKeeper 集群中所有機(jī)器進(jìn)行通信,例如通過一些心跳檢測(cè)機(jī)制,來檢測(cè)機(jī)器的存活狀態(tài)。如果 L 發(fā)出心跳包在 syncLimit 之后,還沒有從 F 那收到響應(yīng),那么就認(rèn)為這個(gè) F 已經(jīng)不在線了。dataDir數(shù)據(jù)文件目錄+數(shù)據(jù)持久化路徑保存內(nèi)存數(shù)據(jù)庫(kù)快照信息的位置,如果沒有其他說明,更新的事務(wù)日志也保存到數(shù)據(jù)庫(kù)。clientPort客戶端連接端口JavaEE 課程系列5.2.3 ls2查看當(dāng)前節(jié)點(diǎn)數(shù)據(jù)并能看到更

15、新次數(shù)等數(shù)據(jù)5.2.4 stat查看節(jié)點(diǎn)狀態(tài)5.2.5 createcreate -s -e path data acl普通創(chuàng)建:不帶有-s、-e 參數(shù)-s:含有序列-e:臨時(shí)(重啟或者超時(shí)消失)5.2.6 set設(shè)置節(jié)點(diǎn)的具體值set 節(jié)點(diǎn) value 值5.2.7 get獲得節(jié)點(diǎn)的值get 節(jié)點(diǎn)5.2.8 delete可以刪除指定 znode,當(dāng)該 znode 擁有子 znode 時(shí),必須先刪除其所有子 znode,否則操作將失敗。5.2.9 rmrrmr 命令可用于代替 delete 命令,rmr 是一個(gè)遞歸刪除命令,如果發(fā)生指定節(jié)點(diǎn)擁有子節(jié)點(diǎn)時(shí),rmr 命令會(huì)首先刪除子節(jié)點(diǎn)。5.3 Z

16、ookeeper 節(jié)點(diǎn)類型5.3.1 PERSISTENT-持久化目錄節(jié)點(diǎn)客戶端與 zookeeper 斷開連接后,該節(jié)點(diǎn)依舊存在5.3.2 PERSISTENT_SEQUENTIAL-持久化順序編號(hào)目錄節(jié)點(diǎn)客戶端與 zookeeper 斷開連接后,該節(jié)點(diǎn)依舊存在,只是 Zookeeper 給該節(jié)點(diǎn)名稱進(jìn)行順序編號(hào)5.3.3 EPHEMERAL-臨時(shí)目錄節(jié)點(diǎn)客戶端與 zookeeper 斷開連接后,該節(jié)點(diǎn)被刪除5.3.4 EPHEMERAL_SEQUENTIAL-臨時(shí)順序編號(hào)目錄節(jié)點(diǎn)客戶端與 zookeeper 斷開連接后,該節(jié)點(diǎn)被刪除,只是 Zookeeper 給該節(jié)點(diǎn)名稱進(jìn)7更多 Java

17、 大數(shù)據(jù) 前端 python 人工智能資料下載,可訪問百度:尚硅谷官網(wǎng)JavaEE 課程系列行順序編號(hào)5.4 Zookeeper 節(jié)點(diǎn)狀態(tài)5.4.1 介紹znode 維護(hù)了一個(gè) stat 結(jié)構(gòu),這個(gè) stat 包含數(shù)據(jù)變化的版本號(hào)、訪問控制列表變化、還有時(shí)間戳。版本號(hào)和時(shí)間戳一起,可讓 ZooKeeper 驗(yàn)證緩存和協(xié)調(diào)更新。每次 znode 的數(shù)據(jù)發(fā)生了變化,版本號(hào)就增加。例如:無論何時(shí)客戶端檢索數(shù)據(jù),它也一起檢索數(shù)據(jù)的版本號(hào)。并且當(dāng)客戶端執(zhí)行更新或刪除時(shí),客戶端必須提供他正在改變的 znode 的版本號(hào)。如果它提供的版本號(hào)和真實(shí)的數(shù)據(jù)版本號(hào)不一致,更新將會(huì)失敗。5.4.2 屬性czxid:

18、引起這個(gè) znode 創(chuàng)建的 zxid,創(chuàng)建節(jié)點(diǎn)的事務(wù)的 zxid(ZooKeeper TransactionId)ctime:znode 被創(chuàng)建的毫秒數(shù)(從 1970 年開始) mzxid:znode 最后更新的 zxidmtime:znode 最后修改的毫秒數(shù)(從 1970 年開始) pZxid:znode 最后更新的子節(jié)點(diǎn) zxidcversion:znode 子節(jié)點(diǎn)變化號(hào),znode 子節(jié)點(diǎn)修改次數(shù)dataversion:znode 數(shù)據(jù)變化號(hào)aclVersion:znode 訪問控制列表的變化號(hào)ephemeralOwner:如果是臨時(shí)節(jié)點(diǎn),這個(gè)是 znode 擁有者的 session

19、 id。如果不是臨時(shí)節(jié)點(diǎn)則是 0。dataLength:znode 的數(shù)據(jù)長(zhǎng)度numChildren:znode 子節(jié)點(diǎn)數(shù)量5.5 四字命令5.5.1 介紹ZooKeeper 支持某些特定的四字命令,他們大多是用來查詢 ZooKeeper 服務(wù)的當(dāng)前狀態(tài)及相關(guān)信息的,使用時(shí)通過 telnet 或 nc 向 ZooKeeper 提交相應(yīng)命令。rootright bin# echo ruok | nc localhost 2181imokrootright bin#5.5.2 nc 命令nc 命令需要安裝對(duì)應(yīng)的程序才可以使用。yum install -y nc5.5.3 常用四字命令ruok:測(cè)試

20、服務(wù)是否處于正確狀態(tài)。如果確實(shí)如此,那么服務(wù)返回“imok ”, 否則不做任何響應(yīng)stat:輸出關(guān)于性能和連接的客戶端的列表8更多 Java 大數(shù)據(jù) 前端 python 人工智能資料下載,可訪問百度:尚硅谷官網(wǎng)JavaEE 課程系列conf:輸出相關(guān)服務(wù)配置的詳細(xì)信息cons:列出所有連接到服務(wù)器的客戶端的完全的連接 /會(huì)話的詳細(xì)信息。包括“接受 / 發(fā)送”的包數(shù)量、會(huì)話 id 、操作延遲、最后的操作執(zhí)行等等信息dump:列出未經(jīng)處理的會(huì)話和臨時(shí)節(jié)點(diǎn)envi:輸出關(guān)于服務(wù)環(huán)境的詳細(xì)信息(區(qū)別于 conf 命令)reqs:列出未經(jīng)處理的請(qǐng)求wchs:列出服務(wù)器 watch 的詳細(xì)信息wchc:通

21、過 session 列出服務(wù)器 watch 的詳細(xì)信息,它的輸出是一個(gè)與 watch相關(guān)的會(huì)話的列表wchp:通過路徑列出服務(wù)器的路徑watch 的詳細(xì)信息。它輸出一個(gè)與session 相關(guān)6 Java 客戶端6.1 依賴信息6.2 主要功能代碼9更多 Java 大數(shù)據(jù) 前端 python 人工智能資料下載,可訪問百度:尚硅谷官網(wǎng)OperationItemExample連接信息服務(wù)器地址67:2181節(jié)點(diǎn)路徑/atguigu會(huì)話超時(shí)時(shí)間50*1000創(chuàng)建 ZooKeeper 對(duì)象連接 ZooKeeper 服務(wù)器public ZooKeeper(String connec

22、tString,int sessionTimeout,Watcher watcher) throws IOExceptionthis(connectString, sessionTimeout, watcher, false);斷開ZooKeeper 服務(wù)器連接org.apache.zookeeper.ZooKeeper.close()com.101teczkclient0.10org.apache.zookeeperzookeeper3.4.9JavaEE 課程系列6.3 修改節(jié)點(diǎn)數(shù)據(jù)操作10更多 Java 大數(shù)據(jù) 前端 python 人工智能資料下載,可訪問百度:尚硅谷官網(wǎng)/ 1.連接 Z

23、ookeeper 服務(wù)器的信息String connectString = 00:2181; int sessionTimeout = 5000;Watcher watcher = new Watcher() Override public void process(WatchedEvent event) ;/ 2.創(chuàng)建 ZooKeeper 建立連接ZooKeeper zooKeeper = new ZooKeeper(connectString, sessionTimeout, watcher);/ 3.通過設(shè)置節(jié)點(diǎn)值測(cè)試連接byte data = BBB.getBy

24、tes();/ -1 表示不驗(yàn)證版本號(hào)int version = -1;Stat stat = zooKeeper.setData(/fruit, data, version); System.out.println(stat.getVersion();/ 4.關(guān)閉連接zooKeeper.close();創(chuàng)建節(jié)點(diǎn)org.apache.zookeeper.ZooKeeper.create( String,byte,List, /可以使用 Ids.OPEN_ACL_UNSAFE CreateMode)/CreateMode 本身是一個(gè)枚舉類型獲取節(jié)點(diǎn)上的數(shù)據(jù)org.apache.zookeeper

25、.ZooKeeper.getData( String,boolean, Stat)設(shè)置節(jié)點(diǎn)上的數(shù)據(jù)org.apache.zookeeper.ZooKeeper.setData( String,byte,int)/使用-1 作為版本號(hào)的值時(shí)可以匹配所有版本號(hào)判斷節(jié)點(diǎn)是否存在org.apache.zookeeper.ZooKeeper.exists(String, boolean)JavaEE 課程系列異步機(jī)制77.1 工作機(jī)制介紹客戶端注冊(cè)它關(guān)心的目錄節(jié)點(diǎn),當(dāng)目錄節(jié)點(diǎn)發(fā)生變化(數(shù)據(jù)改變、被刪除、子目錄節(jié)點(diǎn)增加刪除)時(shí),zookeeper 會(huì)客戶端。ZooKeeper 支持 Watch(觀察)機(jī)制

26、,客戶端可以在每個(gè) znode 結(jié)點(diǎn)上設(shè)置一個(gè)Watcher(觀察者)。如果被觀察服務(wù)端的 znode 結(jié)點(diǎn)有變更,那么 Watcher 就會(huì)被觸發(fā),這個(gè) Watcher 所屬的客戶端將接收到一個(gè)包被告知結(jié)點(diǎn)已經(jīng)發(fā)生變化,這就是把相應(yīng)的給設(shè)置過 Watcher 的 Client 端。ZooKeeper 里的所有讀取操作:getData(),getChildren()和 exists()都有設(shè)置 Watch 的選項(xiàng)??偨Y(jié)成一句話:ZooKeeper 的觀察機(jī)制是一種異步回調(diào)的觸發(fā)機(jī)制。當(dāng)數(shù)據(jù)有了變化時(shí) zkServer 向客戶端發(fā)送一個(gè) Watch發(fā)一次就失效了。,這是個(gè)一次性動(dòng)作,觸如果想繼續(xù)

27、 Watch 的話,需要客戶端重新設(shè)置 Watcher。因此如果你得到了一個(gè)Watch,并且在將來繼續(xù)得到節(jié)點(diǎn)變化繼續(xù)觀察。,那么就必須另外設(shè)置一個(gè)新的 Watcher節(jié)點(diǎn)有不同的改動(dòng)方式。可以認(rèn)為 ZooKeeper 維護(hù)兩個(gè)觀察列表:數(shù)據(jù)觀察和子節(jié)點(diǎn)觀察。getData()和 exists()設(shè)置數(shù)據(jù)觀察。getChildren()設(shè)置子節(jié)點(diǎn)觀察。此外,還可以認(rèn)為不同的返回?cái)?shù)據(jù)有不同的觀察。getData() 和 exists() 返回節(jié)點(diǎn)的數(shù)據(jù), 而getChildren()返回子節(jié)點(diǎn)列表。所以,setData()將為 znode 觸發(fā)數(shù)據(jù)觀察。成功的 create() 將為新創(chuàng)建的節(jié)點(diǎn)

28、觸發(fā)數(shù)據(jù)觀察,為其父節(jié)點(diǎn)觸發(fā)子節(jié)點(diǎn)觀察。成功的 delete()將會(huì)為被刪除的節(jié)點(diǎn)觸發(fā)數(shù)據(jù)觀察以及子節(jié)點(diǎn)觀察(因?yàn)楣?jié)點(diǎn)不能再有子節(jié)點(diǎn)了),為其父節(jié)點(diǎn)觸發(fā)子節(jié)點(diǎn)觀察。如果一個(gè)節(jié)點(diǎn)設(shè)置存在觀察時(shí)尚未創(chuàng)建,并且在斷開連接后執(zhí)行節(jié)點(diǎn)創(chuàng)建以及刪除操作,那么這個(gè)節(jié)點(diǎn)上設(shè)置的觀察客戶端接收不到,會(huì)丟失。7.2 一次性11更多 Java 大數(shù)據(jù) 前端 python 人工智能資料下載,可訪問百度:尚硅谷官網(wǎng)/ 1.準(zhǔn)備連接 Zookeeper 服務(wù)器的連接信息String connectingString = 00:2181; int sessionTimeout = 5000;Java

29、EE 課程系列7.3 持續(xù)12更多 Java 大數(shù)據(jù) 前端 python 人工智能資料下載,可訪問百度:尚硅谷官網(wǎng)/ 專門封裝一個(gè)方法用來實(shí)現(xiàn)持續(xù)的異步public void getNodeData(String path, ZooKeeper zooKeeper) throws KeeperException, InterruptedException / 調(diào)用獲取節(jié)點(diǎn)值的方法時(shí)設(shè)置 Watcher 進(jìn)行監(jiān)控/ 2.創(chuàng)建 Zookeeper 對(duì)象ZooKeeper zooKeeper = new ZooKeeper(connectingString, sessionTimeout, new

30、Watcher() public void process(WatchedEvent event) );/ 3.獲取指定節(jié)點(diǎn)的值String path = /fruit;byte data = zooKeeper.getData(path, new Watcher() Overridepublic void process(WatchedEvent event) System.out.println(/fruit 節(jié)點(diǎn)的值被修改了!+Thread.currentThread().getName();, new Stat();/ 4.將獲取節(jié)點(diǎn)值時(shí)得到的字節(jié)數(shù)組轉(zhuǎn)化成 String 類型Stri

31、ng dataString = new String(data);/ 5.打印結(jié)果System.out.println(dataString);/ 讓程序不能停while(true) Thread.sleep(5000);System.err.println( 藥不能停, 不能停 代表程序原本要執(zhí)行的業(yè)務(wù)邏輯功能+Thread.currentThread().getName();/ 6.關(guān)閉連接/ zooKeeper.close();JavaEE 課程系列13更多 Java 大數(shù)據(jù) 前端 python 人工智能資料下載,可訪問百度:尚硅谷官網(wǎng)public static void main(St

32、ring args) throws IOException, KeeperException, InterruptedException/ 1.建立連接String connectingString = 00:2181; int sessionTimeout = 5000;ZooKeeper zooKeeper = new ZooKeeper(connectingString, sessionTimeout, new Watcher() public void process(WatchedEvent event) );/ 2.獲取節(jié)點(diǎn)數(shù)據(jù)String path = /

33、fruit;new AsyncNoticeForever().getNodeData(path, zooKeeper);/ 3.讓方法持續(xù)運(yùn)行while(true) Thread.sleep(5000);byte data = zooKeeper.getData(path, new Watcher() Overridepublic void process(WatchedEvent event) / 接收到異步時(shí),再次調(diào)用獲取節(jié)點(diǎn)值方法,目的是設(shè)置新的 Watchertry getNodeData(path, zooKeeper); catch (KeeperException e) e.pr

34、intStackTrace(); catch (InterruptedException e) e.printStackTrace();, new Stat();String result = new String(data);System.err.println(當(dāng)前節(jié)點(diǎn)值=+result);JavaEE 課程系列8 集群8.1 數(shù)據(jù)通信機(jī)制同一臺(tái)服務(wù)器上:IP 地址一樣,端不同的服務(wù)器上:IP 地址不一樣,端必須得不一樣可以用同一個(gè)8.2 搭建步驟第 1 步:創(chuàng)建集群所在目錄mkdir /opt/cluster-zk第 2 步:重新解壓 tar 包到集群目錄tar -zxvf /opt/z

35、ookeeper-3.4.9.tar.gz -C /opt/cluster-zk/第 3 步:復(fù)制新的解壓目錄cp -r /opt/cluster-zk/zookeeper-3.4.9/ /opt/cluster-zk/zkone第 4 步:配置 zkonei:創(chuàng)建 zoo.cfg 配置文件cp /opt/cluster-zk/zkone/conf/zoo_sample.cfg /opt/cluster-zk/zkone/conf/zoo.cfg ii:創(chuàng)建數(shù)據(jù)目錄mkdir /opt/cluster-zk/zkone/data iii:在數(shù)據(jù)目錄中創(chuàng)建編vim /opt/cluster-zk

36、/zkone/data/myidiv:編輯編,內(nèi)容就是當(dāng)前服務(wù)器實(shí)例的編號(hào)14更多 Java 大數(shù)據(jù) 前端 python 人工智能資料下載,可訪問百度:尚硅谷官網(wǎng)System.err.println( 藥不能停, 不能停 代表程序原本要執(zhí)行的業(yè)務(wù)邏輯功能+Thread.currentThread().getName();JavaEE 課程系列1v:配置 zoo.cfgdataDir=/opt/cluster-zk/zkone/dataclientPort=1000server.1=:1001:1002server.2=:2001:2002 server.3=

37、:3001:3002格式解釋:server.服務(wù)器實(shí)例編號(hào)=IP 地址:數(shù)據(jù)通信端:選舉端第 5 步:配置 zktwoi:把 zktwo 復(fù)制出來cp -r /opt/cluster-zk/zkone /opt/cluster-zk/zktwo ii:修改 myid 文件中編號(hào)值vim /opt/cluster-zk/zktwo/data/myid將 1 改成 2 iii:修改 zoo.cfgdataDir=/opt/cluster-zk/zktwo/data clientPort=2000第 6 步:配置 zkthreei:把 zkthree 復(fù)制出來cp -r /opt/

38、cluster-zk/zkone /opt/cluster-zk/zkthree ii:修改 myid 文件中編號(hào)值vim /opt/cluster-zk/zkthree/data/myid將 1 改成 3 iii:修改 zoo.cfgdataDir=/opt/cluster-zk/zkthree/dataclientPort=30008.3 創(chuàng)建操作服務(wù)器的可執(zhí)行腳本8.3.1 創(chuàng)建文件/opt/cluster-zk/start.sh/opt/cluster-zk/stop.sh/opt/cluster-zk/status.sh8.3.2 編輯啟動(dòng)服務(wù)器命令/opt/cluster-zk/z

39、kone/bin/zkServer.sh start/opt/cluster-zk/zktwo/bin/zkServer.sh start15更多 Java 大數(shù)據(jù) 前端 python 人工智能資料下載,可訪問百度:尚硅谷官網(wǎng)JavaEE 課程系列/opt/cluster-zk/zkthree/bin/zkServer.sh start8.3.3 編輯停止服務(wù)器命令/opt/cluster-zk/zkone/bin/zkServer.sh stop/opt/cluster-zk/zktwo/bin/zkServer.sh stop/opt/cluster-zk/zkthree/bin/zkSe

40、rver.sh stop8.3.4 編輯查看服務(wù)器狀態(tài)命令/opt/cluster-zk/zkone/bin/zkServer.sh status/opt/cluster-zk/zktwo/bin/zkServer.sh status/opt/cluster-zk/zkthree/bin/zkServer.sh status8.3.5 給腳本文件設(shè)置可執(zhí)行權(quán)限chmod 755 /opt/cluster-zk/start.shchmod 755 /opt/cluster-zk/stop.shchmod 755 /opt/cluster-zk/status.sh8.3.6 執(zhí)行腳本/opt/cl

41、uster-zk/start.sh/opt/cluster-zk/stop.sh/opt/cluster-zk/status.sh8.3.7 客戶端登錄/opt/zookeeper-3.4.9/bin/zkCli.sh -server :1000/opt/zookeeper-3.4.9/bin/zkCli.sh -server :2000/opt/zookeeper-3.4.9/bin/zkCli.sh -server :30008.4 集群中服務(wù)器數(shù)量結(jié)論:一般來說,集群中服務(wù)器數(shù)量最好設(shè)置為單數(shù)。原則:集群中有超過一半的服務(wù)器正常工程,

42、則整個(gè)集群判斷為正常工作。對(duì)外提供服務(wù)時(shí)大致滿足預(yù)期。推導(dǎo):共 2 實(shí)例:宕機(jī) 1 實(shí)例,剩下 1=2/2,沒有超過一半。死亡容忍度為 0。共 3 實(shí)例:宕機(jī) 1 實(shí)例,剩下 23/2,超過一半。死亡容忍度為 1。共 4 實(shí)例:宕機(jī) 1 實(shí)例,剩下 34/2,超過一半。死亡容忍度為 1。共 5 實(shí)例:宕機(jī) 2 實(shí)例,剩下 35/2,超過一半。死亡容忍度為 2。共 6 實(shí)例:宕機(jī) 2 實(shí)例,剩下 46/2,超過一半。死亡容忍度為 2。16更多 Java 大數(shù)據(jù) 前端 python 人工智能資料下載,可訪問百度:尚硅谷官網(wǎng)JavaEE 課程系列9 Dubbo 介紹9.1 RPCRemote Pro

43、cedure Call遠(yuǎn)程過程調(diào)用9.2 Dubbo 架構(gòu)Subscribe 訂閱;簽署;贊成器;監(jiān)控器Monitor17更多 Java 大數(shù)據(jù) 前端 python 人工智能資料下載,可訪問百度:尚硅谷官網(wǎng)JavaEE 課程系列9.3 Dubbo 在 Zookeeper 中注冊(cè)信息的結(jié)構(gòu)10Dubbo 使用10.1創(chuàng)建 Common 工程group id:com.atguigu.dubbo artifact id:Pro20-dubbo-common package:jar10.2創(chuàng)建 Provider 工程group id:com.atguigu.dubbo artifact id:Pro21-dubbo-provide

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論