ZooKeeper 集羣配置

安裝環境:

    1、系統:CentOS 7.4

    2、Java環境:JDK8

            zookeeper有單機、僞集羣、集羣三種部署方式,本例使用的zookeeper版本是:zookeeper-3.4.12

單機模式

    下載ZooKeeper

                 地址:http://mirrors.hust.edu.cn/apache/zookeeper/

                地址:  https://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/zookeeper-3.4.14/

                 高版本的zookeeper可能會導致啓動不了

僞集羣模式

Zookeeper不但可以在單機上運行單機模式Zookeeper,而且可以在單機模擬集羣模式 Zookeeper的運行,也就是將不同節點運行在同一臺機器。我們在實驗的時候,可以先使用少量數據在集羣僞分佈模式下進行測試。當測試可行的時候,再將數據移植到集羣模式進行真實的數據實驗。這樣不但保證了它的可行性,同時大大提高了實驗的效率。這種搭建方式,比較簡便,成本比較低,適合測試和學習,如果你的手頭機器不足,就可以在一臺機器上部署了 3個server。

注意事項

在一臺機器上部署了3個server,需要注意的是:在僞分佈式模式下我們使用的每個配置文件模擬一臺機器,也就是說單臺機器上運行多個Zookeeper實例。但是,必須保證每個配置文檔的各個端口號不能衝突,除了clientPort不同之外,dataDir也不同。另外,還要在dataDir所對應的目錄中創建myid文件來指定對應的Zookeeper服務器實例。

■ clientPort端口:如果在1臺機器上部署多個server,那麼每臺機器都要不同的 clientPort,比如 server1是2181,server2是2182,server3是2183

■ dataDir和dataLogDir:dataDir和dataLogDir也需要區分下,將數據文件和日誌文件分開存放,同時每個server的這兩變量所對應的路徑都是不同的

■ server.X和myid: server.X 這個數字就是對應,data/myid中的數字。在3個server的myid文件中分別寫入了1,2,3,那麼每個server中的zoo.cfg都配 server.1 server.2,server.3就行了。因爲在同一臺機器上,後面連着的2個端口,3個server都不要一樣,否則端口衝突。

同樣將 conf 目錄下的 zoo_sample.cfg 複製三份,分別重命名爲 zoo1.cfg,zoo2.cfg,zoo3.cfg。

cp zoo_sample.cfg zoo1.cfg

cp zoo_sample.cfg zoo2.cfg

cp zoo_sample.cfg zoo3.cfg

然後分別修改每個配置文件,我的配置如下:

 

創建 zoox.cfg 配置文件中 dataDir 和 dataLogDir 的路徑,

# 創建數據目錄

mkdir -p /tmp/zookeeper/1/data

mkdir -p /tmp/zookeeper/2/data

mkdir -p /tmp/zookeeper/3/data

# 創建日誌文件目錄

mkdir -p /tmp/zookeeper/1/log

mkdir -p /tmp/zookeeper/2/log

mkdir -p /tmp/zookeeper/3/log

在每個 dataDir 目錄下常見一個 myid 文件並在其中寫入 server 對應的序號,比如在 /tmp/zookeeper/1/data 目錄下創建一個 myid 文件,並在 myid 中寫入 1,其他目錄同理。每個 myid 中寫入對應的 Server 序列號

然後使用每個配置文件啓動3個 ZooKeeper 實例:

bin/zkServer.sh stop conf/zoo1.cfg

bin/zkServer.sh stop conf/zoo2.cfg

bin/zkServer.sh stop conf/zoo3.cfg 啓動3個 ZK 實例

可以使用 jps 來查看是否啓動成功

jps -mljps 查看 zk 是否啓動

查看 zk 的運行狀態

bin/zkServer.sh status conf/zoo1.cfg

bin/zkServer.sh status conf/zoo2.cfg

bin/zkServer.sh status conf/zoo3.cfg

查看 ZK 運行狀態

可以看到 ZK 的 Mode 不再是 standalone 了,而且 server2 作爲 leader,其他2臺server 作爲 follower。

客戶端連接 zk 集羣

本地連接/遠程連接

bin/zkCli.sh -server ip:2181

bin/zkCli.sh -server ip:2182

bin/zkCli.sh -server ip:2183

可以看見,我們遠程連接任何一個端口都能夠連接上。

上面我們知道 server2 是 leader,所以我們使用客戶端連接到 server2上,然後創建一些節點。

bin/zkCli.sh -server 39.106.111.160:2182

create /zktest 123連接 server1 並創建一個節點

現在我們在本地連接到 server2 看能不能看到剛纔我們創建的節點。

bin/zkCli.sh -server localhost:2181

ls /

get /zktest連接 server2 獲取數據

可以看到我們在 server1 上也獲取到了剛纔我們通過遠程連接在 server2 上創建的 /zktest 數據。

現在我們嘗試將 server2 這個leader 給停掉。

bin/zkServer.sh stop conf/zoo2.cfg停掉 server2 這個 leader

然後查看 server1和 server3 的運行狀態查看 server1 和 server3 狀態

現在可以看到 ZooKeeper 通過選舉,將 server3選舉成了新的 leader。

這個時候我們剛纔遠程連接到 server2 的客戶端開始報錯了,zkCli.sh 客戶端並沒有實現連接斷後,自動連接其他節點的功能。zkCli.sh 連接到 server2 不斷的報錯

這時我們再重啓 server2

bin/zkServer.sh start conf/zoo2.cfg

然後再來查看各個 server 的運行狀態server 的運行狀態

可以看到 server2 再次加入組織,不過 server2已經不再是 leader 了。

這個時候連接 sever2 的客戶端也從報錯中恢復過來。

集羣模式

集羣模式和僞分佈式部署基本相同,唯一的區別就是 zoo.cfg 中,ip 配置不在是127.0.0.1 或 localhost 了,而是真正的機器 ip。

server.2= ip:2288:3388

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