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

ZooKeeper集群操作及集群Master選舉搭建啟動(dòng)

 更新時(shí)間:2022年08月10日 17:14:49   作者:行百里er  
這篇文章主要為大家介紹了ZooKeeper集群操作及集群Master選舉搭的建啟動(dòng)詳解,<BR>有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

ZooKeeper介紹

ZooKeeper 是一個(gè)為 分布式應(yīng)用 提供的 分布式 、開源的 協(xié)調(diào)服務(wù)

它公開了一組簡(jiǎn)單的 原語(yǔ) ,分布式應(yīng)用程序可以根據(jù)這些原語(yǔ)來實(shí)現(xiàn)用于 同步 、配置維護(hù) 以及 命名 的更高級(jí)別的服務(wù)。

怎么理解協(xié)調(diào)服務(wù)呢?比如我們有很多應(yīng)用程序,他們之間都需要讀寫維護(hù)一個(gè) id ,那么這些 id 怎么命名呢,程序一多,必然會(huì)亂套,ZooKeeper 能協(xié)調(diào)這些服務(wù),解決命名、配置、同步等問題,而做到這些,只需要一組簡(jiǎn)單的 原語(yǔ) 即可:

create : 在樹中的某個(gè)位置創(chuàng)建一個(gè)節(jié)點(diǎn)

delete : 刪除一個(gè)節(jié)點(diǎn)

exists : 測(cè)試節(jié)點(diǎn)是否存在于某個(gè)位置

get data : 從節(jié)點(diǎn)讀取數(shù)據(jù)

set data : 往一個(gè)節(jié)點(diǎn)里寫入數(shù)據(jù)

get children : 檢索節(jié)點(diǎn)的子節(jié)點(diǎn)列表

sync : 等待數(shù)據(jù)被傳播

從這些 ZooKeeper (以下簡(jiǎn)稱ZK)的 API 可以看到,都是圍繞 Node 來操作,下文實(shí)操看一下怎么操作 Node 。

ZooKeeper特征

  • 簡(jiǎn)單

ZooKeeper 允許分布式進(jìn)程通過 共享的層級(jí)命名空間 相互協(xié)調(diào),該命名空間的組織類似于標(biāo)準(zhǔn)文件系統(tǒng)。

命名空間由數(shù)據(jù)寄存器組成,在 ZooKeeper 稱為 znodes ,它們類似于文件和目錄。

與典型的文件系統(tǒng)不同,它是為 存儲(chǔ) 而設(shè)計(jì)的,ZooKeeper 數(shù)據(jù)保存在 內(nèi)存 中,這意味著ZooKeeper 可以實(shí)現(xiàn) 高吞吐量低延遲數(shù) 。

ZooKeeper 很重視 高性能,高可用性 ,嚴(yán)格有序訪問 :性能高意味著它可以在大型分布式系統(tǒng)中使用;而他又具備可靠性,這使它不會(huì)成為單點(diǎn)故障;嚴(yán)格的排序意味著可以在客戶端上實(shí)現(xiàn)復(fù)雜的同步原語(yǔ)。

  • 可被復(fù)制(高可用)

像它協(xié)調(diào)的分布式進(jìn)程一樣,ZooKeeper 本身也可以在稱為集合的一組主機(jī)上進(jìn)行復(fù)制。

組成ZooKeeper 服務(wù)的服務(wù)器都必須彼此了解。它們維護(hù)內(nèi)存中的狀態(tài)鏡像,以及持久存儲(chǔ)中的事務(wù)日志和快照。只要大多數(shù)服務(wù)器可用,ZooKeeper 服務(wù)將可用。

客戶端連接到單個(gè) ZooKeeper 服務(wù)器??蛻舳司S護(hù)一個(gè) TCP連接 ,通過該連接發(fā)送請(qǐng)求,獲取響應(yīng),獲取監(jiān)視事件并發(fā)送心跳。如果與服務(wù)器的 TCP連接 斷開,則客戶端將連接到其他服務(wù)器。

  • 有序的

ZooKeeper 用一個(gè)反映所有 ZooKeeper 事務(wù)順序 的數(shù)字標(biāo)記每個(gè)更新。后續(xù)操作可以使用該命令來實(shí)現(xiàn)更高級(jí)別的抽象,例如 同步 、 分布式鎖

