1. 程式人生 > >ZooKeeper學習之配置【1】基本配置

ZooKeeper學習之配置【1】基本配置

本文開始陸續的詳細講解所有的配置選項,大部分配置項一般都有一個預設的值,很多都應該根據實際情況進行優化。因為ZooKeeper的設計很容易使用,有一些在不明白具體的配置項就開始使用,一開始工作得還好,但後續很可能會出問題。所以你需要花些時間來深入學習配置項,你會發現你將可以得到更好的效能,並能更容易的診斷問題。本文會帶你瞭解每個配置項的含義,為什麼會需要使用它們。

每一個ZooKeeper程序啟動的時候會去讀一個名為zoo.cfg的配置檔案。擔任不同角色(如leader,follower後者observer)的server共享一些基本的配置。在資料目錄的myid檔案用來區分各個server。每一個數據目錄必須是獨立的,所以myid檔案需要放在資料目錄中。myid存放的是server id,用來在配置檔案中標識每一個server。當然,如果組建叢集的話,每一個server必須有一個自己專屬的配置檔案。

配置選項一般都在配置檔案中設定。每一個選項也可以通過Java system property進行設定,通常以zookeeper.property的形式使用。在啟動server的使用使用-D選項來指定。下文中如果可以通過這種方式啟動的話,會在圓括號中標明。在配置檔案中的選項會比Java system property有更高的優先權。

基本配置

有一些配置選項沒有預設值,所以必須配置它們:

clientPort

一個TCP埠,提供client來連線。預設會監聽所有的網路介面,除非設定了clientPortAddress配置。這個埠可以隨意設定,只要不與其他埠衝突,預設埠為2181.

dataDir和dataLogDir

dataDir目錄用來存放快照檔案。如果當前的server是叢集的一部分,則id檔案也放在這個目錄。此目錄不需要放在一個專用的裝置。因為是使用一個後臺執行緒去寫這個檔案的,不需要鎖住放在記憶體中的data tree,當完成快照之前,寫操作的資料不會sync到磁碟(不會落地)。

如果沒有設定dataLogDir,事務日誌也會放到這個目錄。事務日誌所在的裝置最好是專用的。server會試圖對事務日誌做順序的寫操作,因為在server對一個事務進行ack之前資料必須sync到磁碟。同一個裝置的其他磁碟操作,比如生成快照,會顯著的影響寫操作,在sync期間把磁碟的磁頭調到別的地方去。所以,最佳實踐是為事務日誌設定一個專用的裝置,並把dataLogDir配到這個裝置的一個目錄上。

tickTime

指明一個tick的長度,單位是毫秒。tick是時間的一個基本度量,它決定了session超時的bucket的size(前文的文章有提過)。

超時時間就是根據以tick為單位進行設定的。這意味著,超時時間的下限就是1個tick的時間,因為最小隻能設定為1個tick。最小的cilent的session超時時間是2個tick。

預設的tickTime為3000毫秒。調低這個值會減少超時時間。但是也會引起網路流量(心跳)和CPU時間(session bucket處理)的增加。