手把手演示Zookeeper的集羣搭建過程

一個重要的機制----選舉機制

原則:集羣中半數以上機器存活,集羣可用。所以 Zookeeper 適合安裝奇數臺服務器。
Zookeeper 雖然在配置文件中並沒有指定 Master 和 Slave 。但是 Zookeeper工作時,是有一個節點爲 Leader ,其他則爲 Follower,Leader 是通過內部的選舉機制臨時產生的。
以一個簡單的例子來說明整個選舉的過程。
假設有五臺服務器組成的Zookeeper集羣,它們的id從1-5,同時它們都是最新啓動的,也就是沒有歷史數據,存放數據量都是一樣的。假設這些服務器按照順序啓動,來看看會發生什麼,如圖
在這裏插入圖片描述
(1)服務器1啓動,此時只有它一臺服務器啓動了,它發出去的報文沒有任何響應,所以它的選舉狀態一直是LOOKING狀態。
(2)服務器2啓動,它與最開始啓動的服務器1進行通信,互相交換自己的選舉結果,由於兩者都沒有歷史數據,默認投給id較大的,但是由於沒有達到超過半數以上的服務器都同意選舉它(這個例子中的半數以上是3),所以服務器1、2還是繼續保持LOOKING狀態。
(3)服務器3啓動,根據前面的理論分析,服務器3成爲服務器1、2、3中的老大,而與上面不同的是,此時有三臺服務器選舉了它,所以它成爲了這次選舉的Leader。
(4)服務器4啓動,根據前面的分析,理論上服務器4應該是服務器1、2、3、4中最大的,但是由於前面已經有半數以上的服務器選舉了服務器3,所以它只能接收當小弟的命了。
(5)服務器5啓動,同4一樣當小弟。

具體搭建過程

機器編號 IP地址 端口
zk1 xxx 2181
zk-2 xxx 2182
zk-3 xxx 2183

1、在 /usr/local/zk-cluster 目錄下先複製一個 Zookeeper ,並重命名爲 zk-1,在 zk-1 下新建 log 和 data 目錄
2、在data 目錄創建 myid 文件,寫一個標識(1,2,3)
3、修改 zoo.cfg
4、複製兩個 zk-1,並改名爲 zk-2、zk-3
5、修改 zk-2 和 zk-3 中的 myid 文件和 zoo.cfg 文件
6、分別啓動三個 Zookeeper
7、連接三個cli
注意:
在高版本中 log 目錄可以不建立,默認會在 data 目錄中記錄日誌

# 複製並重命名
cp -r /usr/local/zookeeper /usr/local/zk-cluster/zk-1
# 進入
cd zk-1
# 創建log和data目錄
mkdir log
mkdir data
# 創建myid文件
touch /usr/local/zk-cluster/zk-1/data/myid
# 寫一個數字1進去
vim /usr/local/zk-cluster/zk-1/data/myid
# 修改 zoo.cfg
vim /usr/local/zk-cluster/zk-1/conf/zoo.cfg

zk-1的zoo.cfg內容如下:

# 通信心跳數,取默認值
tickTime=2000

# LF初始通信時限
initLimit=10

# LF同步通信時限
syncLimit=5

# 指定data和log的保存目錄
dataDir=/usr/local/zk-cluster/zk-1/data
dataLogDir=/usr/local/zk-cluster/zk-1/log

# 端口
clientPort=2181

# 集羣配置
# 1,2,3 來自於data目錄中的myid文件,該文件保存了當前集羣的標識
# 2888,2889,2890爲內部通信的端口,可以相同,只要不佔用系統資源
# 3888,3889,3890爲內部選舉端口,可以相同,只要不佔用系統資源
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
# 複製兩個 zk-1,並改名爲 zk-2、zk-3
cp -r zk-1 /usr/local/zk-cluster/zk-2
cp -r zk-1 /usr/local/zk-cluster/zk-3
# 修改 zk-2 和 zk-3 中的 myid 文件和 zoo.cfg 文件 
# 把zk-2中的myid文件改爲2,把zk-3中的myid文件改爲3
vim ./zk-2/data/myid
vim ./zk-3/data/myid
# 修改zoo.cfg 文件
vim ./zk-2/conf/zoo.cfg
vim ./zk-3/conf/zoo.cfg

zk-2的zoo.cfg
在這裏插入圖片描述
zk-3的zoo.cfg
在這裏插入圖片描述
注意:按順序啓動,2爲 leader

# 分別啓動三個 Zookeeper
./zk-1/bin/zkServer.sh start
./zk-2/bin/zkServer.sh start
./zk-3/bin/zkServer.sh start
# 連接三個cli
cd /usr/local/zk-cluster/zk-1/bin/
./zkCli.sh -server 127.0.0.1:2181

cd /usr/local/zk-cluster/zk-2/bin/
./zkCli.sh -server 127.0.0.1:2182

cd /usr/local/zk-cluster/zk-3/bin/
./zkCli.sh -server 127.0.0.1:2183
三臺Zookeeper都可以讀寫操作。

關於不同加載順序選舉 leader 的問題

原則:誰的 myid 大,票就投給誰,直到選舉成功(票數超過 Zookeeper 半數就選舉成功),選舉成功之後,將不再進行選舉,只有投出 Leader 這個集羣才能跑起來。

1、按照順序 1 2 3啓動
2 是Leader

2、倒序 3 2 1 啓動
3 是Leader

3、啓動順序爲:2 3 1
3是 Leader

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章