前面兩篇文章介紹了Zookeeper是什麼和能夠幹什麼,那麼接下來咱們就實際的接觸一下Zookeeper這個東西,看看具體如何使用,有個大致的感覺,後面再描述某些地方的時候也能在大腦中有具體的印象。本文只關注分佈式模式的zookeeper,由於這也是在生產環境的惟一部署方式,單機的zookeeper能夠在測試和開發環境使用,可是單機環境的zookeeper就再也不是zookeeper了。服務器
安裝配置很簡單,官網也有介紹,這裏就只對後面的文章有提到的點說明下。session
配置-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
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便可。