摘要:本章內(nèi)容主要講的是集群搭建相關(guān)的知識。在集群模式下,最少需要三個(gè)節(jié)點(diǎn)。并且官方推薦你使用奇數(shù)數(shù)量的節(jié)點(diǎn)來組成集群。這個(gè)值必須是集群中唯一的。在確認(rèn)每臺服務(wù)器上的和文件修改創(chuàng)建之后,在三個(gè)節(jié)點(diǎn)上分別執(zhí)行命令,啟動。
前言
同道們,好久不見,上一章中,我主要講了Zookeeper的一些基礎(chǔ)的知識點(diǎn)。數(shù)據(jù)模型 + 原語集 + Watches機(jī)制。本章內(nèi)容主要講的是集群搭建相關(guān)的知識。
本篇的內(nèi)容主要包含以下幾點(diǎn):
Zookeeper 運(yùn)行模式
Zookeeper 搭建
一、Zookeeper 運(yùn)行模式Zookeeper 有兩種運(yùn)行模式,單點(diǎn)模式和集群模式。
單點(diǎn)模式(standalone mode)- Zookeeper 只運(yùn)行在單個(gè)服務(wù)器上,常用于開發(fā)測試階段,這種模式比較簡單,但是不能保證Zookeeper服務(wù)的高可用性和恢復(fù)性。
集群模式(replicated mode)- 英文原文這種模式叫做“復(fù)制模式”;這個(gè)模式下,Zookeeper運(yùn)行于一個(gè)集群上,適合生產(chǎn)環(huán)境。
同一個(gè)集群下的server節(jié)點(diǎn)被稱為quorum,翻譯過來就是“一個(gè)正式會議的法定人數(shù)”,如果你看完下一章介紹的ZAB協(xié)議的兩種模式之后,應(yīng)該會覺得這個(gè)比喻實(shí)際上很形象。
NOTE: 在集群模式下,最少需要三個(gè)server節(jié)點(diǎn)。并且官方推薦你使用奇數(shù)數(shù)量的server節(jié)點(diǎn)來組成集群。至于為什么,和Zookeeper的讀寫策略和一致性協(xié)議有關(guān),在后面的章節(jié)會介紹。二、Zookeeper 搭建 單點(diǎn)模式
使用過zookeeper的同學(xué)們應(yīng)該知道,啟一個(gè)zookeeper server 非常簡單,如果是單點(diǎn)模式,只需要以下步驟:
去官網(wǎng)下載對應(yīng)源碼壓縮包,然后上傳到服務(wù)器
解壓,tar -zxvf zookeeper-***.tar.gz
進(jìn)入到源碼目錄下的conf目錄,根據(jù)zoo_sample.cfg,創(chuàng)建一個(gè)配置文件zoo.cfg,啟動時(shí)默認(rèn)就是按照zoo.cfg這個(gè)配置文件的信息來啟動
# Zookeeper 服務(wù)器之間或客戶端與服務(wù)器之間維持心跳的時(shí)間間隔, # 也就是每個(gè) tickTime 時(shí)間就會發(fā)送一個(gè)心跳。 tickTime=2000 # Zookeeper 保存數(shù)據(jù)的目錄 dataDir=/data/zk/data # Zookeeper 保存日志文件的目錄 dataLogDir=/data/zk/log # 客戶端連接Zookeeper 服務(wù)器的端口 # Zookeeper 會監(jiān)聽這個(gè)端口,接受客戶端的訪問請求 clientPort=2181
進(jìn)入到源碼目錄下的bin目錄,執(zhí)行zkServer.sh腳本文件即可
# 啟動 zkServer.sh start # 關(guān)閉 zkServer.sh stop
查看當(dāng)前zookeeper 狀態(tài)
[root@localhost bin]# sh zkServer.sh status ZooKeeper JMX enabled by default Using config: /opt/zookeeper-3.4.8/bin/../conf/zoo.cfg Mode: standalone
Mode:standalone可以看到現(xiàn)在的節(jié)點(diǎn)啟動類型。
集群搭建集群模式的搭建和單點(diǎn)模式的差別不大,如果按照官方的最低要求,就是三臺服務(wù)器,在這三臺服務(wù)器上面分別執(zhí)行一下上述單點(diǎn)模式的步驟,同一集群下的每臺服務(wù)器的配置文件類似。
下面的描述會提到follower、leader節(jié)點(diǎn),這個(gè)屬于集群中的節(jié)點(diǎn)類型,具體定義后面章節(jié)會詳述。
除了上述步驟中,還需要做一下步驟
每臺機(jī)器上 conf/zoo.cfg 配置文件的參數(shù)設(shè)置,需要添加集群的信息,參考如下
tickTime=2000 dataDir=/data/zk/data dataLogDir=/data/zk/log clientPort=2181 # 集群相關(guān)配置 # 允許 follower 連接并同步到 leader 的初始化連接時(shí)間 # 比如這里就是允許 5個(gè) tick 的時(shí)間 initLimit=5 # leader 與 follower 之間發(fā)送消息,請求和應(yīng)答時(shí)間長度。 # 如果 follower 在設(shè)置的時(shí)間內(nèi)不能與leader 進(jìn)行通信,那么此 follower 將被丟棄。 # 比如這里就是允許 2個(gè) tick 的時(shí)間 syncLimit=2 # 集群信息 server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888
server.id=host:port1:port2標(biāo)識了不同Zookeeper服務(wù)器的信息,其中 id 是一個(gè)數(shù)字,表示這個(gè)是服務(wù)器的編號;host是這個(gè)服務(wù)器的 ip 地址;至于port1和port2參照官網(wǎng)的描述較為準(zhǔn)確,網(wǎng)上有些文章都把端口的含義給弄混了。
Finally, note the two port numbers after each server name: " 2888" and "3888". Peers use the former port to connect to other peers. Such a connection is necessary so that peers can communicate, for example, to agree upon the order of updates. More specifically, a ZooKeeper server uses this port to connect followers to the leader. When a new leader arises, a follower opens a TCP connection to the leader using this port. Because the default leader election also uses TCP, we currently require another port for leader election. This is the second port in the server entry.最后,讓我們來看看在server 名字后面的兩個(gè)端口號:"2888"和"3888",Zookeeper 節(jié)點(diǎn)使用前面那個(gè)端口(port1)來與其他節(jié)點(diǎn)建立連接。這個(gè)連接是必須建立的,因?yàn)椴煌?jié)點(diǎn)之間需要通信。打比方說,follower節(jié)點(diǎn)需要“贊成”leader節(jié)點(diǎn)的更新命令。更確切一點(diǎn)說,這個(gè)節(jié)點(diǎn)是用于follower節(jié)點(diǎn)和leader節(jié)點(diǎn)之間的通信。當(dāng)一個(gè)leader節(jié)點(diǎn)出現(xiàn)了,follower節(jié)點(diǎn)會在port1上與leader節(jié)點(diǎn)建立一個(gè)TCP連接。因?yàn)槟J(rèn)的leader選舉也是用TCP,我們現(xiàn)在就需要另一個(gè)端口來用于leader選舉,這就是port2的作用。
簡單來說,port1通信端口,port2選舉端口。
在每個(gè)Zookeeper服務(wù)器對應(yīng)的dataDir目錄下需要創(chuàng)建一個(gè)名為myid的文件,這個(gè)文件中僅含有一行的內(nèi)容,指定的是自身的 id 值,就是server.id=host:port1:port2中的id值。這個(gè) id 值必須是集群中唯一的。
在確認(rèn)每臺服務(wù)器上的zoo.cfg和myid文件修改創(chuàng)建之后,在三個(gè)節(jié)點(diǎn)上分別執(zhí)行命令zkServer.sh start,啟動zookeeper server。
在三個(gè)節(jié)點(diǎn)上分別執(zhí)行zkServer.sh status 查看當(dāng)前節(jié)點(diǎn)的狀態(tài)。
節(jié)點(diǎn)1
節(jié)點(diǎn)2
節(jié)點(diǎn)3
可以看到,目前節(jié)點(diǎn)2是leader節(jié)點(diǎn),節(jié)點(diǎn)1和節(jié)點(diǎn)3是follower節(jié)點(diǎn)。
更詳細(xì)的集群搭建可以參考這篇:ZooKeeper安裝配置總結(jié)也可以參考官網(wǎng)相關(guān)文章:ZooKeeper Getting Started Guide
本章介紹了Zookeeper的兩種運(yùn)行模式,和兩種模式的搭建。
下一章中,我們會介紹Zookeeper原理篇的進(jìn)階部分,有關(guān)于Zookeeper集群的讀寫機(jī)制、ZAB協(xié)議的知識解析等比較深入的知識點(diǎn)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/77645.html
摘要:具有不可分割性即原語的執(zhí)行必須是連續(xù)的,在執(zhí)行過程中不允許被中斷。提供服務(wù)主要就是通過數(shù)據(jù)結(jié)構(gòu)原語集機(jī)制達(dá)到的。子節(jié)點(diǎn)的版本號數(shù)據(jù)節(jié)點(diǎn)版本號版本號創(chuàng)建該節(jié)點(diǎn)的會話的。后位則為遞增序列。 前言 最近加入了部門的技術(shù)興趣小組,被分配了Zookeeper的研究任務(wù)。在研究過程當(dāng)中,發(fā)現(xiàn)Zookeeper由于其開源的特性和其卓越的性能特點(diǎn),在業(yè)界使用廣泛,有很多的應(yīng)用場景,而這些不同的應(yīng)用場景...
摘要:協(xié)議是為分布式協(xié)調(diào)服務(wù)專門設(shè)計(jì)的一種支持崩潰恢復(fù)的一致性協(xié)議,這個(gè)機(jī)制保證了各個(gè)之間的同步。選主是協(xié)議中最為重要和復(fù)雜的過程。以實(shí)際效果而言,分區(qū)相當(dāng)于對通信的時(shí)限要求。參考官方文檔阿里巴巴為什么不用做服務(wù)發(fā)現(xiàn)定理的含義阮一峰 前言 同學(xué)們,在上一章中,我們主要講了Zookeeper兩種啟動模式以及具體如何搭建。本章內(nèi)容主要講的是集群相關(guān)的原理內(nèi)容,第一章可以當(dāng)做是Zookeeper原...
摘要:搭建系列環(huán)境搭建集群搭建集群環(huán)境搭建搭建集群環(huán)境搭建序?qū)τ趥€(gè)人開發(fā)者而言,學(xué)習(xí)分布式的好多東東,都比較費(fèi)勁,因?yàn)槭诸^的機(jī)器不夠。本文主要是記錄使用搭建集群的過程。鳴謝使用不同網(wǎng)絡(luò)模型搭建集群這篇文章總結(jié)的很好有坑,沒嘗試成功 docker搭建系列 docker環(huán)境搭建zk集群 docker搭建redis集群 docker環(huán)境搭建elasticsearch docker搭建rabbit...
閱讀 975·2021-11-24 09:39
閱讀 3401·2021-10-27 14:20
閱讀 2328·2019-08-30 14:08
閱讀 3370·2019-08-29 16:34
閱讀 2185·2019-08-26 12:14
閱讀 2112·2019-08-26 11:54
閱讀 2780·2019-08-26 11:44
閱讀 2485·2019-08-26 11:38