偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

Zookeeper 集群部署的那些事兒

存儲(chǔ) 存儲(chǔ)軟件
ZooKeeper本質(zhì)上是一個(gè)分布式的小文件存儲(chǔ)系統(tǒng)。提供類似于文件系統(tǒng)目錄樹(shù)方式的數(shù)據(jù)存儲(chǔ),并且可以對(duì)書(shū)中的節(jié)點(diǎn)進(jìn)行有效管理。從而用來(lái)維護(hù)和監(jiān)控存儲(chǔ)的數(shù)據(jù)的狀態(tài)變化,通過(guò)監(jiān)控這些數(shù)據(jù)狀態(tài)的變化,實(shí)現(xiàn)基于數(shù)據(jù)的集群管理。

[[428624]]

本文轉(zhuǎn)載自微信公眾號(hào)「牧小農(nóng)」,作者牧小農(nóng)。轉(zhuǎn)載本文請(qǐng)聯(lián)系牧小農(nóng)公眾號(hào)。

簡(jiǎn)介

額。。。。, &*$% 淘氣!

ZooKeeper 是 Apache 的一個(gè)頂級(jí)項(xiàng)目,為分布式應(yīng)用提供高效、高可用的分布式協(xié)調(diào)服務(wù)。

ZooKeeper本質(zhì)上是一個(gè)分布式的小文件存儲(chǔ)系統(tǒng)。提供類似于文件系統(tǒng)目錄樹(shù)方式的數(shù)據(jù)存儲(chǔ),并且可以對(duì)書(shū)中的節(jié)點(diǎn)進(jìn)行有效管理。從而用來(lái)維護(hù)和監(jiān)控存儲(chǔ)的數(shù)據(jù)的狀態(tài)變化,通過(guò)監(jiān)控這些數(shù)據(jù)狀態(tài)的變化,實(shí)現(xiàn)基于數(shù)據(jù)的集群管理。

運(yùn)行模式

ZooKeeper 運(yùn)行模式有三種:?jiǎn)螜C(jī)模式、偽集群模式、集群模式

單機(jī)模式: ZooKeeper 只運(yùn)行一臺(tái)服務(wù)器上面,這種模式一般用于開(kāi)發(fā)測(cè)試環(huán)境,用于節(jié)省機(jī)器數(shù)量,加上開(kāi)發(fā)調(diào)試不需要特別好的穩(wěn)定性

偽集群模式: 這是一種特殊的集群模式,即一臺(tái)服務(wù)器上面部署多個(gè)ZooKeeper實(shí)例,當(dāng)然這個(gè)時(shí)候就需要你這臺(tái)服務(wù)器性能比較好。在這種情況下,我們需要通過(guò)不同的端口來(lái)啟動(dòng)ZooKeeper實(shí)例,以此來(lái)通過(guò)集群的方式對(duì)外提供服務(wù)。

這種模式下,我們只需要修改zoo.cfg下的同一個(gè)服務(wù)器不同端口連接地址即可

  1. server.1=ip1:2888:3888 
  2.  
  3. server.2=ip1:2889:3889 
  4.  
  5. server.3=ip1:2890:3890 

集群模式: Zookeeper集群 運(yùn)行在一組機(jī)器上,一般三臺(tái)以上的機(jī)器就可以組成集群了,組成ZooKeeper集群的每一臺(tái)機(jī)器都會(huì)在內(nèi)存中維護(hù)當(dāng)前服務(wù)的狀態(tài),機(jī)器之間也會(huì)互相保持通信。

只要集群中過(guò)半的服務(wù)存活,就能正常對(duì)外提供服務(wù),如果說(shuō)當(dāng)我們的leader掛掉了,在選舉過(guò)程中是無(wú)法提供服務(wù)的,直到leader選舉完成!

