ZooKeeper系列文章:http://www.javashuo.com/article/p-waqydwdc-bt.htmlhtml
zkServer.sh讀取的默認配置文件是$ZOOKEEPER_HOME/conf/zoo.cfg。若是要用其它配置文件。以下傳遞配置文件參數:算法
zkServer.sh start your_config zkServer.sh stop your_config zkServer.sh status your_config
配置文件的官方說明:http://zookeeper.apache.org/doc/r3.4.12/zookeeperAdmin.html#sc_configuration數據庫
如下是ZooKeeper的配置文件中各配置項的解釋,分兩部分:一部分是ZooKeeper正常運行所必須的配置項(只有3項),一部分是非必須項。apache
下面3項是ZooKeeper正常運行所必須配置的。數組
clientPort
:
向外提供服務的端口號。換句話說,是給客戶端鏈接的端口。bash
dataDir
:
ZooKeeper的數據目錄,主要目的是存儲內存數據庫序列化後的快照路徑。若是沒有配置事務日誌(即dataLogDir配置項)的路徑,那麼ZooKeeper的事務日誌也存放在數據目錄中。服務器
tickTime
:
tick的中文意思是"嘀的一聲",tickTime指的是滴答一聲的時間長度。在ZooKeeper中,它是全部涉及到時間長度的單元,單位爲毫秒,就至關於時鐘裏的秒單元同樣。例如,tickTime=2000;initLimit=5
,表示initLimit的時間爲"嘀嗒"5次,長度爲2000*5=10
秒。tickTime隱含了心跳時間(即心跳時間爲tickTime),還隱含了客戶端和服務器之間保持的會話的最小和最大超時時間(最小2倍tickTime,最大20倍tickTime)。併發
dataLogDir
:
指定事務日誌的存放目錄。事務日誌對ZooKeeper的影響很是大,強烈建議事務日誌目錄和數據目錄分開,不要將事務日誌記錄在數據目錄(主要用來存放內存數據庫快照)下。函數
globalOutstandingLimit
:
接收客戶端的最大請求隊列。默認是1000。爲了提升ZooKeeper的吞吐量,即便ZooKeeper已經沒有空閒資源來處理新的客戶端請求,也仍是會接收進來。這個配置項是爲了限流,避免內存溢出。日誌
preAllocSize
:
爲事務日誌預先開闢磁盤空間。默認是64M,意味着每一個事務日誌大小就是64M(能夠去事務日誌目錄中看一下,每一個事務日誌只要被建立出來,就是64M)。若是ZooKeeper產生快照頻率較大,能夠考慮減少這個參數,由於每次快照後都會切換到新的事務日誌,但前面的64M根本就沒寫完。(見snapCount配置項)
snapCount
:
ZooKeeper使用事務日誌和快照來持久化每一個事務(注意是日誌先寫)。該配置項指定ZooKeeper在將內存數據庫序列化爲快照以前,須要先寫多少次事務日誌。也就是說,每寫幾回事務日誌,就快照一次。默認值爲100000。爲了防止全部的ZooKeeper服務器節點同時生成快照(通常狀況下,全部實例的配置文件是徹底相同的),當某節點的先寫事務數量在(snapCount/2+1,snapCount)範圍內時(挑選一個隨機值),這個值就是該節點拍快照的時機。
maxClientCnxns
:
在套接字級別上限制同一客戶端的併發鏈接數。由於同一客戶端IP地址相同,可能會調度到同一個ZooKeeper服務器節點上。這個配置項是爲了不DoS攻擊。默認值爲60,設置爲0表示不作任何限制。
clientPortAddress
:
指定爲客戶端提供服務的監聽地址(ipv4/ipv6)。換句話說,clientPort將只綁定在地址上。若是不設置該選項,將默認監聽在全部地址上(0.0.0.0)。
minSessionTimeout
:maxSessionTimeout
:
客戶端和服務端會話保持的最小、最大超時時間。ZooKeeper的不少數據和狀態都和會話綁定。假如客戶端和服務端成功創建鏈接(會話)後,正常狀況下,客戶端會時不時地向服務端發送心跳,若是這個服務端或者客戶端掛了,它們之間的會話要保持多長時間。
fsync.warningthresholdms
:
事務日誌輸出時,若是調用fsync方法超過此處指定的超時時間,那麼會在日誌中輸出警告信息。默認是1000ms。
autopurge.snapRetainCount
:
該配置項指定開啓了ZooKeeper的自動清理功能後(見下一個配置項),每次自動清理時要保留的版本數量。默認值爲3,最小值也爲3。它表示在自動清理時,會保留最近3個快照以及這3個快照對應的事務日誌。其它的全部快照和日誌都清理。
autopurge.purgeInterval
:
指定觸發自動清理功能的時間間隔,單位爲小時,值爲大於或等於1的整數,默認值爲0,表示不開啓自動清理功能。
syncEnabled
:
指定觀察者(observers)是否像follower同樣,也記錄事務日誌和快照,以便在observers重啓時能加速恢復。默認值爲true,設置爲false表示禁用該功能,不記錄日誌和快照。
在配置ZooKeeper集羣時可能用到的配置項。
electionAlg
:
指定leader選舉算法。默認值爲3,表示使用基於TCP的快速選舉。在之前的版本中,還有0/1/2三種算法,它們都是基於UDP的,已經廢棄了,之後的版本中會移除這三種算法。
initLimit
:
followers啓動時須要鏈接leader,並從Leader處獲取它所缺失的那部分數據,以便它能和leader的數據保持同步。只有保持了同步,該follower才被標記爲ONLINE,而後才能提供服務。這個配置項限定從follower啓動到恢復完成的超時時間。通常狀況下,ZooKeeper保存的都是協調數據,數據量不會很大,但若是要同步的數據很大,能夠考慮增大這個選項的值。注意,這個值依賴於tickTime時間單元,例如tickTime=2000,initLimit=2
表示4秒。
syncLimit
:
follower和leader之間數據延遲的最大時間長度。例如,有個節點的更新操做緩慢,它的數據已經嚴重落後於leader,ZooKeeper就會將它從ZooKeeper集羣中踢出去。ZooKeeper使用時間來度量follower和leader之間數據的延遲,這個選項的值依賴於tickTime,例如tickTime=2000,syncLimit=2
表示follower比leader延遲了4秒。
leaderServes
:
默認值爲yes,表示leader也接受客戶端的鏈接,接受來自客戶端的讀、寫請求。leader的主要做用是協調ZooKeeper集羣服務器節點間的寫操做,若是想要獲取更高的寫吞吐量,能夠將其設置爲no,這樣leader將不容許客戶端的鏈接,它將專一於協調,但這會損失一點讀吞吐量。
server.x=[hostname]:port_A:port_B
:若是要配置的ZooKeeper的僞集羣(多個ZooKeeper實例運行在同一機器上),每一個server.X中的X、port_A和port_B必須不能相同。
例如,3個服務器節點的僞集羣ZooKeeper,數據目錄分別爲/zk/data1,/zk/data2,/zk/data3。能夠這樣配置。
server.1=localhost:2881:3881 server.2=localhost:2882:3882 server.3=localhost:2883:3883
而後在data1/myid、data2/myid、data3/myid中分別寫入一、二、3(須要和X值對應)。
group.x=A[:B]
:weight.y=N
:group.1=1:2:3
表示將這3個節點放進一個id=1的組中。server.1=aaaa server.2=aaaa server.3=aaaa server.4=aaaa server.5=aaaa server.6=aaaa server.7=aaaa server.8=aaaa server.9=aaaa group.1=1:2:3 group.2=4:5:6 group.3=7:8:9 weight.1=1 weight.2=1 weight.3=1 weight.4=1 weight.5=1 weight.6=1 weight.7=1 weight.8=1 weight.9=1
當須要仲裁時,首先過濾掉權重值爲0的組(即組中全部節點權重都爲0),而後判斷,若是組中有大多數節點投票的組達到了大多數組的要求,仲裁就經過。換個理解方式,就是先在組內投票,而後組自身投票。組內投票數達到了該組的大多數,這個組就有一票。若是投票的組數量達到了總組數的大多數(不考慮權重爲0的組),則整個仲裁就經過。
cnxTimeout
:
在投票選舉新的leader時,須要經過選舉端口創建鏈接來發送通知信息。該配置項設置打開這個鏈接的超時時長。默認值爲5。
ipReachableTimeout
:
3.4.11版本中才引入的配置項。當解析主機名時,爲可訪問的IP地址設置此超時值,單位毫秒。默認狀況下,ZooKeeper將使用主機名的第一個IP地址(不作任何reachable檢查)。設置ipReachableTimeout(大於0)後,ZooKeeper將嘗試獲取第一個可訪問的IP地址。這是經過調用Java API函數InetAddress.isreavailable(long timeout)
實現的。其中使用了這個超時值。若是找不到這樣的IP地址,主機名的第一個IP地址將被使用。
還有一些配置項,用到的可能性很小,因此不解釋了。若有須要,參考官方手冊:http://zookeeper.apache.org/doc/r3.4.12/zookeeperAdmin.html#sc_configuration。