ZooKeeper學習筆記一:集群搭建



title: ZooKeeper學習筆記一:集群搭建
categories:

  • 分布式系統
  • 工具
  • ZooKeeper
    tags:
  • ZooKeeper
    abbrlink: 106c916e
    date: 2021-06-05 16:55:00
    description: '本文主要說明了ZooKeeper的集群搭建步驟'

作者:Grey

原文地址:ZooKeeper學習筆記一:集群搭建

說明

單機版的zk安裝和運行參考:https://zookeeper.apache.org/doc/r3.7.0/zookeeperStarted.html

單機版的zk只適合用於測試或者開發環境,不適合用於生產環境。

本文主要介紹zk的集群搭建。

環境

  • CentOS 7
  • ZooKeeper 3.7.0

准備工作

第一步,准備四個Linux實例,zk01-zk04,我的四個實例的ip分別是:

  • zk01:192.168.150.128
  • zk02:192.168.150.130
  • zk03:192.168.150.131
  • zk04:192.168.150.132

第二步,在四個實例中都安裝好jdk1.8。

安裝與配置

我們只需要在一台實例上安裝並配置好zk,然后把安裝文件和配置文件scp到其他實例即可

在zk01中,下載並解壓zk安裝包:

cd /usr/local

## 如果下載失敗,請手動下載並上傳到/usr/local目錄上
wget https://dlcdn.apache.org/zookeeper/zookeeper-3.7.0/apache-zookeeper-3.7.0-bin.tar.gz

## 解壓
tar -xf apache-zookeeper-3.7.0-bin.tar.gz 

## 重命名
mv apache-zookeeper-3.7.0-bin zookeeper

加入環境變量

vi /etc/profile

在末尾加入:

export ZOOKEEPER_HOME=/usr/local/zookeeper
export PATH=$PATH:$ZOOKEEPER_HOME/bin

執行

source /etc/profile

修改zk配置文件:

# 把默認的zoo_sample.cfg拷貝一份zoo.cfg出來
cp /usr/local/zookeeper/conf/zoo_sample.cfg /usr/local/zookeeper/conf/zoo.cfg

修改zoo.cfg配置文件中的如下配置

dataDir=/data/zookeeper

增加如下配置到zoo.cfg中

server.1=192.168.150.128:2888:3888
server.2=192.168.150.130:2888:3888
server.3=192.168.150.131:2888:3888
server.4=192.168.150.132:2888:3888

創建zk01的dataDir目錄

mkdir -p /data/zookeeper

在dataDir目錄下創建一個myid文件,並寫入1

echo 1 > /data/zookeeper/myid

至此,zk01實例已經完全配置好了,現在將zk01實例上的一些安裝文件和配置文件拷貝到zk02-zk04上,

拷貝zk01上的profile文件到zk02-zk04三個節點

## 拷貝到zk02,過程中會讓你輸入yes,以及zk02的密碼
scp /etc/profile 192.168.150.130:/etc

## 拷貝到zk03
scp /etc/profile 192.168.150.131:/etc

## 拷貝到zk04
scp /etc/profile 192.168.150.132:/etc

拷貝zk01的dataDir目錄到zk02-zk04三個節點,在zk01上執行:

scp -r /data/ 192.168.150.130:/
scp -r /data/ 192.168.150.131:/
scp -r /data/ 192.168.150.132:/

拷貝zk01的zookeeper程序到zk02-zk04三個節點, 在zk01上執行:

scp -r /usr/local/zookeeper 192.168.150.130:/usr/local/
scp -r /usr/local/zookeeper 192.168.150.131:/usr/local/
scp -r /usr/local/zookeeper 192.168.150.132:/usr/local/

至此,zk02-zk04都准備好了相關文件,現在連接zk02-zk04,在zk02-zk04上分別執行如下操作

source /etc/profile

將zk02,zk03,zk04的myid文件,修改成對應的值

vi /data/zookeeper/myid

zk02的/data/zookeeper/myid修改成2
zk03的/data/zookeeper/myid修改成3
zk04的/data/zookeeper/myid修改成4

配置防火牆

firewall-cmd --zone=public --add-port=3888/tcp --permanent
firewall-cmd --zone=public --add-port=2888/tcp --permanent
firewall-cmd --zone=public --add-port=2181/tcp --permanent
firewall-cmd --reload

啟動

在zk01-zk04上分別執行:

zkServer.sh start-foreground

查看leader和follower

[root@zk01 ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: follower

說明此節點是follower節點

[root@zk03 ~]# zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost. Client SSL: false.
Mode: leader

在任意節點通過zk客戶端連接

zkCli.sh -server 127.0.0.1:2181

執行:

create /abc

set /abc "hello world"

其他節點都可以查看到

[zk: localhost:2181(CONNECTED) 0] get /abc
hello world

ZAB協議

Zookeeper 的核心是原子廣播機制,這個機制保證了各個 server 之間的同步。實現這個機制的協議叫做 Zab 協議。Zab 協議有兩種模式,它們分別是恢復模式和廣播模式。

  1. 恢復模式
    當服務啟動或者在領導者崩潰后,Zab就進入了恢復模式,當領導者被選舉出來,且大多數 server 完成了和 leader 的狀態同步以后,恢復模式就結束了。狀態同步保證了 leader 和 server 具有相同的系統狀態。

  2. 廣播模式
    一旦 leader 已經和多數的 follower 進行了狀態同步后,它就可以開始廣播消息了,即進入廣播狀態。這時候當一個 server 加入 ZooKeeper 服務中,它會在恢復模式下啟動,發現 leader,並和 leader 進行狀態同步。待到同步結束,它也參與消息廣播。ZooKeeper 服務一直維持在 Broadcast 狀態,直到 leader 崩潰了或者 leader 失去了大部分的 followers 支持。

client 端會對某個 znode 建立一個 watcher 事件,當該 znode 發生變化時,這些 client 會收到 zk 的通知,然后 client 可以根據 znode 變化來做出業務上的改變等。

單數服務器只要沒超過一半的服務器宕機就可以繼續使用, 集群規則為 2N+1 台,N >0,即最少需要 3 台。

關於四種類型的數據節點(Znode)

PERSISTENT:持久節點,除非手動刪除,否則節點一直存在於 Zookeeper 上。

EPHEMERAL:臨時節點,臨時節點的生命周期與客戶端會話綁定,一旦客戶端會話失效(客戶端與 Zookeeper連接斷開不一定會話失效),那么這個客戶端創建的所有臨時節點都會被移除。

PERSISTENT_SEQUENTIAL:持久順序節點,基本特性同持久節點,只是增加了順序屬性,節點名后邊會追加一個由父節點維護的自增整型數字。

EPHEMERAL_SEQUENTIAL:臨時順序節點,基本特性同臨時節點,增加了順序屬性,節點名后邊會追加一個由父節點維護的自增整型數字。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM