最小配置
- dataDir 記憶體資料庫快照集存放地址,如果沒有指定交易記錄存放地址(dataLogDir),預設也是存放在這個路徑下,建議兩個地址分開存放到不同的裝置上。
- tickTime 心跳基本時間單位,毫秒級,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 如果大於這個值,則會被強制協調為這個最大值。
叢集配置選項
- 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中。
不安全配置項
- 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.