天天看點

Zookeeper-Zookeeper的配置

前面兩篇文章介紹了Zookeeper是什麼和可以幹什麼,那麼接下來我們就實際的接觸一下Zookeeper這個東西,看看具體如何使用,有個大體的感受,後面再描述某些地方的時候也能在大腦中有具體的印象。本文隻關注分布式模式的zookeeper,因為這也是在生産環境的唯一部署方式,單機的zookeeper可以在測試和開發環境使用,但是單機環境的zookeeper就不再是zookeeper了。

安裝配置很簡單,官網也有介紹,這裡就隻對後面的文章有提到的點說明下。

配置-zoo.cfg

這是zookeeper的主要配置檔案,因為Zookeeper是一個叢集服務,叢集的每個節點都需要這個配置檔案。為了避免出差錯,zoo.cfg這個配置檔案裡沒有跟特定節點相關的配置,是以每個節點上的這個zoo.cfg都是一模一樣的配置。這樣就非常便于管理了,比如我們可以把這個檔案送出到版本控制裡管理起來。其實這給我們設計叢集系統的時候也是個提示:叢集系統一般有很多配置,應該盡量将通用的配置和特定每個服務的配置(比如服務辨別)分離,這樣通用的配置在不同服務之間copy就ok了。ok,下面來介紹一些配置點:

clientPort=2181

client port,顧名思義,就是用戶端連接配接zookeeper服務的端口。這是一個TCP port。

dataDir=/data

dataLogDir=/datalog

dataLogDir如果沒提供的話使用的則是dataDir。zookeeper的持久化都存儲在這兩個目錄裡。dataLogDir裡是放到的順序日志(WAL)。而dataDir裡放的是記憶體資料結構的snapshot,便于快速恢複。為了達到性能最大化,一般建議把dataDir和dataLogDir分到不同的磁盤上,這樣就可以充分利用磁盤順序寫的特性。

下面是叢集中服務的清單

server.1=127.0.0.1:20881:30881

server.2=127.0.0.1:20882:30882

server.3=127.0.0.1:20883:30883

在上面的例子中,我把三個zookeeper服務放到同一台機器上。上面的配置中有兩個TCP port。後面一個是用于Zookeeper選舉用的,而前一個是Leader和Follower或Observer交換資料使用的。我們還注意到server.後面的數字。這個就是myid(關于myid是什麼下一節會介紹)。

上面這幾個是一些基本配置。

還有像 tickTime,這是個時間機關定量。比如tickTime=1000,這就表示在zookeeper裡1 tick表示1000 ms,所有其他用到時間的地方都會用多少tick來表示。

比如 syncLimit = 2 就表示fowller與leader的心跳時間是2 tick。

maxClientCnxns -- 對于一個用戶端的連接配接數限制,預設是60,這在大部分時候是足夠了。但是在我們實際使用中發現,在測試環境經常超過這個數,經過調查發現有的團隊将幾十個應用全部部署到一台機器上,以友善測試,于是這個數字就超過了。

minSessionTimeout, maxSessionTimeout -- 一般,用戶端連接配接zookeeper的時候,都會設定一個session timeout,如果超過這個時間client沒有與zookeeper server有聯系,則這個session會被設定為過期(如果這個session上有臨時節點,則會被全部删除,這就是實作叢集感覺的基礎,後面的文章會介紹這一點)。但是這個時間不是用戶端可以無限制設定的,伺服器可以設定這兩個參數來限制用戶端設定的範圍。

autopurge.snapRetainCount,autopurge.purgeInterval -- 用戶端在與zookeeper互動過程中會産生非常多的日志,而且zookeeper也會将記憶體中的資料作為snapshot儲存下來,這些資料是不會被自動删除的,這樣磁盤中這樣的資料就會越來越多。不過可以通過這兩個參數來設定,讓zookeeper自動删除資料。autopurge.purgeInterval就是設定多少小時清理一次。而autopurge.snapRetainCount是設定保留多少個snapshot,之前的則删除。

不過如果你的叢集是一個非常繁忙的叢集,然後又碰上這個删除操作,可能會影響zookeeper叢集的性能,是以一般會讓這個過程在通路低谷的時候進行,但是遺憾的是zookeeper并沒有設定在哪個時間點運作的設定,是以有的時候我們會禁用這個自動删除的功能,而在伺服器上配置一個cron,然後在淩晨來幹這件事。

以上就是zoo.cfg裡的一些配置了。下面就來介紹myid。

配置-myid

在dataDir裡會放置一個myid檔案,裡面就一個數字,用來唯一辨別這個服務。這個id是很重要的,一定要保證整個叢集中唯一。zookeeper會根據這個id來取出server.x上的配置。比如目前id為1,則對應着zoo.cfg裡的server.1的配置。

2. 而且在後面我們介紹leader選舉的時候,這個id的大小也是有意義的。

OK,上面就是配置的講解了,現在我們可以啟動zookeeper叢集了。進入到bin目錄,執行 ./zkServer.sh start即可。

本文轉自 yntmdr 51CTO部落格,原文連結:http://blog.51cto.com/yntmdr/1943985,如需轉載請自行聯系原作者

繼續閱讀