第一步:
安裝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...