讀取為主 的工作負(fù)載中,它特別快。

ZooKeeper 應(yīng)用程序可在數(shù)千臺(tái)計(jì)算機(jī)上運(yùn)行,并且在讀取比寫入更常見的情況下,其性能最佳,比率約為10:1。

分層命名空間

ZooKeeper提供的名稱空間與標(biāo)準(zhǔn)文件系統(tǒng)的名稱空間非常相似。

名稱是由 斜杠/)分隔的一系列路徑元素。ZooKeeper 命名空間中的每個(gè)節(jié)點(diǎn)均由路徑標(biāo)識(shí)。

一個(gè) ZK Node 可以存儲(chǔ) 1M 數(shù)據(jù),Node分為 持久節(jié)點(diǎn)臨時(shí)性節(jié)點(diǎn) 。

  • 持久節(jié)點(diǎn)

與標(biāo)準(zhǔn)文件系統(tǒng)不同,ZooKeeper 命名空間中的每個(gè)節(jié)點(diǎn)都可以具有與其關(guān)聯(lián)的 數(shù)據(jù) 以及 子節(jié)點(diǎn) 。就像擁有一個(gè)文件系統(tǒng)一樣,該文件系統(tǒng)也允許文件成為目錄。

ZooKeeper旨在存儲(chǔ)協(xié)調(diào)數(shù)據(jù):狀態(tài)信息,配置,位置信息等,因此存儲(chǔ)在每個(gè)節(jié)點(diǎn)上的數(shù)據(jù)通常很小,在字節(jié)到千字節(jié)范圍內(nèi)。

Znodes 維護(hù)一個(gè)統(tǒng)計(jì)信息結(jié)構(gòu),其中包括用于 數(shù)據(jù)更改 ,ACL更改(權(quán)限控制)時(shí)間戳的版本號(hào) ,以允許進(jìn)行 緩存驗(yàn)證協(xié)調(diào)更新 。

Znode 的數(shù)據(jù)每次更改時(shí),版本號(hào)都會(huì)增加。例如,每當(dāng)客戶端檢索數(shù)據(jù)時(shí),它也會(huì)接收數(shù)據(jù)的版本。

原子地讀取和寫入存儲(chǔ)在名稱空間中每個(gè) Znode 上的數(shù)據(jù)。讀取將獲取與znode關(guān)聯(lián)的所有數(shù)據(jù)字節(jié),而寫入將替換所有數(shù)據(jù)。每個(gè)節(jié)點(diǎn)都有一個(gè)訪問控制列表(ACL),用于限制誰(shuí)可以做什么。

  • 臨時(shí)節(jié)點(diǎn)

只要?jiǎng)?chuàng)建 Znode 的會(huì)話處于 活動(dòng)狀態(tài) ,這些 Znode 就一致存在。會(huì)話結(jié)束時(shí),將刪除 Znode ,這就是臨時(shí)節(jié)點(diǎn)。

類比于web容器比如tomcat的session,創(chuàng)建臨時(shí)節(jié)點(diǎn)的session存在,則node存在,session結(jié)束,刪除node。

以上是理論知識(shí),還是實(shí)際操作一遍比較靠譜,理解一下zk創(chuàng)建連接、node、session這些概念,以及看看zk集群的leader出故障后,選出leader的速度。

搭建ZK集群

首先準(zhǔn)備 4 臺(tái) CentOS 7 虛擬機(jī),都安裝好了JDK 8(JDK版本最好不要小于8)。

這四臺(tái)虛擬機(jī)主機(jī)名稱分別設(shè)置為:zknode01 、zknode02 、zknode03zknode04 。

hostnamectl set-hostname zknode01

主機(jī)名在配置 ZooKeeper 集群的時(shí)候有用。

主機(jī)名稱配置好之后,還需要配置主機(jī)名和IP地址的映射關(guān)系,每臺(tái)主機(jī)均編輯 /etc/hosts 文件,末尾添加如下內(nèi)容:

192.168.242.11 zknode01
192.168.242.12 zknode02
192.168.242.13 zknode03
192.168.242.14 zknode04

