Zookeeper集羣

zookeeper集羣簡介

  大部分分佈式應用需要一個主控、協調器或者控制器來管理物理分佈的子進程。目前,大多數都要開發私有的協調程序,缺乏一個通用機制,協調程序的反覆編寫浪費,且難以形成通用、伸縮性好的協調器,zookeeper提供通用的分佈式鎖服務,用以協調分佈式應用。所以說zookeeper是分佈式應用的協作服務。
  zookeeper作爲註冊中心,服務器和客戶端都要訪問,如果有大量的併發,肯定會有等待。所以可以通過zookeeper集羣解決。
  下面是zookeeper集羣部署結構圖。
zookeeper集羣

leader選舉(簡要概述後期會詳細講解)

  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集羣

  真實的集羣是需要部署在不同的服務器上的,但是在我們測試時同時啓動十幾個虛擬機內存會吃不消,所以我們通常會搭建僞集羣,也就是把所有的服務都搭建在一臺虛擬機上,用端口進行區分。
  我們這裏要求搭建一個三個節點的Zookeeper集羣(僞集羣)。

準備工作

  1. 將zookeeper的壓縮包上傳到服務器,並且解壓
    2)在解壓後的文件夾中創建data目錄並且將 conf 下的 zoo_sample.cfg 文件改名爲 zoo.cfg
    3)在 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

  1. 配置每個zookeeper的dataDir 和 clientPort,clientPort分別爲2181,2182,2183
以第一個爲例
[root@localhost ~]# vi  /usr/local/zookeeper-cluster/zookeeper-1/conf/zoo.cfg
下面是需要修改的內容
clientPort=2181
dataDir=/usr/local/zookeeper-cluster/zookeeper-1/data

配置集羣

  1. 在每個zookeeper的 data 目錄下創建一個 myid 文件,內容分別是1、2、3 。這個文件就是記錄每個服務器的ID
以第一個爲例
[root@localhost ~]# echo 1 >/usr/local/zookeeper-cluster/zookeeper-1/data/myid
  1. 在每一個zookeeper 的 zoo.cfg配置客戶端訪問端口(clientPort)和集羣服務器IP列表。
    server.1=192.168.25.101:2881:3881
    server.2=192.168.25.101:2882:3882
    server.3=192.168.25.101:2883:3883

server.服務器ID=服務器IP地址:服務器之間通信端口:服務器之間投票選舉端口

啓動集羣

啓動集羣就是分別啓動每個實例
在這裏插入圖片描述
然後我們查詢一下狀態
在這裏插入圖片描述
從查詢結果可以看出,第一個服務和第三個服務爲 follower(從),第二個服務爲leader(主)

dubbo 鏈接zookeeper 集羣

修改服務提供者和服務調用者的spring配置文件

<!-- 指定註冊中心地址 -->
<dubbo:registry
protocol="zookeeper" address="192.168.25.101:2181,192.168.25.101:2182,192.168.25.101:2183">
</dubbo:registry>

end…

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