zookeeper集羣搭建

zookeeper單機搭建(基於Linux)

第一步:
安裝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包。服務層、表現層都添加。
<!-- dubbo相關 -->
           <dependency>
                 <groupId>com.alibaba</groupId>
                 <artifactId>dubbo</artifactId>
                 <!-- 排除依賴 -->
                 <exclusions>
                      <exclusion>
                            <groupId>org.springframework</groupId>
                            <artifactId>spring</artifactId>
                      </exclusion>
                      <exclusion>
                            <groupId>org.jboss.netty</groupId>
                            <artifactId>netty</artifactId>
                      </exclusion>
                 </exclusions>
           </dependency>
           <dependency>
                 <groupId>org.apache.zookeeper</groupId>
                 <artifactId>zookeeper</artifactId>
           </dependency>
           <dependency>
                 <groupId>com.github.sgroschupf</groupId>
                 <artifactId>zkclient</artifactId>
           </dependency>

zookeeper集羣搭建

集羣擁有以下兩個特點:

  1. 可擴展性:集羣的性能不限制於單一的服務實體,新的服務實體可以動態的添加到集羣,從而增強集羣的性能。
  2. 高可用性:集羣當其中一個節點發生故障時,這臺節點上面所運行的應用程序將在另一臺節點被自動接管,消除單點故障對於增強數據可用性、可達性和可靠性是非常重要的。
    集羣必須擁有以下兩大能力:
  3. 負載均衡:負載均衡把任務比較均勻的分佈到集羣環境下的計算和網絡資源,以提高數據吞吐量。
  4. 錯誤恢復:如果集羣中的某一臺服務器由於故障或者維護需要無法使用,資源和應用程序將轉移到可用的集羣節點上。這種由於某個節點的資源不能工作,另一個可用節點中的資源能夠透明的接管並繼續完成任務的過程,叫做錯誤恢復。
    負載均衡和錯誤恢復要求各服務實體中有執行同一任務的資源存在,而且對於同一任務的各個資源來說,執行任務所需的信息視圖必須是相同的。

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,則輸入命令

(2)在每一個zookeeper 的 zoo.cfg配置客戶端訪問端口(clientPort)和集羣服務器IP列表。
集羣服務器IP列表如下
server.1=192.168.25.140:2881:3881
server.2=192.168.25.140:2882:3882
server.3=192.168.25.140:2883:3883
解釋:server.服務器ID=服務器IP地址:服務器之間通信端口:服務器之間投票選舉端口

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