保證每臺(tái)主機(jī)都能互相 ping 通:

接下來,先安裝配置好其中一臺(tái)服務(wù)器的 ZooKeeper ,然后用 scp 分發(fā)到各個(gè)服務(wù)器,再分別修改 zk serverid ,這樣不用每臺(tái)虛擬機(jī)都執(zhí)行一遍相同的操作。

下載zk,注意一定要是apache-zookeeper-3.7.1-bin.tar.gz這個(gè)帶bin的,否則如果不是帶bin的,啟動(dòng)的時(shí)候會(huì)報(bào)如下錯(cuò)誤:

Error: Could not find or load main class org.apache.zookeeper.server.quorum.QuorumPeerMain
Caused by: java.lang.ClassNotFoundException: org.apache.zookeeper.server.quorum.QuorumPeerMain

保姆式安裝zk步驟:

將下載好的 apache-zookeeper-3.7.1-bin.tar.gz 放到/opt目錄下
1. cd /opt
2. tar xf apache-zookeeper-3.7.1-bin.tar.gz
3. mv apache-zookeeper-3.7.1-bin zookeeper
4. vi /etc/profile
export JAVA_HOME=/usr/local/java
export ZK_HOME=/opt/zookeeper
export PATH=$PATH:$JAVA_HOME/bin:$ZK_HOME/bin
5. source /etc/profile
6. cd /opt/zookeeper/conf
7. cp zoo_sample.cfg zoo.cfg
8. vi zoo.cfg
設(shè)置 dataDir=/var/zookeeper
末尾添加:
server.1=zknode01:2888:3888
server.2=zknode02:2888:3888
server.3=zknode03:2888:3888
server.4=zknode04:2888:3888
9. mkdir -p /var/zookeeper
10. echo 1 > /var/zookeeper/myid

這樣 zknode01 的 zkserver 就搭建好了,現(xiàn)在將 ZooKeeper目錄配置文件 分發(fā)到其余三臺(tái)服務(wù)器:

# 傳到 zknode02
scp -r /opt/zookeeper/ root@zknode02:/opt/
scp /etc/profile root@zknode02:/etc
# 傳到 zknode03
scp -r /opt/zookeeper/ root@zknode03:/opt/
scp /etc/profile root@zknode03:/etc
# 傳到 zknode04
scp -r /opt/zookeeper/ root@zknode04:/opt/
scp /etc/profile root@zknode04:/etc

別忘了 ,每臺(tái)主機(jī)都需要執(zhí)行 source /etc/profile 和創(chuàng)建 /var/zookeeper/myid 文件,myid 的內(nèi)容分別為 2,3,4 。

這樣 zk集群 就搭建好了。

啟動(dòng)zk集群

按順序啟動(dòng) zknode01zknode02 ,zknode03zknode04 的zk服務(wù):

zkServer.sh start-foreground

zk默認(rèn)后臺(tái)啟動(dòng),start-foreground表示前臺(tái)啟動(dòng),方便看日志。

啟動(dòng)zknode01的zk server:

會(huì)報(bào)錯(cuò),因?yàn)?zoo.cfg 配置了4臺(tái)主機(jī),其余三臺(tái)還未啟動(dòng),接著啟動(dòng) zknode02 的:

現(xiàn)象同 zknode01 ,繼續(xù)啟動(dòng)第三臺(tái):

這個(gè)時(shí)候也會(huì)報(bào) zknode04 連接不上(因?yàn)檫€沒啟動(dòng)),但是整個(gè)zk集群已經(jīng)啟動(dòng)了,并且選擇了 zknode03 這個(gè)為leader。

zknode04 也啟動(dòng)一下:

啟動(dòng)完成后,開一個(gè) zknode01 的zk客戶端:

zkCli.sh
[zk: localhost:2181(CONNECTED) 0] help
ZooKeeper -server host:port -client-configuration properties-file cmd args
	addWatch [-m mode] path # optional mode is one of [PERSISTENT, PERSISTENT_RECURSIVE] - default is PERSISTENT_RECURSIVE
	addauth scheme auth
	close 
	config [-c] [-w] [-s]
	connect host:port
	create [-s] [-e] [-c] [-t ttl] path [data] [acl]
	delete [-v version] path
	deleteall path [-b batch size]
	delquota [-n|-b] path
	get [-s] [-w] path
	getAcl [-s] path
	getAllChildrenNumber path
	getEphemerals path
	history 
	listquota path
	ls [-s] [-w] [-R] path
	printwatches on|off
	quit 

