zookeeper curator(實戰一):安裝&配置
zookeeper 的偽裝叢集搭建
瘋狂創客圈 Java 分散式聊天室【 億級流量】實戰系列之 -22【 部落格園 總入口 】
文章目錄
原始碼IDEA工程獲取連結: Java 聊天室 實戰 原始碼
寫在前面
大家好,我是作者尼恩。目前和幾個小夥伴一起,組織了一個高併發的實戰社群【瘋狂創客圈】。正在開始高併發、億級流程的 IM 聊天程式 學習和實戰
前面,已經完成一個高效能的 Java 聊天程式的四件大事:
-
完成了協議選型,選擇了效能更佳的 Protobuf協議。具體的文章為: Netty+Protobuf 整合一:實戰案例,帶原始碼
-
介紹了 通訊訊息資料包的幾條設計準則
-
解決了一個非常基礎的問題,這就是通訊的 **粘包和半包問題。**具體的文章為:Netty 粘包/半包 全解 | 史上最全解讀
-
前一篇檔案,已經完成了 系統三大組成模組的組成介紹。 具體的文章為:Netty聊天程式(實戰一):從0開始實戰100w級流量應用
接下來,需要進入到分散式開發的環節了。 分散式的中介軟體,瘋狂創客圈的小夥伴們,一致的選擇了zookeeper,不僅僅是由於其在大資料領域,太有名了。更重要的是,很多的著名框架,都使用了zk。
1.1. zookeeper 安裝&配置
現在,我們開始使用三臺機器來搭建一個Zookeeper叢集。由於沒有多餘的伺服器,這裡就將三個Zk都安裝到本地機器上,故稱謂偽叢集模式。
偽叢集模式只是便於開發、普通測試,不能用於生產環境。當然,如果瞭解了偽叢集模式下的安裝和配置,生產環境下的配置,也是大致差不多的。
首先是下載。在apache的官方網站提供了好多映象下載地址,然後找到對應的版本,目前最新的是3.4.13。
下載地址:
http://mirrors.cnnic.cn/apache/zookeeper/zookeeper-3.4.13/zookeeper-3.4.13.tar.gz
Windows下安裝
把下載的zookeeper的檔案解壓到指定目錄
C:\devtools\zookeeper-3.4.13>
1.1.1. 建立資料目錄和日誌目錄:
提前為每一個偽節點建立日誌目錄、資料目錄。
在安裝目錄下,為每一個偽節點建立一個日誌目錄,分別為 log/zoo-1、 log/zoo-2、 log/zoo-3:
![img](file:///C:\Users\qinglin\AppData\Local\Temp\ksohtml\wps2376.tmp.jpg)
為每一個偽節點建立一個數據目錄,分別為 data/zoo-1、 data/zoo-2、 data/zoo-3。
1.1.2. 建立myid檔案
myid檔案的主要作用,是記錄(偽)節點的編號。
myid檔案是一個文字檔案,檔名稱為myid。
myid檔案內容為一個數字,表示節點的編號。
在第一個(偽)節點資料目錄 C:\devtools\zookeeper-3.4.13>data\zoo-1\ 資料夾下建立內容為 “1” 的myid檔案。表示第一個節點的編號為1。
在第二個(偽)節點資料目錄 C:\devtools\zookeeper-3.4.13>data\zoo-2\ 資料夾下建立內容為 “2” 的myid檔案。表示第二個節點的編號為2。
在第三個(偽)節點資料目錄 C:\devtools\zookeeper-3.4.13>data\zoo-3\ 資料夾下建立內容為 “3” 的myid檔案。表示第三個節點的編號為3。
強調一下:myid檔案中只有一個數字,即一個Server ID,id的範圍是1~255,表示叢集最多的節點個數為255個。
1.1.3. 建立和修改配置檔案
在zookeeper的配置目錄conf 目錄下,有一個官方的配置檔案樣例——zoo_sample.cfg。
將配置檔案的樣例zoo_sample.cfg檔案複製3分,為每一個節點複製一份,分別命名為zoo-1.cfg、zoo-2.cfg、zoo-3.cfg,應用於3個節點。
然後,需要修改每一個節點的配置檔案,將前面建立的編號(Server ID)、日誌目錄、資料目錄,配置進去。
首先,配置 (Server ID)編號、IP、埠。格式為:
server.id=host:port:port
在zookeeper叢集中,每個節點都需要感知到整個叢集是哪些節點組。在配置檔案中,可以按照這樣的格式進行配置,每一行都代表一個節點。
三個節點,配置的例項如下:
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
配置ID的時候,注意四點:
(1)清確保每個節點的myid檔案中的id值不同,不能有相同id的節點;
(2)server.id=houst:port:port的id值,需要與所對應的節點資料目錄下的myid中的di值保持一致。
(3)每一個節點的配置檔案中,不僅僅是配置自己的那份,而是需要所有節點的id、ip、埠配置。
(4)Id配置中,需要配置兩個埠。前一個埠(如上的2888)用於節點之間的通訊使用,後一個埠(如上的3888)用於選舉leader主節點使用。在偽叢集的模式下,兩個埠必須修改每一個節點都不一樣。在分散式叢集模式下,不同節點的ip不同,可以不同節點的埠相同。
其次,配置資料目錄dataDir。
每一個節點,都有自己的資料目錄。資料目錄是沒有預設值的,必須配置。dataDir用於儲存節點快照檔案的目錄。
每個節點只需要配置自己的資料目錄。案例中zoo-1.conf的資料目錄如下:
dataDir=C:\devtools\zookeeper-3.4.13\data\zoo-1
第三,配置服務埠
clientPort:引數clientPort用於配置當前節點的服務埠,客戶端會通過該埠和Zk伺服器建立連線,一般設定為2181。不同的節點,clientPort不能相同,可以按照編號,進行累加。
第四,配置時間相關選項
tickTime:配置單元時間。單元時間是Zookeeper的時間計算單元,其他的時間間隔都是使用tickTime的倍數來表示的。單元時間預設值為3000,單位是毫秒(ms),所以,可以不配置。
initLimit:節點的初始化時間。該引數用於Follower(從節點)啟動,並完成從Leader(主節點)同步資料的時間。Follower伺服器在啟動過程中,會與Leader建立連線並完成對資料的同步,從而確定自己的起始狀態。leader伺服器允許Follower在initLimit時間內完成這個工作。該引數預設值:10,表示是引數tickTime值的10倍,必須配置,且為正整數。
syncLimit:心跳最大延遲週期。該引數用於配置Leader伺服器和Follower之間進行心跳檢測的最大延時時間。在Zk叢集執行的過程中,Leader伺服器會通過心跳檢測來確定Follower伺服器是否存活。如果Leader伺服器在syncLimit時間內無法獲取到Follower的心跳檢測響應,那麼Leader就會認為該Follower已經脫離了和自己的同步。該引數預設值:5,表示是引數tickTime值的5倍,必須配置,且為正整數。
1.1.4. 配置檔案例項
為了給出一個完整的直觀體驗,下面給出三份配置檔案實際的程式碼。
第一個節點的配置檔案zoo-1.conf
tickTime=4000
initLimit = 10
syncLimit = 5
dataDir = C:/devtools/zookeeper-3.4.13/data/zoo-1/
clientPort = 2181
server.1 = 127.0.0.1:2888:3888
server.2 = 127.0.0.1:2889:3889
server.3 = 127.0.0.1:2890:3890
第二個節點的配置檔案zoo-2.conf
tickTime=4000
initLimit = 10
syncLimit = 5
dataDir = C:/devtools/zookeeper-3.4.13/data/zoo-2/
clientPort = 2182
server.1 = 127.0.0.1:2888:3888
server.2 = 127.0.0.1:2889:3889
server.3 = 127.0.0.1:2890:3890
第三個節點的配置檔案zoo-3.conf
tickTime=4000
initLimit = 10
syncLimit = 5
dataDir = C:/devtools/zookeeper-3.4.13/data/zoo-3/
clientPort = 2183
server.1 = 127.0.0.1:2888:3888
server.2 = 127.0.0.1:2889:3889
server.3 = 127.0.0.1:2890:3890
通過三個配置檔案,可以看出,每個節點的server id 的配置,都是全量配置。每一個節點的資料目錄dataDir 和對外服務埠clientPort,則僅僅負責自己的那份。
1.1.5. 修改啟動命令
在bin目錄下,通過複製zkServer.cmd檔案,為每一個偽節點建立一個啟動檔案,分別為 zkServer-1.cmd、zkServer-2.cmd、zkServer-3.cmd。
主要是為每一個節點增加配置檔案(ZOOCFG)、日誌目錄ZOO_LOG_DIR的設定。
修改之後,第一個節點的啟動命令 zkServer-1.cmd程式碼如下:
setlocal
call “%~dp0zkEnv.cmd”
set ZOOCFG=C:\devtools\zookeeper-3.4.13\conf\zoo-1.cfg
set ZOO_LOG_DIR=C:\devtools\zookeeper-3.4.13\log\zoo-1
set ZOOMAIN=org.apache.zookeeper.server.quorum.QuorumPeerMain
echo on
call %JAVA% “-Dzookeeper.log.dir=%ZOO_LOG_DIR%” “-Dzookeeper.root.logger=%ZOO_LOG4J_PROP%” -cp “%CLASSPATH%” %ZOOMAIN% “%ZOOCFG%” %*
endlocal
1.1.6. 啟動偽叢集
開啟一個window的命令控制檯,進入到bin目錄,並且啟動zkServer-1.cmd,這個指令碼中會啟動第一個節點的java服務程序:
C:\devtools\zookeeper-3.4.13>cd bin
C:\devtools\zookeeper-3.4.13\bin>
C:\devtools\zookeeper-3.4.13\bin > zkServer-1.cmd
zookeeper叢集需要有1/2以上的節點啟動,才能完成叢集的啟動,對外提供服務。所以,至少需要再啟動一個節點。
開啟另外一個window的命令控制檯,進入到bin目錄,並且啟動zkServer-2.cmd,這個指令碼中會啟動第一個節點的java服務程序:
C:\devtools\zookeeper-3.4.13>cd bin
C:\devtools\zookeeper-3.4.13\bin>
C:\devtools\zookeeper-3.4.13\bin > zkServer-2.cmd
由於這裡沒有使用後臺服務啟動的模式,所以,這兩個節點服務的視窗,在服務期間,不能關閉。
如何驗證叢集已經成功啟動呢?
方法一:
可以通過jps命令,可以看到QuorumPeerMain的程序的數量。
C:\devtools\zookeeper-3.4.13\bin > jps
方法二:
啟動zookeeper 客戶端,執行檢視一下,是否能連線叢集。如果能夠成功連線,這個時候zookeeper已經安裝成功了,
C:\devtools\zookeeper-3.4.13\bin> ./zkCli.cmd -server 127.0.0.1:2181
windows下,Zookeeper是通過.cmd的批處理命令執行的,預設沒有提供以windows服務的方式執行的方案。
避免每次關閉後,再啟動還需要使用cmd,十分的不方便,可以通過工具prunsrv 來將zookeeper做成 windows 服務,將zookeeper服務化管理。
1.1.7. zk的客戶端常用命令
用zkCli.sh連線上Zookeeper服務後,用help能列出所有命令:
zk的客戶端常用命令 | 功能簡介 |
---|---|
create | 建立路徑結點 |
ls | 檢視路徑下的所有結點 |
get | 獲得結點上的值 |
set | 修改結點上的值 |
delete | 刪除結點 |
寫在最後
下一篇:開啟zk的客戶端開發。
瘋狂創客圈 億級流量 高併發IM 實戰 系列
- Java (Netty) 聊天程式【 億級流量】實戰 開源專案實戰
- Netty 原始碼、原理、JAVA NIO 原理
- Java 面試題 一網打盡
- 瘋狂創客圈 【 部落格園 總入口 】