天天看點

Zookeeper原理及部署Zookeeper原理及部署

Zookeeper原理及部署

Zookeeper介紹:

ZooKeeper是一個開源分布式協調服務、分布式資料一緻性解決方案。可基于ZooKeeper實作命名服務、叢集管理、Master選舉、分布式鎖等功能。

高可用:

為了保證ZooKeeper的可用性,在生産環境中我們使用ZooKeeper叢集模式對外提供服務,并且叢集規模至少由3個ZooKeeper節點組成。叢集至少由3個節點組成,ZooKeeper其實2個節點也可以組成叢集并對外提供服務,但我們使用叢集主要目的是為了高可用。如果2個節點組成叢集,其中1個節點挂了,另外ZooKeeper節點不能正常對外提供服務。是以也失去了叢集的意義。如果3個節點組成叢集,其中1個節點挂掉後,根據ZooKeeper的Leader選舉機制是可以從另外2個節點選出一個作為Leader的,叢集可以繼續對外提供服務,而且叢集規模最好為奇數。

并非節點越多越好:

1.節點越多,使用的資源越多。

2.節點越多,ZooKeeper節點間花費的通訊成本越高,節點間互連的Socket也越多。影響ZooKeeper叢集事務處理。

3.節點越多,造成腦裂的可能性越大。

叢集角色:

ZooKeeper沒有使用Master/Slave的概念,而是将叢集中的節點分為了3類角色:

Leader:

在一個ZooKeeper叢集中,隻能存在一個Leader,這個Leader是叢集中事務請求唯一的排程者和處理者,所謂事務請求是指會改變叢集狀态的請求;

Leader根據事務ID可以保證事務處理的順序性。如果一個叢集中存在多個Leader,這種現象稱為「腦裂」。

Follower:

Follower角色的ZooKeeper服務隻能處理非事務請求;如果接收到用戶端事務請求會将請求轉發給Leader伺服器;參與Leader選舉;參與Leader事務處理投票處理。

Follower發現叢集中Leader不可用時會變更自身狀态,并發起Leader選舉投票,最終叢集中的某個Follower會被選為Leader。

Observer:

Observer與Follower很像,可以處理非事務請求;将事務請求轉發給Leader伺服器。與Follower不同的是,Observer不會參與Leader選舉;不會參與Leader事務處理投票。

Observer用于不影響叢集事務處理能力的前提下提升叢集的非事務處理能力。

版本:3.6.2

部署:

叢集資訊: 10.0.0.2-4 cliport:2186

  1. 解壓

tar xvf /data/apache-zookeeper.3.6.2-bin.tar.gz -C /data/middleware/zookeeper

cd /data/middleware/zookeeper

mkdir {data,logs}

     2. 配置檔案修改

2.1. zoo.cfg

cd /data/middleware/zookeeper/conf

mv zoo_sample.cfg zoo.cfg

#不改名啟動會報錯

vim zoo.cfg

#配置檔案

tickTime=2000

initLimit=10

#對于主節點與從節點進行同步操作時的逾時時間,機關為tick值的倍數。

syncLimit=5

#用于配置記憶體資料庫儲存的模糊快照的目錄,目錄需要單獨建立。

dataDir=/data/middleware/zookeeper/apache-zookeeper-3.6.2-bin/data

#用于存放日志資訊,目錄需要單獨建立。

dataLogDir=/data/middleware/zookeeper/apache-zookeeper-3.6.2-bin/logs

#用戶端所連接配接的伺服器所監聽的端口号

clientPort=2186

###定時清理zookeeper日志配置

#清理頻率機關是小時需要大于1的整數

autopurge.purgeInterval=24

##日志保留檔案數目

autopurge.snapRetainCount=10

###叢集資訊

server.1=10.0.0.2:3188:3288

server.2=10.0.0.3:3188:3288

server.3=10.0.0.4:3188:3288

#server.1 中,1為myid,每台伺服器不同,并寫在myid配置檔案中

#ip為各節點ip 3188為非選舉端口 3288為選舉通訊端口

2.2.myid

#myid配置檔案需建立

cd /data/middleware/zookeeper/data/

touch myid

echo '1' > myid

#zoo.cfg中ip對應的myid

      3.啟動:

sh /data/middleware/zookeeper/bin/zkServer.sh start

檢視狀态:

sh /data/middleware/zookeeper/bin/zkServer.sh status

登入用戶端:

sh /data/middleware/zookeeper/bin/zkCli.sh -server 10.0.0.2:2186

繼續閱讀