用上面的命令操作一波:

[zk: localhost:2181(CONNECTED) 1] ls
ls [-s] [-w] [-R] path
[zk: localhost:2181(CONNECTED) 2] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 3] 
[zk: localhost:2181(CONNECTED) 3] create /laogong
Created /laogong
[zk: localhost:2181(CONNECTED) 4] ls /
[laogong, zookeeper]
[zk: localhost:2181(CONNECTED) 5] get /laogong 
null
[zk: localhost:2181(CONNECTED) 6] create /laogong "laogong"
Node already exists: /laogong
[zk: localhost:2181(CONNECTED) 7] delete /laogong
[zk: localhost:2181(CONNECTED) 8] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 9] create /laogong "laogong"
Created /laogong
[zk: localhost:2181(CONNECTED) 10] ls /
[laogong, zookeeper]
[zk: localhost:2181(CONNECTED) 11] get /laogong
laogong
[zk: localhost:2181(CONNECTED) 12] create /laogong/laopo "laopo"
Created /laogong/laopo
[zk: localhost:2181(CONNECTED) 13] ls /
[laogong, zookeeper]
[zk: localhost:2181(CONNECTED) 14] ls /laogong
[laopo]
[zk: localhost:2181(CONNECTED) 15] get /laogong/laopo
laopo
[zk: localhost:2181(CONNECTED) 16] 

上面的操作我都是在 zknode01 上面連接zk進(jìn)行操作的,來看一下,在其他zkserver上有沒有同步過來數(shù)據(jù):

發(fā)現(xiàn)數(shù)據(jù)已經(jīng)同步,zknode03zknode04 數(shù)據(jù)也同步了。

再來看一下連接 zknode02 的連接狀態(tài):

[root@zknode02 ~]# netstat -natp   |   egrep  '(2888|3888)' 
tcp6       0      0 192.168.242.12:3888     :::*                    LISTEN      9530/java           
tcp6       0      0 192.168.242.12:3888     192.168.242.13:47474    ESTABLISHED 9530/java           
tcp6       0      0 192.168.242.12:37804    192.168.242.13:2888     ESTABLISHED 9530/java           
tcp6       0      0 192.168.242.12:3888     192.168.242.14:47530    ESTABLISHED 9530/java           
tcp6       0      0 192.168.242.12:39666    192.168.242.11:3888     ESTABLISHED 9530/java

連接狀態(tài)分析:

上圖是從 zknode02 服務(wù)器查看的,通過查看每臺(tái)服務(wù)器,最終,zk集群的服務(wù)器每臺(tái)都 互相通信

這個(gè) 3888 端口就是選舉master用的,而 2888 端口是leader接受write請(qǐng)求用的。

zk集群master選舉

前面演示了有 4 個(gè)服務(wù)器的 zk集群 ,其中 zknode03 是 leader 。

現(xiàn)在我把 zknode03 服務(wù)干掉:

^C[root@zknode03 conf]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /opt/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Error contacting service. It is probably not running.
[root@zknode03 conf]# 
[root@localhost ~]# 

再來分別看一下 zknode01 ~ zknode04的 zk server 狀態(tài):

可以看到 zknode04 自動(dòng)成了 leader !

事實(shí)上,zk集群 選舉 leader 采用的是 謙讓 的辦法,誰(shuí)的 id 大,選舉誰(shuí)。

那么前面為什么zknode3是leader呢?

因?yàn)槲覇?dòng)的順序是 zknode01 ~ zknode04 啟動(dòng)的,當(dāng) zknode03 的zk server 啟動(dòng)的時(shí)候,已經(jīng) 滿足集群的最少節(jié)點(diǎn)數(shù) 了,而且 zknode03 的 id 是 當(dāng)時(shí) 最大的,所以 zknode03 的 server自動(dòng)成了 leader 。

