Zookeeper完全分布式集群的搭建


一、集群模式

1、單機模式

    在zoo.cfg中只配置一個server.id就是單機模式了。

    這種模式下,如果當前主機宕機,那么所有依賴於當前zookeeper服務工作的其他服務器都不能在進行正常工作,這種事件稱為單節點故障。所以這種模式一般用在測試環境。

2、偽分布式

    在zoo.cfg中配置多個server.id,其中ip都是當前機器,而端口各不相同,啟動時就是偽集群模式了。

    這種模式和單機模式產生的問題是一樣的。這種模式也是用在測試環境中。

3、完全分布式

    多台機器各自配置zoo.cfg文件,將各自互相加入服務器列表,上面搭建的集群就是這種完全分布式。

    這種模式是真實生產環境中使用的zookeeper集群模式。

二、zookeeper完全分布式集群的搭建

    搭建zookeeper集群需要最少三台機器,需要安裝jdk作為基礎支持。此次使用的Zookeeper3.4.7版本。

1、准備虛擬機

    准備三台虛擬機,將ip和端口規划好。這里最好將主機名,以及主機名和ip的映射關系配置到/etc/hosts內

vim /etc/hosts # 填入以下內容,如果之前已經添加過,則忽略此操作
127.0.0.1   localhost
::1         localhost
192.168.234.21 spark01
192.168.234.22 spark02
192.168.234.23 spark03

2、安裝jdk

如果已經安裝,則忽略

1、將jdk安裝包上傳、解壓安裝包,並更名,命令如下:

tar -zxvf jdk1.8.0_131.tar.gz -C /data/aicu-tob/software/

2、修改/etc/profile, 在文件行尾加入以下內容后保存退出。

export JAVA_HOME=/data/aicu-tob/software/jdk1.8.0_131
export PATH=$PATH:$JAVA_HOME/bin

3、搭建集群

3.1.下載安裝包

下載zookeeper的安裝包,下載地址:http://zookeeper.apache.org/

上傳到linux集群環境下,規划自己的管理目錄,解壓安裝包。
mkdir -p /data/aicu-tob/software tar
-zxvf zookeeper-3.4.10.tar.gz -C /data/aicu-tob/software

3.2.集群配置

3.2.1 修改配置文件zoo.cfg

# 進入conf目錄,復制zoo-sample.cfg重命名為zoo.cfg,通過修改zoo.cfg來對zookeeper進行配置。這個名字固定寫死,因為zookeeper啟動會檢查這個文件,根據這個配置文件里的信息來啟動服務。
cd /data/aicu-tob/software/zookeeper-3.4.10/conf
cp zoo-sample.cfg zoo.cfg


# vim zoo.cfg,此文件中需要修改以下兩處:
1、dataDir:指定zookeeper將數據保存在哪個目錄下,如果不修改,默認在/tmp下,這個目錄下的數據有可能會在磁盤空間不足或服務器重啟時自動被linux清理,所以一定要修改這個地址。按個人習慣將其修改為自己的管理目錄。
dataDir=/data/aicu-tob/software/zookeeper-3.4.10/data
dataLogDir=/data/aicu-tob/software/zookeeper-3.4.10/logs

2、完全分布式:多台機器各自配置,zookeeper有幾個節點,就配置幾個server。例如本文宗總共三台主機,於是在配置文件末尾加上下面三行,可以填寫ip也可以是/etc/hosts的主機名,建議后者,可以充分解耦
server.1=spart01:2888:3888
server.2=spart02:2888:3888
server.3=spart03:2888:3888
# 注意:一定要跟自己的myid配置對應上,否則集群一直處於非正常狀態 myid文件中就是N,則對應zoo.cfg 中server.{N} ,關於myid配置,見下一小節
zookeeper服務默認的端口號為2888和3888,2888原子廣播端口,3888選舉端口,

3.2.2 myid

到dataDir指定目錄下生成一個文件叫myid(必須叫這個名字),其中寫上一個數字表明當前機器是哪一個編號的機器,注意:本機的myid內容一定要與server.{N}保持一致