這種模式下,我們只需要修改zoo.cfg下的不同服務(wù)器的連接地址即可

  1. server.1=ip1:2888:3888 
  2.  
  3. server.2=ip2:2888:3888 
  4.  
  5. server.3=ip3:2888:3888 

Zookeeper集群有什么用

ZooKeeper 實(shí)現(xiàn)了高性能,高可靠性和有序的訪問(wèn)。高性能保證了ZooKeeper能應(yīng)用在大型的分布式系統(tǒng)上,高可靠性保證它不會(huì)由于單一節(jié)點(diǎn)的故障而造成任何問(wèn)題。有序的訪問(wèn)能保證客戶端可以實(shí)現(xiàn)較為復(fù)雜的同步操作。

負(fù)載均衡

這里說(shuō)的負(fù)載均衡是指軟負(fù)載均衡。在分布式環(huán)境中,為了保證高可用性,通常同一個(gè)應(yīng)用或同一個(gè)服務(wù)的提供方都會(huì)部署多份,來(lái)達(dá)到高可用。

命名服務(wù)

在分布式系統(tǒng)中,通過(guò)使用命名服務(wù),客戶端應(yīng)用能夠根據(jù)指定名字來(lái)獲取資源或者服務(wù)的地址,提供者等信息。被命名的實(shí)體通??梢允羌褐械臋C(jī)器,提供的服務(wù)地址、遠(yuǎn)程對(duì)象等這些我們可以統(tǒng)稱為Name,其中比較常見(jiàn)的就是一些分布式服務(wù)框架中的服務(wù)地址列表。通過(guò)調(diào)用ZooKeeper提供創(chuàng)建節(jié)點(diǎn)的API,能夠很容易創(chuàng)建一個(gè)全局唯一的Path,這個(gè)Path可以作為一個(gè)名稱。阿里巴巴集團(tuán)開(kāi)源的分布式服務(wù)框架Dubbo中使用ZooKeeper來(lái)作為其命名服務(wù),維護(hù)全局的服務(wù)地址列表,點(diǎn)擊這里查看Dubbo開(kāi)源項(xiàng)目。

分布式協(xié)調(diào)

ZooKeeper中特有的Watcher注冊(cè)與異步通知機(jī)制,能夠?qū)崿F(xiàn)分布式環(huán)境下不同系統(tǒng)之間的通知與協(xié)調(diào),實(shí)現(xiàn)對(duì)數(shù)據(jù)變更的及時(shí)處理,使用方法通常是不同系統(tǒng)都對(duì)ZooKeeper同一個(gè)Znode進(jìn)行注冊(cè),監(jiān)聽(tīng)Znode的變化。如果其中一個(gè)系統(tǒng)更新了Znode,那么另外系統(tǒng)也能夠收到通知,并做出相應(yīng)的處理。

集群管理

集群管理主要是包含其中兩點(diǎn):服務(wù)狀態(tài)監(jiān)聽(tīng)(退出和加入)、master選舉。

服務(wù)狀態(tài)監(jiān)聽(tīng): 所有機(jī)器在父目錄下創(chuàng)建臨時(shí)目錄節(jié)點(diǎn),監(jiān)聽(tīng)父目錄節(jié)點(diǎn)的子節(jié)點(diǎn)變化消息,如果有機(jī)器掛掉,這個(gè)機(jī)器與ZooKeeper的連接斷開(kāi),這個(gè)創(chuàng)建的臨時(shí)目錄節(jié)點(diǎn)就會(huì)被刪除,其他機(jī)器收到消息,某個(gè)服務(wù)下的節(jié)點(diǎn)目錄被刪除,就知道這個(gè)某個(gè)節(jié)點(diǎn)宕機(jī)。

如果有新的機(jī)器或者服務(wù)加入,會(huì)在該父目錄節(jié)點(diǎn)下創(chuàng)建一個(gè)臨時(shí)子節(jié)點(diǎn),所有服務(wù)就會(huì)收到通知,有新的目錄產(chǎn)生。