以上就是ZooKeeper集群操作及集群Master選舉搭建啟動(dòng)的詳細(xì)內(nèi)容,更多關(guān)于ZooKeeper集群操作選舉的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java中實(shí)現(xiàn)雙數(shù)組Trie樹實(shí)例

    Java中實(shí)現(xiàn)雙數(shù)組Trie樹實(shí)例

    這篇文章主要介紹了Java中實(shí)現(xiàn)雙數(shù)組Trie樹實(shí)例,雙數(shù)組Trie就是一種優(yōu)化了空間的Trie樹,本文給出了實(shí)現(xiàn)代碼、測(cè)試代碼和測(cè)試結(jié)果,需要的朋友可以參考下
    2015-01-01
  • springboot實(shí)現(xiàn)全局異常處理及自定義異常類

    springboot實(shí)現(xiàn)全局異常處理及自定義異常類

    這篇文章主要介紹了springboot實(shí)現(xiàn)全局異常處理及自定義異常類,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Spring?Aop+Redis實(shí)現(xiàn)優(yōu)雅記錄接口調(diào)用情況

    Spring?Aop+Redis實(shí)現(xiàn)優(yōu)雅記錄接口調(diào)用情況

    通常情況下,開發(fā)完一個(gè)接口,無論是在測(cè)試階段還是生產(chǎn)上線,我們都需要對(duì)接口的執(zhí)行情況做一個(gè)監(jiān)控,所以本文為大家整理了Spring統(tǒng)計(jì)接口調(diào)用的多種方法,希望對(duì)大家有所幫助
    2023-06-06
  • 使用JMX連接JVM實(shí)現(xiàn)過程詳解

    使用JMX連接JVM實(shí)現(xiàn)過程詳解

    這篇文章主要介紹了使用JMX連接JVM實(shí)現(xiàn)過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Spring與Struts整合之使用自動(dòng)裝配操作示例

    Spring與Struts整合之使用自動(dòng)裝配操作示例

    這篇文章主要介紹了Spring與Struts整合之使用自動(dòng)裝配操作,結(jié)合實(shí)例形式詳細(xì)分析了Spring與Struts整合使用自動(dòng)裝配具體操作步驟與相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2020-01-01
  • SpringMVC源碼解讀之HandlerMapping

    SpringMVC源碼解讀之HandlerMapping

    這篇文章主要介紹了SpringMVC源碼解讀之HandlerMapping 的相關(guān)資料,需要的朋友可以參考下
    2016-02-02
  • IntelliJ-Idea導(dǎo)出可執(zhí)行Jar流程解析

    IntelliJ-Idea導(dǎo)出可執(zhí)行Jar流程解析

    這篇文章主要介紹了IntelliJ-Idea導(dǎo)出可執(zhí)行Jar流程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • Android應(yīng)用開發(fā)的一般文件組織結(jié)構(gòu)講解

    Android應(yīng)用開發(fā)的一般文件組織結(jié)構(gòu)講解

    這篇文章主要介紹了Android應(yīng)用開發(fā)的一般文件組織結(jié)構(gòu)講解,同時(shí)附帶介紹了一個(gè)獲取Android的文件列表的方法,需要的朋友可以參考下
    2015-12-12
  • Spring Boot 項(xiàng)目創(chuàng)建的詳細(xì)步驟(圖文)

    Spring Boot 項(xiàng)目創(chuàng)建的詳細(xì)步驟(圖文)

    這篇文章主要介紹了Spring Boot 項(xiàng)目創(chuàng)建的詳細(xì)步驟(圖文),這里我們有兩種創(chuàng)建Spring Boot項(xiàng)目的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • SpringBoot項(xiàng)目中定時(shí)器的實(shí)現(xiàn)示例

    SpringBoot項(xiàng)目中定時(shí)器的實(shí)現(xiàn)示例

    在Spring?Boot項(xiàng)目中,你可以使用Spring框架提供的@Scheduled注解來編寫定時(shí)任務(wù),本文就來介紹一下SpringBoot項(xiàng)目中定時(shí)器的實(shí)現(xiàn),感興趣的可以了解一下
    2023-11-11

最新評(píng)論