文章轉自:算法
http://www.bug315.com/article/159.htm數據庫
http://www.bug315.com/article/160.htm安全
Zookeeper是經過一個***.cfg配置文件來進行配置管理的,默認使用zoo.cfg文件進行配置。下面咱們將仔細介紹Zookeeper的配置項及該配置項的主要做用。服務器
1、ZK的最小配置網絡
最小配置是指Zookeeper運行所需的最小配置,Zookeeper只須要配置這些項就能夠正常的運行Zookeeper。session
clientPortide
配置ZK監聽客戶端鏈接的端口spa
dataDir日誌
內存數據庫快照存放地址,若是沒有指定事務日誌存放地址(dataLogDir),默認也是存放在這個路徑下,建議兩個地址分開存放到不一樣的設備上。code
tickTime
心跳基本時間單位,毫秒級,ZK基本上全部的時間都是這個時間的整數倍。
2、ZK的高級配置(可選)
高級配置是指有的須要直接經過系統屬性進行設置)
dataLogDir
將事務日誌存儲在該路徑下,比較重要,這個日誌存儲的設備效率會影響ZK的寫吞吐量。
globalOutstandingLimit
(Java system property: zookeeper.globalOutstandingLimit)默認值是1000,限定了全部鏈接到服務器上可是尚未返回響應的請求個數(全部客戶端請求的總數,不是鏈接總數),這個參數是針對單臺服務器而言,設定太大可能會致使內存溢出。
preAllocSize
(Java system property: zookeeper.preAllocSize)默認值64M,以KB爲單位,預先分配額定空間用於後續transactionlog 寫入,每當剩餘空間小於4K時,就會又分配64M,如此循環。若是SNAP作得比較頻繁(snapCount比較小的時候),那麼請減小這個值。
snapCount
(Java system property: zookeeper.snapCount)默認值100,000,當transaction每達到snapCount/2+rand.nextInt(snapCount/2)時,就作一次SNAPSHOT,默認狀況下是50,000~100,000條transactionlog就會作一次,之因此用隨機數是爲了不全部服務器可能在同一時間作snapshot.
traceFile (Java system property: requestTraceFile)
maxClientCnxns
默認值是10,一個客戶端可以鏈接到同一個服務器上的最大鏈接數,根據IP來區分。若是設置爲0,表示沒有任何限制。設置該值一方面是爲了防止DoS攻擊。
clientPortAddress
與clientPort匹配,表示某個IP地址,若是服務器有多個網絡接口(多個IP地址),若是沒有設置這個屬性,則clientPort會綁定到全部IP地址上,不然只綁定到該設置的IP地址上。
minSessionTimeout
最小的session time時間,默認值是2個tick time,客戶端設置的session time 若是小於這個值,則會被強制協調爲這個最小值。
maxSessionTimeout
最大的session time 時間,默認值是20個tick time. ,客戶端設置的session time 若是大於這個值,則會被強制協調爲這個最大值。
3、ZK的集羣配置選項
electionAlg
領導選舉算法,默認是3(fast leader election,基於TCP),0表示leader選舉算法(基於UDP),1表示非受權快速選舉算法(基於UDP),2表示受權快速選舉算法(基於UDP),目前1和2算法都沒有應用,不建議使用,0算法將來也可能會被幹掉,只保留3(fast leader election)算法,所以最好直接使用默認就好。
initLimit
tickTime的個數,表示在leader選舉結束後,followers與leader同步須要的時間,若是followers比較多或者說leader的數據灰常多時,同步時間相應可能會增長,那麼這個值也須要相應增長。固然,這個值也是follower和observer在開始同步leader的數據時的最大等待時間(setSoTimeout)
syncLimit
tickTime的個數,這時間容易和上面的時間混淆,它也表示follower和observer與leader交互時的最大等待時間,只不過是在與leader同步完畢以後,進入正常請求轉發或ping等消息交互時的超時時間。
leaderServes
(Java system property: zookeeper.leaderServes) 若是該值不是no,則表示該服務器做爲leader時是須要接受客戶端鏈接的。爲了得到更高吞吐量,當服務器數三臺以上時通常建議設置爲no。
cnxTimeout
(Java system property: zookeeper.cnxTimeout) 默認值是5000,單位ms 表示leaderelection時打開鏈接的超時時間,只用在算法3中。
4、ZK的不安全配置項
skipACL
(Java systemproperty: zookeeper.skipACL) 默認值是no,忽略全部ACL檢查,至關於開放了全部數據權限給任何人。
forceSync
(Java systemproperty: zookeeper.forceSync) 默認值是yes, 表示transactionlog在commit時是否當即寫到磁盤上,若是關閉這個選項可能會在斷電時丟失信息。
jute.maxbuffer
(Java system property: jute.maxbuffer)默認值0xfffff,單位是KB,表示節點數據最多1M。若是要設置這個值,必需要在全部服務器上都須要設置。
受權認證配置項
DigestAuthenticationProvider.superDigest
(Java system property only: zookeeper.DigestAuthenticationProvider.superDigest) 設置這個值是爲了肯定一個超級用戶,它的值格式爲
super:<base64encoded(SHA1(idpassword))> ,一旦當前鏈接addAuthInfo超級用戶驗證經過,後續全部操做都不會checkACL.