master選舉: master選舉是ZooKeeper中最為經(jīng)典的應(yīng)用場(chǎng)景了,在分布式環(huán)境中,相同的業(yè)務(wù)應(yīng)用分布在不同的機(jī)器上,有的業(yè)務(wù)邏輯,通常只需要其中一臺(tái)服務(wù)完成,然后其他服務(wù)共享,這樣可以大幅度減少重復(fù)勞動(dòng),提高服務(wù)性能,比如 HDFS 中 Active NameNode 的選舉。

通常情況下,我們可以選擇常見(jiàn)的關(guān)系型數(shù)據(jù)庫(kù)中的主鍵特性來(lái)實(shí)現(xiàn),在成為Master的機(jī)器都想數(shù)據(jù)庫(kù)中插入一條相同主鍵ID的記錄,數(shù)據(jù)庫(kù)會(huì)幫我們進(jìn)行主鍵沖突檢查,也就是說(shuō),只有一臺(tái)機(jī)器能夠插入成功,那么我們就認(rèn)為向數(shù)據(jù)庫(kù)中插入數(shù)據(jù)的機(jī)器就是Master

但是當(dāng)我們的Master機(jī)器掛掉了,那么誰(shuí)能夠告訴我們Master掛掉了,關(guān)系型數(shù)據(jù)庫(kù)是無(wú)法通知我們這個(gè)事情的,但是ZooKeeper可以做到。

ZooKeeper能夠保證在分布式高并發(fā)情況下節(jié)點(diǎn)的創(chuàng)建一定能夠保證全局唯一性,ZooKeeper將會(huì)保證客戶端無(wú)法創(chuàng)建一個(gè)已經(jīng)存在的數(shù)據(jù)單元節(jié)點(diǎn)。也就是說(shuō),如果同時(shí)有多個(gè)客戶端請(qǐng)求創(chuàng)建同一個(gè)臨時(shí)節(jié)點(diǎn),那么最終一定只有一個(gè)客戶端請(qǐng)求能夠創(chuàng)建成功。利用這個(gè)特性,就能很容易的在分布式環(huán)境中進(jìn)行Master選舉了,成功創(chuàng)建該節(jié)點(diǎn)的客戶端所在的機(jī)器就成為了Master,同時(shí)企業(yè)沒(méi)有成功創(chuàng)建該節(jié)點(diǎn)的客戶端,都會(huì)在該節(jié)點(diǎn)上注冊(cè)一個(gè)子節(jié)點(diǎn)變更的Watcher,用于監(jiān)控當(dāng)前的Master機(jī)器是否存活,一旦發(fā)現(xiàn)當(dāng)前的Master掛了,那么其他客戶端將會(huì)重新進(jìn)行Master選舉,這樣就實(shí)現(xiàn)了Master的動(dòng)態(tài)選舉。

ZooKeeper集群必須是奇數(shù)?

一個(gè)ZooKeeper集群通常由一組機(jī)器組成,一般是3臺(tái)以上就可以組成一個(gè)可用的ZooKeeper集群了。只要集群中存在超過(guò)一半的機(jī)器能夠正常工作,那么ZooKeeper集群就能正常對(duì)外提供服務(wù)。

在這里,有一個(gè)誤區(qū),就是為了讓 ZooKeeper 群能夠正確的選舉出 leader 我們必須要把 ZooKeeper 集群服務(wù)器的數(shù)量設(shè)置為奇數(shù),其實(shí)任意臺(tái)的ZooKeeper都可以正常選舉出Leader和運(yùn)行。

關(guān)于集群服務(wù)數(shù)量中,ZooKeeper官方也給出了奇數(shù)的建議,而且基于ZooKeeper 過(guò)半以上存活服務(wù)可用 的特性,如果ZooKeeper需要對(duì)外提供服務(wù),那么至少要保證有過(guò)半存活的機(jī)器能夠正常工作,如果我們想要搭建一臺(tái)允許掛點(diǎn)一定數(shù)量(N)的集群機(jī)器,那我們至少要部署 2*N+1臺(tái)服務(wù)器來(lái)搭建ZooKeeper集群。

