欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java Zookeeper簡(jiǎn)述

 更新時(shí)間:2021年09月06日 11:29:22   作者:flystar27  
ZooKeeper是一個(gè)分布式的,開(kāi)放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù),是Google的Chubby一個(gè)開(kāi)源的實(shí)現(xiàn),是Hadoop和Hbase的重要組件。下面通過(guò)本文給大家分享java 中 zookeeper簡(jiǎn)單使用,需要的朋友參考下吧

Zookeeper 是一個(gè)分布式協(xié)調(diào)服務(wù),可用于服務(wù)發(fā)現(xiàn),分布式鎖,分布式領(lǐng)導(dǎo)選舉,配置管理等。Zookeeper 提供了一個(gè)類似于 Linux 文件系統(tǒng)的樹(shù)形結(jié)構(gòu)(可認(rèn)為是輕量級(jí)的內(nèi)存文件系統(tǒng),但只適合存少量信息,完全不適合存儲(chǔ)大量文件或者大文件),同時(shí)提供了對(duì)于每個(gè)節(jié)點(diǎn)的監(jiān)控通知機(jī)制。

Zookeeper 角色

Zookeeper 集群是一個(gè)基于主從復(fù)制的高可用集群,每個(gè)服務(wù)器承擔(dān)如下三種角色中的一種

Leader

1.一個(gè) Zookeeper 集群同一時(shí)間只會(huì)有一個(gè)實(shí)際工作的 Leader,它會(huì)發(fā)起并維護(hù)與各 Follwer及 Observer 間的心跳。

2.所有的寫(xiě)操作必須要通過(guò) Leader 完成再由 Leader 將寫(xiě)操作廣播給其它服務(wù)器。只要有超過(guò)半數(shù)節(jié)點(diǎn)(不包括 observeer 節(jié)點(diǎn))寫(xiě)入成功,該寫(xiě)請(qǐng)求就會(huì)被提交(類 2PC 協(xié)議)。

Follower

1.一個(gè) Zookeeper 集群可能同時(shí)存在多個(gè) Follower,它會(huì)響應(yīng) Leader 的心跳,

2.Follower 可直接處理并返回客戶端的讀請(qǐng)求,同時(shí)會(huì)將寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給 Leader 處理,

3.并且負(fù)責(zé)在 Leader 處理寫(xiě)請(qǐng)求時(shí)對(duì)請(qǐng)求進(jìn)行投票。

Observer

角色與 Follower 類似,但是無(wú)投票權(quán)。Zookeeper 需保證高可用和強(qiáng)一致性,為了支持更多的客戶端,需要增加更多 Server;Server 增多,投票階段延遲增大,影響性能;引入 Observer,Observer 不參與投票; Observers 接受客戶端的連接,并將寫(xiě)請(qǐng)求轉(zhuǎn)發(fā)給 leader 節(jié)點(diǎn); 加入更多 Observer 節(jié)點(diǎn),提高伸縮性,同時(shí)不影響吞吐率。

在這里插入圖片描述

Zookeeper 工作原理(原子廣播)

1.Zookeeper 的核心是原子廣播,這個(gè)機(jī)制保證了各個(gè) server 之間的同步。實(shí)現(xiàn)這個(gè)機(jī)制的協(xié)議叫做 Zab 協(xié)議。Zab 協(xié)議有兩種模式,它們分別是恢復(fù)模式和廣播模式。

2.當(dāng)服務(wù)啟動(dòng)或者在領(lǐng)導(dǎo)者崩潰后,Zab 就進(jìn)入了恢復(fù)模式,當(dāng)領(lǐng)導(dǎo)者被選舉出來(lái),且大多數(shù) server 的完成了和 leader 的狀態(tài)同步以后,恢復(fù)模式就結(jié)束了。

3.狀態(tài)同步保證了 leader 和 server 具有相同的系統(tǒng)狀態(tài)

4.一旦 leader 已經(jīng)和多數(shù)的 follower 進(jìn)行了狀態(tài)同步后,他就可以開(kāi)始廣播消息了,即進(jìn)入廣播狀態(tài)。這時(shí)候當(dāng)一個(gè) server 加入 zookeeper 服務(wù)中,它會(huì)在恢復(fù)模式下啟動(dòng),發(fā)現(xiàn) leader,并和 leader 進(jìn)行狀態(tài)同步。待到同步結(jié)束,它也參與消息廣播。Zookeeper服務(wù)一直維持在 Broadcast 狀態(tài),直到 leader 崩潰了或者 leader 失去了大部分的followers 支持。

5.廣播模式需要保證 proposal 被按順序處理,因此 zk 采用了遞增的事務(wù) id 號(hào)(zxid)來(lái)保證。所有的提議(proposal)都在被提出的時(shí)候加上了 zxid。

