1. 程式人生 > >zookeeper 單機偽叢集配置

zookeeper 單機偽叢集配置

由於手頭機器不足,所以在一臺機器上部署了3個server,如果你手頭也比較緊,也可以這麼做。那麼我建了3個資料夾,如下
server1 server2 server3

然後每個資料夾裡面解壓一個zookeeper的下載包,並且還建了幾個資料夾,總體結構如下,最後那個是下載過來壓縮包的解壓檔案
data dataLog logs zookeeper-3.3.2

(1)那麼首先進入data目錄,建立一個myid的檔案,裡面寫入一個數字,比如我這個是server1,那麼就寫一個1,server2對應myid檔案就寫入2,         server3對應myid檔案就寫個3

(2)然後進入zookeeper-3.3.2/conf目錄,那麼如果是剛下過來,會有3個檔案,configuration.xml, log4j.properties,zoo_sample.cfg,這3個檔案我          們首先要做的就是在這個目錄建立一個zoo.cfg的配置檔案,當然你可以把zoo_sample.cfg檔案改成zoo.cfg,配置的內容如下所示:



tickTime=2000
initLimit=5
syncLimit=2
dataDir=xxxx/zookeeper/server1/data
dataLogDir=xxx/zookeeper/server1/dataLog
clientPort=2181

server.=127.0.0.1:2888:3888
server.=127.0.0.1:2889:3889
server.= 127.0.0.1:2890:3890

只是需要注意的是clientPort這個埠.如果你是在1臺機器上部署多個server,

(1)那麼每臺機器都要不同的clientPort  : 比如我server1是2181,  server2是2182,server3是2183,

dataDir和dataLogDir也需要區分下。

(2)最後幾行唯一需要注意的地方就是 server.X 。這個數字就是對應 data/myid中的數字。你在3個server的myid檔案中分別寫入了1,2,3,那麼每個server中的zoo.cfg都配server.1,server.2,server.3就OK了。

(3)因為在同一臺機器上,後面連著的   3個server 和 2個埠  都不要一樣,否則埠衝突

   其中第一個埠    用來叢集成員的資訊交換。 

   第二個埠是       在leader掛掉時專門用來進行選舉leader時所用。

進入zookeeper-3.3.2/bin 目錄中,./zkServer.sh start啟動一個server,這時會報大量錯誤?其實沒什麼關係,因為現在叢集只起了1臺server,zookeeper伺服器端起來會根據【zoo.cfg的伺服器列表】發起選舉leader的請求,因為連不上其他機器而報錯,

那麼當我們起第二個zookeeper例項後,leader將會被選出,從而一致性服務開始可以使用,這是因為3臺機器只要有2臺可用就可以選出leader並且對外提供服務(2n+1臺機器,可以容n臺機器掛掉)。

接下來就可以使用了,我們可以先通過 zookeeper自帶的客戶端互動程式來簡單感受下zookeeper到底做一些什麼事情。進入zookeeper-3.3.2/bin(3個server中任意一個)下,./zkCli.sh –server 127.0.0.1:2182,我連的是開著2182埠的機器。

那麼,首先我們隨便打個命令,因為zookeeper不認識,他會給出命令的help,如下圖

ls(檢視當前節點資料),
ls2(檢視當前節點資料並能看到更新次數等資料) ,
create(建立一個節點) ,
get(得到一個節點,包含資料和更新次數等資料),
set(修改節點)
delete(刪除一個節點)

通過上述命令實踐,我們可以發現,zookeeper使用了一個類似檔案系統的樹結構,資料可以掛在某個節點上,可以對這個節點進行刪改。另外我們還發現,當改動一個節點的時候,叢集中活著的機器都會更新到一致的資料。