容錯(cuò)率

從容錯(cuò)率來(lái)講,我們要保證 過(guò)半以上存活的特性

如果我們?cè)试S掛掉1臺(tái)服務(wù),那我們至少要搭建( 2*1+1)臺(tái)服務(wù)器,也是就3臺(tái)服務(wù)器(3的半數(shù)為1.5,默認(rèn)向下取整為1,半數(shù)以上那就是2)

如果我們?cè)试S掛掉2臺(tái)服務(wù),那我們至少要搭建( 2*1+1)臺(tái)服務(wù)器,也是就5臺(tái)服務(wù)器(5的半數(shù)為2.5,默認(rèn)向下取整為2,半數(shù)以上那就是3)

同樣我們部署六臺(tái)機(jī)器,那么我們遵循過(guò)半以上存活服務(wù)可用的特性,同樣也只能掛掉2臺(tái)服務(wù)器,因?yàn)槿绻麙斓?臺(tái),無(wú)法遵循服務(wù)過(guò)半的特性

因此,我們可以從上面條件中看到,對(duì)于一個(gè)由6臺(tái)服務(wù)器構(gòu)成的ZooKeeper集群來(lái)說(shuō),和一個(gè)用5臺(tái)服務(wù)器構(gòu)成的ZooKeeper集群,在容災(zāi)能力上沒(méi)有任何的顯著優(yōu)勢(shì),所以ZooKeeper集群 通常會(huì)設(shè)置成奇數(shù)臺(tái)服務(wù)器即可

下載

下載地址:https://zookeeper.apache.org/releases.html

安裝

ZooKeeper安裝首先需要安裝JDK,ZooKeeper的安裝步驟在上一篇文章中介紹過(guò),大家感興趣的可以看一下:Zookeeper入門(mén)看這篇就夠了

修改配置

當(dāng)我們將conf下的 zoo_sample.cfg 文件復(fù)制并重命名為 zoo.cfg 文件后,通過(guò) vim zoo.cfg命令對(duì)這個(gè)文件進(jìn)行修改:

  1. # The number of milliseconds of each tick 
  2. tickTime=2000 
  3. # The number of ticks that the initial  
  4. # synchronization phase can take 
  5. initLimit=10 
  6. # The number of ticks that can pass between  
  7. # sending a request and getting an acknowledgement 
  8. syncLimit=5 
  9. # the directory where the snapshot is stored. 
  10. # do not use /tmp for storage, /tmp here is just  
  11. # example sakes. 
  12. dataDir=/tmp/zookeeper 
  13. # the port at which the clients will connect 
  14. clientPort=2181 
  15. # the maximum number of client connections. 
  16. # increase this if you need to handle more clients 
  17. #maxClientCnxns=60 
  18. # Be sure to read the maintenance section of the  
  19. # administrator guide before turning on autopurge. 
  20. # http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance 
  21. # The number of snapshots to retain in dataDir 
  22. #autopurge.snapRetainCount=3 
  23. # Purge task interval in hours 
  24. Set to "0" to disable auto purge feature 
  25. #autopurge.purgeInterval=1 
  26.  
  27. ## Metrics Providers 
  28. # https://prometheus.io Metrics Exporter 
  29. #metricsProvider.className=org.apache.zookeeper.metrics.prometheus.PrometheusMetricsProvider 
  30. #metricsProvider.httpPort=7000 
  31. #metricsProvider.exportJvmInfo=true 
  32.  
  33. server.1=192.168.5.129:2888:3888 
  34. server.2=192.168.5.130:2888:3888 
  35. server.3=192.168.5.131:2888:3888 

