Zookeeper_閱讀源碼第一步_在 IDE 裏啓動 zkServer(集羣版)

 

上篇文章Zookeeper_閱讀源碼第一步_在 IDE 裏啓動 zkServer(單機版)講了在 idea 裏以單機的方式啓動zookeeper,這篇介紹一下以集羣的方式啓動。html

集羣方式啓動,纔會真正的用到 Zookeeper 的快速選舉算法,單機版不涉及選舉。這裏我準備啓動三個zkServer實例。java

修改配置文件

首先要準備三個配置文件,具體配置及配置項解釋以下:算法

# 發送心跳的間隔時間,單位:毫秒
tickTime=2000apache

# 這個配置項是用來配置 Zookeeper 接受客戶端(這裏所說的客戶端不是用戶鏈接 Zookeeper 服務器的客戶端,
# 而是 Zookeeper 服務器集羣中鏈接到 Leader 的Follower 服務器)初始化鏈接時最長能忍受多少個心跳時間間隔數。
# 當已經超過 10 個心跳的時間(也就是 tickTime)長度後 Zookeeper 服務器尚未收到客戶端的返回信息,那麼代表這個客戶端鏈接失敗。
# 總的時間長度就是 10*2000=20 秒
initLimit=10服務器

# 這個配置項標識 Leader 與 Follower 之間發送消息,請求和應答時間長度,最長不能超過多少個 tickTime 的時間長度,
# 總的時間長度就是 5*2000=10 秒
syncLimit=5併發


# zookeeper用於存儲快照文件(zookeeper 節點數據)的目錄,無默認值
dataDir=D:/zookeeper/data1socket

# 用於配置服務器存儲事務日誌文件的目錄,有默認值dataDir,可是建議將兩個目錄分別配置,
# 防止磁盤的併發讀寫,影響服務器性能。可將其配置在一個單獨的磁盤上。
dataLogDir=D:/zookeeper/log1ide

# 客戶端鏈接 Zookeeper 服務器的端口,Zookeeper 會監聽這個端口,接受客戶端的訪問請求
clientPort=2181性能

# server.A=B:C:D 其 中
# A 是一個數字,表示這個是第幾號服務器,叫作myid或sid;
# B 是這個服務器的 ip地址;
# C 表示的是這個服務器與集羣中的 Leader 服務器交換信息的端口;
# D 表示的是萬一集羣中的 Leader 服務器掛了,須要一個端口來從新進行選舉,選出一個新的 Leader,
# 而這個端口就是用來執行選舉時服務器相互通訊的端口。若是是僞集羣的配置方式,因爲 B 都是同樣,
# 因此不一樣的 Zookeeper 實例通訊端口號不能同樣,因此要給它們分配不一樣的端口號。
server.1=localhost:2184:3181
server.2=localhost:2185:3182
server.3=localhost:2186:3183idea

咱們只需再複製兩份配置文件,分別明白爲 zk1.cfg、zk2.cfg 和 zk3.cfg,並把 clientPort 配置項設置爲218一、2182和 2183 便可。

配置多實例

配置文件改好以後,咱們只須要建立三個 Application 啓動項便可,把各自的 Program argument 改成對應的配置文件地址便可。

 

 依次啓動一、二、3實例便可。

錯誤處理

錯誤一

啓動會報錯,首先報非法參數異常,緣由是找不到文件myid

解決辦法:建立data1目錄,並在其下建立文件myid,另外兩臺相似,建立各自的data和log目錄。

Invalid config, exiting abnormally Disconnected from the target VM, address: '127.0.0.1:58070', transport: 'socket'
2019-08-15 10:37:41,957 [myid:] - ERROR [main:QuorumPeerMain@88] - Invalid config, exiting abnormally org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing D:\soft\zookeeper-3.4.13\conf\zk1.cfg at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:156) at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:104) at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:81) Caused by: java.lang.IllegalArgumentException: D:\zookeeper\data1\myid file is missing at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:408) at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:152) ... 2 more
 
 data一、data二、data3分別建立myid對應文件內容一、二、3
 
錯誤二
解決完錯誤一後,從新啓動,又報錯,一樣是非法參數,serverid不是數字。
解決辦法:在剛纔建立的myid文件裏,增長serverid,只增長一個數字便可,切記要和配置文件裏配置的server.X的X一一對應。
Invalid config, exiting abnormally org.apache.zookeeper.server.quorum.QuorumPeerConfig$ConfigException: Error processing D:\soft\zookeeper-3.4.13\conf\zk1.cfg at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:156) at org.apache.zookeeper.server.quorum.QuorumPeerMain.initializeAndRun(QuorumPeerMain.java:104) at org.apache.zookeeper.server.quorum.QuorumPeerMain.main(QuorumPeerMain.java:81) Caused by: java.lang.IllegalArgumentException: serverid null is not a number at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parseProperties(QuorumPeerConfig.java:422) at org.apache.zookeeper.server.quorum.QuorumPeerConfig.parse(QuorumPeerConfig.java:152) Disconnected from the target VM, address: '127.0.0.1:58318', transport: 'socket' ... 2 more

啓動成功

先啓動1和2,能夠看到已經選舉出 leader了,就是2。由於集羣中已經選舉出 leader,3再啓動就被告知2已是 leader。

實例1

 

 實例2

 實例3

 

 在 IDE 裏以集羣的方式啓動zookeeper 到這裏結束了,下一篇開始分析選舉算法源碼。

原文出處:https://www.cnblogs.com/ibigboy/p/11353885.html

相關文章
相關標籤/搜索