ZooKeeper 集群搭建
早期文章
ZooKeeper 簡介
? ? ? ? ZooKeeper 是一個分布式應(yīng)用程序協(xié)調(diào)服務(wù),主要用于解決分布式集群中應(yīng)用系統(tǒng)的一致性問題。ZooKeeper 的應(yīng)用場景包括但不限于統(tǒng)一命名服務(wù)、集群管理 和 分布式鎖 等。其架構(gòu)圖大致如下:

? ? ? ? ZooKeeper 集群由一組服務(wù)器組成,這些節(jié)點當(dāng)中有一個角色為 Leader,其他節(jié)點的角色為 Follower。當(dāng) Leader 節(jié)點發(fā)生故障而失效時,F(xiàn)ollower 節(jié)點會快速相應(yīng),重新選出一個 Leader 節(jié)點。
ZooKeeper?的安裝模式
? ? ? ? ZooKeeper 有三種安裝模式,分別是 單機模式、偽分布式模式 和 集群模式。
? ? ? ??單機模式是指部署一個 ZooKeeper 進程,客戶端直接與 ZooKeeper 進程進行通信;偽分布式模式是在單臺計算機上運行多個 ZooKeeper 實例組成一個集群;集群模式則是在多臺計算機上部署 ZooKeeper。
? ? ? ? 在 ZooKeeper 集群中,會有一臺機器作為 Leader 服務(wù)器負責(zé)管理和協(xié)調(diào)其他集群服務(wù)器。服務(wù)器的數(shù)量通常是單數(shù)。
ZooKeeper 集群的部署
? ? ? ? 這里使用三臺虛擬機來部署 ZooKeeper 集群,三臺虛擬機的服務(wù)器均為 CentOS,且主機名分別為 centos01、centos02 和 centos03。
(1)上傳 ZooKeeper?安裝文件
? ? ? ? 首先任選一臺服務(wù)器來安裝和配置 ZooKeeper,這里我選擇在 centos01 服務(wù)器上進行完成。下載 ZooKeeper 的 tar 包,上傳到 centos01 的服務(wù)器上,這里我上傳到了 /opt/software/ 目錄下,然后對其進行解壓,命令如下:
# tar -zxf zookeeper-3.4.10.tar.gz -C /opt/modules/(2)配置 ZooKeeper 的配置文件
? ? ? ? 首先,在 ZooKeeper 的安裝目錄下創(chuàng)建一個 dataDir 目錄,其用于存放 ZooKeeper 相關(guān)數(shù)據(jù)。
? ? ? ? 然后,在 ZooKeeper 安裝目錄下的 conf 文件夾中新建配置文件 zoo.cfg 文件,內(nèi)容如下:
tickTime=2000initLimit=5syncLimit=2dataDir=/opt/modules/zookeeper-3.4.10/dataDirclientPort=2181server.1=centos01:2888:3888server.2=centos02:2888:3888server.3=centos03:2888:3888
? ? ? ? 下面對配置項進行簡單的說明:
tickTime:表示每次心跳間隔的時間;
initLimit:集群中的 Follower 服務(wù)器初始化連接 Leader 服務(wù)器時能等待的最大心跳數(shù),如果在指定的心跳之后 Follower 仍然沒有收到 Leader 服務(wù)器的返回信息,則連接失敗;initLimit * tickTime 就是連接超時的時長;
server.id = host:port1:port2:該配置項用來標(biāo)識不同的 ZooKeeper 服務(wù)器,id 必須在整個集群中是唯一的,且大小在 1 到 255 之間;host 是服務(wù)器的名稱或 IP 地址,port1 是 Leader 端口,該服務(wù)器作為 Leader 時供 Follower 連接的端口,port2 是選舉端口,選舉 Leader 服務(wù)器時供其他 Follower 連接的端口
dataDir:存儲數(shù)據(jù)的目錄
clientPort:客戶端連接 ZooKeeper 服務(wù)器的端口,ZooKeeper 會監(jiān)聽這個端口,接收客戶端的請求
? ? ? ? 最后,在 dataDir 目錄下創(chuàng)建一個 myid 的文件,將服務(wù)器的 id 寫入到該文件中。
(3)復(fù)制 ZooKeeper?安裝信息到其他節(jié)點
? ? ? ??將 centos01 的 ZooKeeper 安裝目錄復(fù)制到 centos01 和 centos03 兩個服務(wù)器上。命令如下:
# scp -r /opt/modules/zookeeper-3.4.10/ hadoop:/opt/modules/# scp -r /opt/modules/zookeeper-3.4.10/ hadoop:/opt/modules/
(4)修改其他節(jié)點配置
? ? ? ? 需要修改 centos02 和 centos03 中 myid 的值,需要與其 server.id 的 id 進行對應(yīng)。
(5)啟動 ZooKeeper
? ? ? ? 分別在每臺 ZooKeeper 上啟動 ZooKeeper,命令如下:
# ./bin/zkServer.sh start(6)查看啟動狀態(tài)
? ? ? ? ZooKeeper 啟動后會自動的選舉 Leader,查看服務(wù)狀態(tài)時,可以查看到不同服務(wù)器的角色,查看如下:
? ? ? ??以下是 Leader 角色的輸出狀態(tài):
/opt/modules/zookeeper-3.4.10/bin/zkServer.sh statusZooKeeper JMX enabled by defaultUsing config: /opt/modules/zookeeper-3.4.10/bin/../conf/zoo.cfgMode: leader
? ? ? ??以下是?Follower 角色的輸出狀態(tài):
/opt/modules/zookeeper-3.4.10/bin/zkServer.sh statusZooKeeper JMX enabled by defaultUsing config: /opt/modules/zookeeper-3.4.10/bin/../conf/zoo.cfgMode: follower
(7)客戶端連接服務(wù)器
? ? ? ? 在 centos01 節(jié)點上,連接 ZooKeeper 服務(wù)器,命令如下:
./bin/zkCli.sh -server centos01:2181總結(jié)
? ? ? ??本篇內(nèi)容簡單的整理了搭建 ZooKeeper 集群的步驟,整個步驟比較固定。當(dāng) ZooKeeper 服務(wù)器過多時,可以通過腳本來進行批量的啟動,這里就不再贅述。本文并沒有整理 ZooKeeper 的應(yīng)用場景,也沒有整理 ZooKeeper 選舉 Leader 的算法,以后會逐步的補上。希望本文對大家有所幫助。

公眾號內(nèi)回復(fù)?【mongo】 下載 SpringBoot 整合操作 MongoDB 的文檔。
? ? ? ? 之前整理的關(guān)于 Redis 的文章:
Redis | Redis Pub/Sub相關(guān)命令
Redis | 基礎(chǔ)數(shù)據(jù)類型應(yīng)用場景