6.實(shí)現(xiàn)中 zxid 是一個(gè) 64 為的數(shù)字,它高 32 位是 epoch 用來(lái)標(biāo)識(shí) leader 關(guān)系是否改變,每次一個(gè) leader 被選出來(lái),它都會(huì)有一個(gè)新的 epoch。低 32 位是個(gè)遞增計(jì)數(shù)。

7.當(dāng) leader 崩潰或者 leader 失去大多數(shù)的 follower,這時(shí)候 zk 進(jìn)入恢復(fù)模式,恢復(fù)模式需要重新選舉出一個(gè)新的 leader,讓所有的 server 都恢復(fù)到一個(gè)正確的狀態(tài)。

 Znode 四種形式的目錄節(jié)點(diǎn)

  • PERSISTENT:持久的節(jié)點(diǎn)。
  • EPHEMERAL:暫時(shí)的節(jié)點(diǎn)。
  • PERSISTENT_SEQUENTIAL:持久化順序編號(hào)目錄節(jié)點(diǎn)。
  • EPHEMERAL_SEQUENTIAL:暫時(shí)化順序編號(hào)目錄節(jié)點(diǎn)。

ZooKeeper 安裝和使用

  • 使用 Docker 下載 ZooKeeper

docker pull zookeeper:3.5.8

  • 運(yùn)行 ZooKeeper

docker run -d --name zookeeper -p 2181:2181 zookeeper:3.5.8

  • 連接 ZooKeeper 服務(wù)

先使用 docker ps 查看 ZooKeeper 的 ContainerID,然后使用 docker exec -it ContainerID /bin/bash 命令進(jìn)入容器中。
進(jìn)入 bin 目錄,然后通過(guò) ./zkCli.sh -server 127.0.0.1:2181命令連接ZooKeeper 服務(wù)

root@eaf70fc620cb:/apache-zookeeper-3.5.8-bin# cd bin

成功連接 ZooKeeper 服務(wù)后頁(yè)面

在這里插入圖片描述

常用命令

可通過(guò) help 命令查看 ZooKeeper 常用命令

  • 創(chuàng)建節(jié)點(diǎn)(create 命令)

通過(guò) create 命令在根目錄創(chuàng)建了 node1 節(jié)點(diǎn),與它關(guān)聯(lián)的字符串是"node1"

[zk: 127.0.0.1:2181(CONNECTED) 34] create /node1 “node1”

通過(guò) create 命令在根目錄創(chuàng)建了 node1 節(jié)點(diǎn),與它關(guān)聯(lián)的內(nèi)容是數(shù)字 123

[zk: 127.0.0.1:2181(CONNECTED) 1] create /node1/node1.1 123
Created /node1/node1.1

更新節(jié)點(diǎn)數(shù)據(jù)內(nèi)容(set 命令)

[zk: 127.0.0.1:2181(CONNECTED) 11] set /node1 "set node1"

  • 獲取節(jié)點(diǎn)的數(shù)據(jù)(get 命令)

get 命令可以獲取指定節(jié)點(diǎn)的數(shù)據(jù)內(nèi)容和節(jié)點(diǎn)的狀態(tài),可以看出我們通過(guò) set 命令已經(jīng)將節(jié)點(diǎn)數(shù)據(jù)內(nèi)容改為 “set node1”。

set node1
cZxid = 0x47
ctime = Sun Jan 20 10:22:59 CST 2019
mZxid = 0x4b
mtime = Sun Jan 20 10:41:10 CST 2019
pZxid = 0x4a
cversion = 1
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 9
numChildren = 1
  • 查看某個(gè)目錄下的子節(jié)點(diǎn)(ls 命令)

通過(guò) ls 命令查看根目錄下的節(jié)點(diǎn)

[zk: 127.0.0.1:2181(CONNECTED) 37] ls /
[dubbo, ZooKeeper, node1]

通過(guò) ls 命令查看 node1 目錄下的節(jié)點(diǎn)

[zk: 127.0.0.1:2181(CONNECTED) 5] ls /node1
[node1.1]

ZooKeeper 中的 ls 命令和 linux 命令中的 ls 類似, 這個(gè)命令將列出絕對(duì)路徑 path 下的所有子節(jié)點(diǎn)信息(列出 1 級(jí),并不遞歸)

  • 查看節(jié)點(diǎn)狀態(tài)(stat 命令)

通過(guò) stat 命令查看節(jié)點(diǎn)狀態(tài)

[zk: 127.0.0.1:2181(CONNECTED) 10] stat /node1
cZxid = 0x47
ctime = Sun Jan 20 10:22:59 CST 2019
mZxid = 0x47
mtime = Sun Jan 20 10:22:59 CST 2019
pZxid = 0x4a
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 1
  • 查看節(jié)點(diǎn)信息和狀態(tài)(ls2 命令)