tickTime: 客戶端與服務(wù)端或者服務(wù)端和服務(wù)端之間維持心跳的時(shí)間間隔,每隔tickTime時(shí)間就會(huì)發(fā)送一個(gè)心跳,通過(guò)心跳不僅能夠用來(lái)監(jiān)聽(tīng)機(jī)器的工作狀態(tài),還可以通過(guò)心跳來(lái)控制follower和Leader的通信時(shí)間,默認(rèn)情況下FL(Follower和Leader)的會(huì)話通常是心跳間隔的兩倍,單位為毫秒。

initLimit: 集群中的follower服務(wù)器與Leader服務(wù)器之間的初始連接時(shí)能容忍的最多心跳數(shù)量

syncLimit: 急群眾的follower服務(wù)器與leader服務(wù)器之間的請(qǐng)求和回答最多能容忍的心跳數(shù)量

dataDir: 目錄地址,用來(lái)存放myid信息和一些版本、日志、服務(wù)器唯一ID等信息

clientPort: 監(jiān)聽(tīng)客戶端連接的端口

server.n=127.0.0.1:2888:3888

n:代表的是一個(gè)數(shù)字,表示這個(gè)服務(wù)器的標(biāo)號(hào) 127.0.0.1:IP服務(wù)器地址 2888:ZooKeeper服務(wù)器之間的通信端口 3888:Leader選舉的端口

兩個(gè)需要修改的點(diǎn):

  • 修改的是目錄結(jié)構(gòu)(dataDir),不要用它默認(rèn)的
  • 添加server.1 集群服務(wù)器配置信息

官方參考文檔:https://zookeeper.apache.org/doc/r3.5.8/zookeeperStarted.html

創(chuàng)建服務(wù)器ID

在這里我們需要?jiǎng)?chuàng)建一個(gè) myid 的文件,我們需要在 dataDir指定的目錄下,手動(dòng)創(chuàng)建這個(gè)目錄。

創(chuàng)建命令:mkdir-p/tmp/zookeeper

然后在myid 文件里面添加對(duì)應(yīng)的server.1中的 “1” 這個(gè)數(shù)字,如下所示

  1. [root@VM-0-7-centos zookeeper]# more myid  

后面的機(jī)器,依次在 dataDir指定的目錄下(/tmp/zookeeper),創(chuàng)建 myid 文件,寫(xiě)上相應(yīng)配置的數(shù)字,比如我們?cè)? zoo.cfg后面寫(xiě)的是server.1,那么當(dāng)前myid的文件就寫(xiě)一個(gè)數(shù)字1就可以了

  1. server.1=192.168.5.129:2888:3888 
  2. server.2=192.168.5.130:2888:3888 
  3. server.3=192.168.5.131:2888:3888 

配置環(huán)境變量

為了方便我們可以在全局使用ZooKeeper命令,我們需要配置ZooKeeper的環(huán)境變量。

通過(guò)命令:vi/etc/profile

添加ZooKeeper的環(huán)境變量。

  1. export JAVA_HOME=/usr/local/java/jdk1.8.0_261 
  2. export ZK_HOME=/usr/local/java/apache-zookeeper-3.7.0-bin/ 
  3. export PATH=$PATH:$JAVA_HOME/bin:$ZK_HOME/bin 

變量生效:source/etc/profile

關(guān)閉防火墻

在這里大家記得,如果是生產(chǎn)或者正式的,需要開(kāi)放對(duì)應(yīng)的端口進(jìn)行通信。

如果是我們測(cè)試用的服務(wù)器,需要關(guān)閉防火墻,不然會(huì)有攔截,無(wú)法進(jìn)行服務(wù)之間的通信,在這里我們是測(cè)試,關(guān)閉防火墻即可。這里我使用的服務(wù)是CentOS 7.0,默認(rèn)使用的是firewall作為防火墻。

防火墻設(shè)置

