zookeeper集群搭建

2021-09-23 18:50:17 字數 3434 閱讀 1339

第一步:

安裝jdk

第二步:解壓縮zookeeper壓縮包

第三步:將conf資料夾下zoo_sample.cfg複製乙份,改名為zoo.cfg

第四步:修改配置datadir屬性,指定乙個真實目錄(進入zookeeper解壓目錄,建立data目錄:mkdir data)

第五步:啟動zookeeper:bin/zkserver.sh start關閉zookeeper:bin/zkserver.sh stop檢視zookeeper狀態:bin/zkserver.sh status注意關閉防火牆。

dubbo相關依賴

1. 專案中新增dubbo的依賴加入dubbo相關的jar包。服務層、表現層都新增。

com.alibaba

dubbo

org.springframework

spring

org.jboss.netty

netty

org.apache.zookeeper

zookeeper

com.github.sgroschupf

zkclient

集群擁有以下兩個特點:

可擴充套件性:集群的效能不限制於單一的服務實體,新的服務實體可以動態的新增到集群,從而增強集群的效能。

高可用性:集群當其中乙個節點發生故障時,這台節點上面所執行的應用程式將在另一台節點被自動接管,消除單點故障對於增強資料可用性、可達性和可靠性是非常重要的。

集群必須擁有以下兩大能力:

負載均衡:負載均衡把任務比較均勻的分布到集群環境下的計算和網路資源,以提高資料吞吐量。

錯誤恢復:如果集群中的某一台伺服器由於故障或者維護需要無法使用,資源和應用程式將轉移到可用的集群節點上。這種由於某個節點的資源不能工作,另乙個可用節點中的資源能夠透明的接管並繼續完成任務的過程,叫做錯誤恢復。

負載均衡和錯誤恢復要求各服務實體中有執行同一任務的資源存在,而且對於同一任務的各個資源來說,執行任務所需的資訊檢視必須是相同的。

zookeeper的啟動過程中leader選舉是非常重要而且最複雜的乙個環節。那麼什麼是leader選舉呢?zookeeper為什麼需要leader選舉呢?zookeeper的leader選舉的過程又是什麼樣子的?

首先我們來看看什麼是leader選舉。其實這個很好理解,leader選舉就像**選舉一樣,每人一票,獲得多數票的人就當選為**了。在zookeeper集群中也是一樣,每個節點都會投票,如果某個節點獲得超過半數以上的節點的投票,則該節點就是leader節點了。

以乙個簡單的例子來說明整個選舉的過程.

假設有五颱伺服器組成的zookeeper集群,它們的id從1-5,同時它們都是最新啟動的,也就是沒有歷史資料,在存放資料量這一點上,都是一樣的.假設這些伺服器依序啟動,來看看會發生什麼 。

1) 伺服器1啟動,此時只有它一台伺服器啟動了,它發出去的報沒有任何響應,所以它的選舉狀態一直是looking狀態

2) 伺服器2啟動,它與最開始啟動的伺服器1進行通訊,互相交換自己的選舉結果,由於兩者都沒有歷史資料,所以id值較大的伺服器2勝出,但是由於沒有達到超過半數以上的伺服器都同意選舉它(這個例子中的半數以上是3),所以伺服器1,2還是繼續保持looking狀態.

3) 伺服器3啟動,根據前面的理論分析,伺服器3成為伺服器1,2,3中的老大,而與上面不同的是,此時有三颱伺服器選舉了它,所以它成為了這次選舉的leader.

4) 伺服器4啟動,根據前面的分析,理論上伺服器4應該是伺服器1,2,3,4中最大的,但是由於前面已經有半數以上的伺服器選舉了伺服器3,所以它只能接收當小弟的命了.

5) 伺服器5啟動,同4一樣,當小弟

搭建zookeeper集群

2.2.1搭建要求

真實的集群是需要部署在不同的伺服器上的,但是在我們測試時同時啟動十幾個虛擬機器記憶體會吃不消,所以我們通常會搭建偽集群,也就是把所有的服務都搭建在一台虛擬機器上,用埠進行區分。

我們這裡要求搭建乙個三個節點的zookeeper集群(偽集群)。

2.2.2準備工作

重新部署一台虛擬機器作為我們搭建集群的測試伺服器。

(1)安裝jdk 【此步驟省略】。

(2)zookeeper壓縮包上傳到伺服器

(3)將zookeeper解壓 ,建立data目錄 ,將 conf下zoo_sample.cfg 檔案改名為 zoo.cfg

(4)建立/usr/local/zookeeper-cluster目錄,將解壓後的zookeeper複製到以下三個目錄

/usr/local/zookeeper-cluster/zookeeper-1

/usr/local/zookeeper-cluster/zookeeper-2

/usr/local/zookeeper-cluster/zookeeper-3

[root@localhost ~]# mkdir /usr/local/zookeeper-cluster

[root@localhost ~]# cp -r zookeeper-3.4.6 /usr/local/zookeeper-cluster/zookeeper-1

[root@localhost ~]# cp -r zookeeper-3.4.6 /usr/local/zookeeper-cluster/zookeeper-2

[root@localhost ~]# cp -r zookeeper-3.4.6 /usr/local/zookeeper-cluster/zookeeper-3

(5) 配置每乙個zookeeper 的datadir(zoo.cfg) clientport 分別為2181 2182 2183

修改/usr/local/zookeeper-cluster/zookeeper-1/conf/zoo.cfg

clientport=2181

datadir=/usr/local/zookeeper-cluster/zookeeper-1/data

修改/usr/local/zookeeper-cluster/zookeeper-2/conf/zoo.cfg

clientport=2182

datadir=/usr/local/zookeeper-cluster/zookeeper-2/data

修改/usr/local/zookeeper-cluster/zookeeper-3/conf/zoo.cfg

clientport=2183

datadir=/usr/local/zookeeper-cluster/zookeeper-3/data

2.2.3配置集群

(1)在每個zookeeper的 data 目錄下建立乙個 myid 檔案,內容分別是1、2、3 。這個檔案就是記錄每個伺服器的id

如果你要建立的文字檔案內容比較簡單,我們可以通過echo 命令快速建立檔案

格式為:

echo 內容 >檔名

例如我們為第乙個zookeeper指定id為1,則輸入命令

zookeeper集群搭建

接觸zookeeper集群已有很長很長一段時間了,zookeeper在專案中的使用相當的頻繁,如dubb服務 amq集群 大資料領域hadoop等。zookeeper的集群建立非常簡單,一直想寫一篇文章來對集群使用的介紹,但一直沒能抽出空,今天正好閒來無事,就重新實踐一遍來整理記錄,下文是基本的集群...

zookeeper集群搭建

zookeeper環境搭建需要保證奇數臺機器,以保證演算法能選舉出乙個leader。一 環境準備 datadir dir ticktime 2000 initlimit 5 synclimit 2 clientport 2181 server.0 192.168.1.100 2888 3888 se...

zookeeper集群搭建

1.準備工作 tomcat zookeeper 最少三個結點搭乙個集群,所以複製三份 2.搭建並配置三個zookeeper例項 cd usr local solr cloud zookeeper01 進zookeeper01目錄,mkdir data 該目錄下建立data資料夾,放置zookeepe...