ls2 命令更像是 ls 命令和 stat 命令的結(jié)合。 ls2 命令返回的信息包括 2 部分:

1.子節(jié)點(diǎn)列表

2.當(dāng)前節(jié)點(diǎn)的 stat 信息。

[zk: 127.0.0.1:2181(CONNECTED) 7] ls2 /node1
[node1.1]
cZxid = 0x47
ctime = Sun Jan 20 10:22:59 CST 2019
mZxid = 0x47
mtime = Sun Jan 20 10:22:59 CST 2019
pZxid = 0x4a
cversion = 1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 11
numChildren = 1
  • 刪除節(jié)點(diǎn)(delete 命令)

這個(gè)命令很簡(jiǎn)單,但是需要注意的一點(diǎn)是如果你要?jiǎng)h除某一個(gè)節(jié)點(diǎn),那么這個(gè)節(jié)點(diǎn)必須無(wú)子節(jié)點(diǎn)才行。

[zk: 127.0.0.1:2181(CONNECTED) 3] delete /node1/node1.1

總結(jié)

本篇文章就到這里了,希望能夠給你帶來(lái)幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Java實(shí)現(xiàn)簡(jiǎn)單的銀行管理系統(tǒng)的示例代碼

    Java實(shí)現(xiàn)簡(jiǎn)單的銀行管理系統(tǒng)的示例代碼

    這篇文章主要介紹了如何利用Java實(shí)現(xiàn)簡(jiǎn)單的銀行管理系統(tǒng),可以實(shí)現(xiàn)存款,取款,查詢等功能,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-09-09
  • Gradle環(huán)境下導(dǎo)出Swagger為PDF的步驟詳解

    Gradle環(huán)境下導(dǎo)出Swagger為PDF的步驟詳解

    這篇文章主要介紹了Gradle環(huán)境下導(dǎo)出Swagger為PDF的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06
  • Java排序算法之計(jì)數(shù)排序解析

    Java排序算法之計(jì)數(shù)排序解析

    這篇文章主要介紹了Java排序算法之計(jì)數(shù)排序解析,找到數(shù)組中數(shù)值最大的元素,創(chuàng)建一個(gè)長(zhǎng)度為最大元素+1的臨時(shí)數(shù)組,這樣就可以把原始數(shù)組轉(zhuǎn)換為以原始數(shù)組元素值為下標(biāo),相同元素個(gè)數(shù)為值的臨時(shí)數(shù)組,需要的朋友可以參考下
    2023-10-10
  • ssm框架+PageHelper插件實(shí)現(xiàn)分頁(yè)查詢功能

    ssm框架+PageHelper插件實(shí)現(xiàn)分頁(yè)查詢功能

    今天小編教大家如何通過(guò)ssm框架+PageHelper插件實(shí)現(xiàn)分頁(yè)查詢功能,首先大家需要新建一個(gè)maven工程引入jar包,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-06-06
  • Springboot集成JUnit5優(yōu)雅進(jìn)行單元測(cè)試的示例

    Springboot集成JUnit5優(yōu)雅進(jìn)行單元測(cè)試的示例

    這篇文章主要介紹了Springboot集成JUnit5優(yōu)雅進(jìn)行單元測(cè)試的示例,幫助大家更好的理解和使用springboot框架,感興趣的朋友可以了解下
    2020-10-10
  • Spring Boot無(wú)縫集成MongoDB

    Spring Boot無(wú)縫集成MongoDB

    這篇文章主要介紹了Spring Boot無(wú)縫集成MongoDB的相關(guān)知識(shí),本文涉及到MongoDB的概念和nosql的應(yīng)用場(chǎng)景,需要的朋友可以參考下
    2017-04-04
  • Springboot mybais配置多數(shù)據(jù)源過(guò)程解析

    Springboot mybais配置多數(shù)據(jù)源過(guò)程解析

    這篇文章主要介紹了Springboot+mybais配置多數(shù)據(jù)源過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • win10操作系統(tǒng)下重啟電腦java環(huán)境變量失效

    win10操作系統(tǒng)下重啟電腦java環(huán)境變量失效

    這篇文章主要介紹了win10操作系統(tǒng)下重啟電腦java環(huán)境變量失效,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • java并發(fā)編程之深入理解Synchronized的使用

    java并發(fā)編程之深入理解Synchronized的使用

    文詳細(xì)講述了線程、進(jìn)程的關(guān)系及在操作系統(tǒng)中的表現(xiàn),這是多線程學(xué)習(xí)必須了解的基礎(chǔ)。本文將接著講一下Java線程同步中的一個(gè)重要的概念synchronized,希望能夠給你有所幫助
    2021-06-06
  • Java Arrays.asList使用方法解析

    Java Arrays.asList使用方法解析

    這篇文章主要介紹了Java Arrays.asList使用方法解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03

最新評(píng)論