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