查看防火墻狀態(tài):firewall-cmd--state

立即關(guān)閉防火墻,重啟失效:systemctl stop firewalld.service

禁止開(kāi)機(jī)啟動(dòng)防火墻:systemctl disable firewalld.service

端口設(shè)置

開(kāi)放2888端口:firewall-cmd--zone=public--add-port=2888/tcp--permanent

關(guān)閉2888端口:firewall-cmd--zone=public--remove-port=2888/tcp--permanent

啟動(dòng)服務(wù)

查看日志啟動(dòng)命令:zkServer.sh start-foreground

后臺(tái)啟動(dòng)命令:zkServer.sh start

停止命令:zkServer.sh stop

查看狀態(tài)命令:zkServer.sh status

我們分別用 zkServer.sh status命令查看節(jié)點(diǎn)狀態(tài),三臺(tái)機(jī)器中,有兩臺(tái)成為了 follower,一臺(tái)成為了Leader節(jié)點(diǎn)。

使用命名查看ZooKeeper端口情況:netstat-natp|egrep'(2888|3888)'

端口說(shuō)明

3888:是選舉用的 2888:是leader接受write請(qǐng)求

因此我們可以看到130這一臺(tái)機(jī)器出了有 130:2888以外還有130:3888 端口對(duì)自身進(jìn)行監(jiān)聽(tīng),這個(gè)是保證leader可以進(jìn)行write操作的命令,具體通信如下所示:

注意事項(xiàng)

如果搭建中出現(xiàn)問(wèn)題,首先我們需要排查的問(wèn)題,包含以下幾點(diǎn)

防火墻有沒(méi)有關(guān)閉

zoo.cfg 下的文件路徑 dataDir 的目錄有沒(méi)有創(chuàng)建,不是自動(dòng)創(chuàng)建的,需要我們進(jìn)行手動(dòng)創(chuàng)建,創(chuàng)建命令 mkdir-p/tmp/zookeeper

我們可以通過(guò) zkServer.sh start-foreground啟動(dòng)過(guò)程的報(bào)錯(cuò)信息

總結(jié)

到這里,關(guān)于ZooKeeper的集群就講解完畢了,主要介紹了ZooKeepe集群的作用和安裝部署,以及原理,今天的ZooKeeper集群到這里就講完了,下期精彩持續(xù)更新中。

 

碼字不易,感興趣的小伙伴記得點(diǎn)贊關(guān)注~

 

責(zé)任編輯:武曉燕 來(lái)源: 牧小農(nóng)
相關(guān)推薦

2022-06-06 15:49:24

容器無(wú)服務(wù)器docker

2023-04-11 07:34:40

分布式系統(tǒng)算法

2021-03-18 09:01:53

軟件開(kāi)發(fā)軟件選型

2021-06-02 08:33:31

TPCTPC-H系統(tǒng)

2018-09-26 06:50:19

2011-02-25 14:35:00

2022-02-08 17:39:04

MySQL服務(wù)器存儲(chǔ)

2013-12-26 14:23:03

定位系統(tǒng)GPS監(jiān)測(cè)

2021-06-09 13:28:40

密碼安全身份認(rèn)證數(shù)據(jù)安全

2018-02-02 13:58:59

數(shù)據(jù)存儲(chǔ)

2010-04-07 13:13:19

Visual Stud

2012-07-19 15:30:00

Linux

2013-07-09 13:50:05

2022-11-04 07:57:59

編程編碼編譯器

2022-08-04 10:18:32

棧遷移?寄存器內(nèi)存

2021-05-10 08:58:09

Harbor架構(gòu)Registry 服務(wù)

2017-08-09 08:25:35

DBA數(shù)據(jù)庫(kù)OLAP

2010-10-15 10:31:00

2021-02-01 14:17:53

裝飾器外層函數(shù)里層函數(shù)

2021-03-09 23:12:51

Python集合項(xiàng)目
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)