zookeeper集群環境搭建詳細圖文教程 zhoubang @ 2018-01-02 【文檔大綱】 友情介紹 軟體環境 註意點 環境安裝 1、 新建用於存儲安裝包以及軟體安裝的目錄 2、 下載安裝zookeeper 3、 解壓zookeeper壓縮包 單節點zookeeper配置 1、 配置zoo ...
zookeeper集群環境搭建詳細圖文教程
zhoubang @ 2018-01-02
【文檔大綱】
友情介紹
軟體環境
註意點
環境安裝
1、 新建用於存儲安裝包以及軟體安裝的目錄
2、 下載安裝zookeeper
3、 解壓zookeeper壓縮包
單節點zookeeper配置
1、 配置zoo.cfg文件
2、 配置zookeeper的數據存儲目錄
3、 新建myid文件
4、 配置zookeeper集群節點
5、 啟動zookeeper服務
6、 檢查zookeeper服務是否成功啟動
多節點zookeeper配置
1、不同虛擬機下的zookeeper配置
2、 驗證不同虛擬機下的zookeeper服務
zookeeper客戶端連接測試
1、 連接節點自身
2、 跨節點連接
停止任意zk節點,觀察zk自動選舉leader效果
恢復停止的zk節點,觀察zk集群節點最新角色分配情況
總結
經驗補充
友情介紹
QQ技術交流群 470414533
個人網站 www.2b2b92b.com
開源中國 https://gitee.com/zhoubang85
在這裡,你可以學習到什麼?
- 你可以完整的學會zookeeper集群環境的搭建和配置
- 通過測試,清楚的知道zookeeper對於存在宕機節點情況下的leader自動選舉
該文檔不僅僅包含zookeeper集群環境搭建的內容,也補充了zookeeper的主從節點等相關的介紹內容,方便學習研究,加深對zookeeper的學習。
文檔內容文字較多,圖文豐富,請耐心閱讀,不會讓你失望。
word版本
如果覺得當前網頁中的圖片看不清,這裡將word版的分享出來,可自行下載瀏覽。
地址 https://pan.baidu.com/s/1hrMaRpq
軟體環境
如果自己沒有伺服器的話,可以在本機安裝WMware虛擬機,如何安裝虛擬機,請自行解決。
VMware-workstation-full-14虛擬機下載地址(裡面有永久註冊碼)
https://pan.baidu.com/s/1eR9T9lw
CentOS-6.5_64位下載地址
https://pan.baidu.com/s/1bZegMi
Zookeeper_3.4.9下載地址
https://archive.apache.org/dist/zookeeper/zookeeper-3.4.9/zookeeper-3.4.9.tar.gz
註意點
在登錄虛擬機中的Linux系統的時候,登錄用戶請使用系統自帶的root,密碼即為安裝過程中自定義的密碼。
不要使用自定義的用戶名登錄,不然有些目錄是沒有寫的許可權的,避免出現一些意外的情況,建議使用root最高許可權賬戶登錄.
環境安裝
我們先在一臺虛擬機中安裝配置好單個ZK服務,成功後我們克隆出多個虛擬機,就無需在其他虛擬機中重新下載安裝zookeeper等重覆操作。
1、新建用於存儲安裝包以及軟體安裝的目錄
在 / 目錄下創建一個以我的名字zhoubang為名稱的目錄,個人習慣罷了,這個請自行命名;
同時在zhoubang目錄下再新建2個目錄software(存儲安裝包)、operation(軟體安裝的目錄),這些都是個人習慣,你們也可以自行選擇目錄創建。
2、下載安裝zookeeper
- 線上下載:推薦使用此方式,簡單方便。
- 本地上傳安裝包 :前提是本地已經有zookeeper的安裝包了。你可以通過FTP等上傳工具直接上傳到對應目錄下.
zk線上下載與安裝:
通過命令 cd /zhoubang/software 進入安裝包的存儲目錄,使用wget命令下載zookeeper(下載地址文檔上面已經提供);如下圖,回車即可下載:
回車之後如果出現下圖所示的<未知的名稱或服務>錯誤,請檢查當前虛擬機下的Linux系統的網路連接是否正常;
3、解壓zookeeper壓縮包
進入 /zhoubang/software目錄, 通過命令 tar -zxvf ./zookeeper-3.4.9.tar.gz -C /zhoubang/operation/ 解壓zookeeper包到指定目錄,這裡我解壓到 /zhoubang/operation 目錄下,如圖:
此時,在/zhoubang/operation目錄下,就會有zookeeper的資源,如下圖:
單節點zookeeper配置
1、配置zoo.cfg文件
如上圖,zk提供的配置文件名稱為zoo_sample.cfg ,首先我們需要將此文件重命名為zoo.cfg。因為zookeeper預設會載入zoo.cfg的文件,這是zk的規定。
查看一下zoo.cfg配置文件裡面的內容有什麼,如下圖:
其中,最常用的配置有以下幾個:
- tickTime:這個時間是作為 Zookeeper 伺服器之間或客戶端與伺服器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。
- dataDir:顧名思義就是 Zookeeper 保存數據的目錄,預設情況下,Zookeeper的日誌文件是在bin目錄下,有一個zookeeper.out文件。
- clientPort:這個埠就是客戶端連接 Zookeeper 伺服器的埠,Zookeeper 會監聽這個埠,接受客戶端的訪問請求。偽集群模式下,這個埠需要配置成不同的。如果是多台虛擬機或者伺服器下,則無需更改。
2、配置zookeeper的數據存儲目錄
這裡我就在zookeeper的安裝根目錄下,新建了一個dataDir目錄,用於存儲zookeeper的數據。
如下圖:
修改zoo.cfg中的dataDir配置,即為剛剛新建的dataDir的目錄地址。最終修改的結果如下圖:
3、新建myid文件
在剛剛新建的dataDir目錄下,新建一個myid文件,該文件裡面的內容,這裡我就填寫為1,至於數值1有何作用和意義?是否可以為其他數字?當然,我也不多做玄乎了,這數值是可以自定義的,單範圍只能是1-255之間。具體的含義,下麵會介紹。如下圖:
4、配置zookeeper集群節點
在zoo.cfg文件中的最下麵,配置zk集群節點信息;當前配置的是單台虛擬機,所以配置內容目前只有一個server節點(等將其他虛擬機克隆並啟動之後,就可以將其他虛擬機信息添加到此),效果如圖:
【server】的配置含義說明:
server.A=B:C:D
其中 A 是一個數字,表示這個是第幾號伺服器;
B 是這個伺服器的 ip 地址;
C 表示的是這個伺服器與集群中的 Leader 伺服器交換信息的埠;
D 表示的是萬一集群中的 Leader 伺服器掛了,需要一個埠來重新進行選舉,選出一個新的 Leader,而這個埠就是用來執行選舉時伺服器相互通信的埠。
如果是偽集群的配置方式(也就是在一臺伺服器上搭建多個ZK服務節點),由於 一臺伺服器下的IP地址肯定一樣,所以不同的 Zookeeper 實例通信埠號不能一樣,故需要給它們分配不同的埠號。
相反,如果是在不同的伺服器下(不同的虛擬機,IP地址不同)搭建ZK的話,由於IP地址不同,則C與D對應的通信埠可以保持一致。當然也可以配置成其他的埠。
【註意點】:
其中的server.1裡面的數字1,是我們在myid文件中指定的數值。代表不同的zk節點。
同時,IP地址配置也要與server.1所在的伺服器節點的IP地址一致。
後面的2個通信埠,隨意指定,只要不與其他埠衝突就行。
5、啟動zookeeper服務
進入zookeeper的bin目錄下,執行命令啟動zookeeper服務
如下圖:
6、檢查zookeeper服務是否成功啟動
在bin目錄下,通過命令 ./zkServer.sh status 查看啟動狀態,如圖:
由於我只啟動了一個ZK服務,所以Mode後面的信息為standalone,意思獨立節點。
多節點zookeeper配置
到上面為止,我們只是在單台虛擬機中成功搭建了zookeeper服務。接下來我們就開始在其他的虛擬機節點中配置zookeeper集群節點信息。
我本機電腦上克隆出了3個虛擬機(當然你也可以克隆很多個,為了學習方便,只配置3個節點就夠了)。
IP地址分別是:
192.168.52.128
192.168.52.129
192.168.52.130
虛擬機克隆情況,如圖所示:
* 這裡虛擬機的命名,是方便大家查看的。 後面的數值1、2、3分別是我在zookeeper的myid文件中指定的數值。
* 每台虛擬機中的系統環境以及zookeeper的安裝配置,都與上面的單節點的zookeeper配置一致。
1、不同虛擬機下的zookeeper配置
需要更改的地方有以下幾點:
- myid文件
- zoo.cfg 文件
1.1 首先我們修改192.168.52.128 對應的虛擬機中的zookeeper配置。
myid文件中的數值為1(當前第一臺虛擬機下的zookeeper可以不用修改,只修改另外2台即可)
然後修改zoo.cfg文件,在最下麵添加ZK節點配置.
最終配置效果如下:
通過配置我們可以看到,需要將其他的zookeeper節點信息配置進來。
再強調一遍,server.1、server.2、server.3 中的數值1、2、3,對應的是dataDir的myid文件中的數值,不要配置錯了,包括IP也要對應。
按照上面的操作步驟,分別對192.168.52.129、192.168.52.130的虛擬機中的zookeeper進行配置。如下:
1.2、將192.168.52.129虛擬機中的zookeeper下的myid中的數值填寫 2 ,對應的zoo.cfg文件最下麵的配置,和上圖一樣的server配置,可以直接copy過去,最終配置如下:
1.3、將192.168.52.130虛擬機中的zookeeper下的myid中的數值填寫 3 ,對應的zoo.cfg文件最下麵的配置,和上圖一樣的server配置,可以直接copy過去,最終配置如下:
至此,我們3個zookeeper節點的配置已經完畢。下麵我們就啟動zookeeper服務,驗證集群是否搭建成功!
2、驗證不同虛擬機下的zookeeper服務
分別進入每個虛擬機下的zookeeper的bin目錄下,執行命令 ./zkServer.sh start 啟動ZK服務!
通過命令 ./zkServer.sh status查看ZK啟動狀態。如果出現了以下錯誤:
我們去查看一下日誌(bin目錄下zookeeper.out日誌文件)。查看裡面的內容,有一段錯誤信息如下:
這種情況下,網上很多人都說是防火牆開啟導致埠無法通信造成的;那我就在每個虛擬機上,把防火牆關閉;可以使用命令 service iptables stop 臨時修改防火牆狀態,關閉防火牆。
防火牆關閉了,這時候全部重啟zookeeper,再通過 ./zkServer.sh status 命令查看啟動狀態,如果出現下麵的任意一個結果,說明ZK集群環境已經搭建成功,如下圖:
到此,zookeeper集群環境已經搭建完畢!
zookeeper客戶端連接測試
我們可以通過zkCli.sh提供的命令進行客戶端連接測試,檢測是否可以跨節點連接。
先看一下各zookeeper節點的角色關係:
192.168.52.128 follower
如下圖:
192.168.52.129 follower
如下圖:
192.168.52.130 leader
如下圖:
連接節點自身
我們先在任意一個zookeeper節點的bin目錄,通過命令./zkCli.sh -server 192.168.52.129:2181連接自己本身(這裡我就在IP為192.168.52.129的伺服器下做客戶端連接測試),
如圖:
出現上圖所示內容,說明zookeeper客戶端連接OK。退出命令為 quit
跨節點連接
既然是集群環境,那肯定可以在任意zookeeper節點下,去連接任意的zookeeper節點。
我們試一下就知道了,同樣的,通過命令./zkCli.sh -server 192.168.52.129:2181連接任意節點。
上面已經做了連接自身的測試了,現在我們就來操作,在192.168.52.129的伺服器上去連接其他的2台伺服器上的zookeeper服務。
先連接192.168.52.128伺服器上的zookeeper服務,如圖:
從圖中可以看出,跨服務節點的連接是OK的!
連接192.168.52.130伺服器上的zookeeper服務,如圖
從圖中可以看出,跨服務節點的連接是OK的!
停止任意zk節點,觀察zk自動選舉leader效果
既然是集群,就必然脫離不了主從的角色,zookeeper自身會根據節點的生存、死亡狀態,自動的進行選舉切換。
這裡我們將角色為leader的解決給停止掉,然後看一下其餘的2個處於正常情況的角色分配情況,看看zookeeper會不會自動進行選舉leader並切換。
再說明一下當前3個zk節點的角色關係:
192.168.52.128 follower
192.168.52.129 follower
192.168.52.130 leader
我們先停止192.168.52.130這個leader主節點,進入zookeeper的bin目錄,執行命令 ./zkServer.sh stop 停止服務。然後通過命令 ./zkServer.sh status 查看當前zk節點狀態是否已經停止,如圖:
說明之前的leader角色的節點已經停止成功了!
乘勝追擊,大約等待5到30秒左右,我們去看一下另外2個zk節點的角色狀態,經過查看,最新的角色分配情況如下:
192.168.52.128 follower
192.168.52.129 leader
從以上2張圖中可以看到,192.168.52.129這個伺服器上的zk節點的角色,從之前的follower變成了leader,192.168.52.128角色沒有發生變化。
這就證明瞭,zookeeper會自動進行leader選舉,而異常停止的zk節點會被剔除在外,不再提供服務。
恢復停止的zk節點,觀察zk集群節點最新角色分配情況
上面的操作,我們知道了zk可以自動進行leader選舉,剔除死亡的服務節點;那麼,當我們恢復剛剛停止的zk節點的話,那這3個節點之間的覺得分配情況又是如何呢?
啟動剛剛停止的zk節點(192.168.52.130),然後在每一個zk的bin目錄下,通過命令 ./zkServer.sh status 查看角色分配情況,結果如下圖:
192.168.52.128 follower
192.168.52.129 leader
192.168.52.130 follower
從圖中可以觀察到,我們把之前停止的zk節點(192.168.52.130)恢復後,這個節點的角色為follower,並沒有恢複原先停止之前的leader角色。
這說明,當zk進行重新leader選舉後,除非leader意外宕機,否則角色不會發生變化。
總結
經過了詳細的操作以及測試,我相信對於新手而言,肯定會學習到不少知識點。這也不枉費我的心血付出啊,寫文檔好累的啊~不過一切值得,文檔完成的那一刻,將會永久留存在互聯網中,供他人學習使用。
其實zookeeper的集群環境搭建以及配置,是很簡單的。只有親身操作,才感受到很簡單,沒有那麼複雜。不要被“集群”等專業術語所嚇到。
本文檔寫的很詳細了,不僅僅只包含環境搭建和配置,也對zk的一些特點以及主從選舉進行了案例測試和說明,加深此文檔的知識儲備水平。
好了,就說到這吧,祝各位學習順利~
【經驗補充】
1、如果在zoo.cfg文件中只配置了一個server節點,且server的內容為當前伺服器的信息;是否可以啟動成功呢?比如下麵的情況:
則在通過命令 ./zkServer.sh start 啟動zk服務的時候,是可以正常啟動的。如下圖:
可以看到,Mode:standalone 的信息,說明是ZK單點。因為我們在zoo.cfg中只配置了自己的server信息.
當然,在zoo.cfg中如果一個server配置都沒有的話,也是這樣的效果,可以成功啟動。
2、與上面第一點相反,如果在zoo.cfg中配置了大於1個的server的配置,如果只啟動一個ZK實例,會啟動成功嗎?如下圖:
這時候如果上面3個ZK沒有一個啟動的話(都是停止狀態),如果此時在任意一個ZK的bin目錄下通過命令 ./zkServer.sh start啟動的話,再使用命令 ./zkServer status 查看啟動狀態,你會發現,會一直報一個錯誤,如圖:
這種錯誤的原因,就是因為你只啟動了一個ZK實例導致的;為什麼會這樣呢?
你想想,既然是在zoo.cfg中配置了3個server,說明是集群的配置,既然是集群,那麼必然會有2種角色,一個是leader、一個是follower;這就說明,我們的ZK服務節點必須至少有2台是正常服務的。
如果只有一臺實例啟動,請問這台是leader角色還是follower角色呢?都不是!原因很簡單,如果唯一啟動的這台ZK突然宕機了,請問,下一個接手的ZK服務節點是誰呢?肯定沒有。這樣的話,也就失去了集群的意義。
因此,ZK啟動的時候,本身會進行驗證,必須啟動至少2台ZK實例,才可以正常提供leader選舉服務。否則就會一直出現上圖的錯誤信息;
3、 如下圖所示,在zoo.cfg中server配置中,是否可以將其中的IP地址使用功能變數名稱或者其他易於識別的名稱代替?如圖:
思考:我們都知道,一個伺服器正常都是使用功能變數名稱來訪問的,使用功能變數名稱的好處就是防止IP發生變化導致伺服器頻繁修改IP引用。在上圖的zookeeper集群的配置中,使用的是IP地址的配置訪問,其實使用IP來這麼做的一個缺陷,肯定就是剛剛說的IP變化所帶來的服務不可用。所以,線上環境一般建議通過功能變數名稱來配置,方便擴展維護。
問題:如何將192.168.52.128、192.168.52.129、192.168.52.130通過功能變數名稱或者其他易於識別的別名替換?
答案:解決方案肯定是有的。
我們就拿其中一個zookeeper節點進行講解配置,其他的節點配置都是一樣的。
我這裡選擇了 192.168.52.128這個伺服器進行zookeeper集群信息的優化配置;
1、首先,肯定需要設置IP地址與功能變數名稱的映射關係,類似於window系統中的host。
通過命令vi編輯 /etc/hosts 文件,進入編輯區域。最終配置如圖:
文件內部最頂層是系統預設有的配置,我們不用理會。我們只需要添加zookeeper的3台伺服器節點的IP與別名的映射關係即可。
IP地址右側的配置,可以隨意指定別名或者功能變數名稱,方便區分標識即可。
保存之後,你也可以通過ping命令來測一下網路狀態,如圖:
圖中所示結果,說明配置的沒有問題。
2、修改zookeeper的zoo.cfg文件,將裡面的server配置部分中的IP地址,替換為上面對應配置的別名,zoo.cfg最終配置如下:
3、重啟zookeeper