# 在spart01主機
vim myid
1

3.2.3.拷貝

#將以上Zookeeper文件夾遠程拷貝到另外兩台服務器中:
scp -r  /data/aicu-tob/software/zookeeper-3.4.10 root@spart02
scp -r  /data/aicu-tob/software/zookeeper-3.4.10 root@spart03

#然后修改另外兩台服務器中的myid文件中的id即可。
#spart02
vim myid
2

#spart03
vim myid
3

4、啟動zookeeper

啟動zookeeper的各種命令操作如下,可以使用絕對路徑操作這些命令,也可使用相對路徑操作這些命令,相對路徑需要進到zookeeper服務的bin目錄進行操作

#啟動ZK服務,Zookeeper集群需要每台挨個啟動。 
bin/zkServer.sh start
#停止ZK服務: 
bin/zkServer.sh stop
#重啟ZK服務: 
bin/zkServer.sh restart
#查看ZK服務狀態: 
bin/zkServer.sh status  # 依次查看三台主機,會發現某一台被選舉為leader,其余兩台為follower

也可以是用jps命令查看線程

啟動集群的時候,集群數量啟動沒有超過一半,狀態會有錯誤提示,當集群啟動數量超過一半就會自動轉為正常狀態,並且此台使集群進入正常工作狀態的服務器會成為leader角色,集群中其他服務器的角色為fllower。 Zookeeper集群模式搭建到此完成。

5、測試zookeeper

5.1 在Zookeeper上測試數據同步

在spart01上操作:

# 1、切換目錄
cd /data/aicu-tob/software/zookeeper-3.4.10

# 2、客戶登陸,
./bin/zkCli.sh 

注意zoo.cfg如果修改了clientPort,例如clientPort=8131,那么此處需要指定參數
./bin/zkCli.sh -server localhost:8131  # 本實驗是登陸本機操作,當然localhost也可以是其他zk主機

WatchedEvent state:SyncConnected type:None path:null
[zk: localhost:2181(CONNECTED) 0] ls /
[zookeeper]
[zk: localhost:2181(CONNECTED) 1] get /zookeeper
cZxid = 0x0
ctime = Thu Jan 01 08:00:00 CST 1970
mZxid = 0x0
mtime = Thu Jan 01 08:00:00 CST 1970
pZxid = 0x0
cversion = -1
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 0
numChildren = 1
[zk: localhost:2181(CONNECTED) 3] create /hadoop123 123  //創建一個hadoop123文件並且值為:123
Created /hadoop123
[zk: localhost:2181(CONNECTED) 4] ls /    #查看是否創建好了
[hadoop123, zookeeper]
[zk: localhost:2181(CONNECTED) 5] get /hadoop123   #獲取文件的值
123
cZxid = 0x200000002
ctime = Fri Mar 25 09:54:20 CST 2016
mZxid = 0x200000002
mtime = Fri Mar 25 09:54:20 CST 2016
pZxid = 0x200000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
[zk: localhost:2181(CONNECTED) 6]

在spart02和spart03上查看在sparrk01上創建文件是否同步過來:

./bin/zkCli.sh -server localhost:8131  


[zk: localhost:2181(CONNECTED) 0] ls /     #顯示hadoop123同步過來了
[hadoop123, zookeeper]
[zk: localhost:2181(CONNECTED) 1] get /hadoop123  #獲取hadoop123文件內容
123
cZxid = 0x200000002
ctime = Fri Mar 25 09:54:20 CST 2016
mZxid = 0x200000002
mtime = Fri Mar 25 09:54:20 CST 2016
pZxid = 0x200000002
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 3
numChildren = 0
[zk: localhost:2181(CONNECTED) 2] 

5.2 測試Zookeeper故障角色轉移

所先查看spark01、spark02、spark03上角色狀態

然后把leader干掉,然后會發現選舉出一個新的leader,如果重啟掛掉的zk,它會變成follower

 


免責聲明!

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



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