1. 程式人生 > >ZooKeeper學習第三期---zookeeper常用配置

ZooKeeper學習第三期---zookeeper常用配置

基本配置

clientPort 該引數無預設值,必須配置,不支援系統屬性方式配置。引數clientPort用於配置當前伺服器對外的伺服器埠,客戶端會通過該埠和Zookeeper伺服器建立連線,一般設定為2181。每臺Zookeeper伺服器都可以配置任意可用的埠,同時,叢集中的所有伺服器不需要保持clientPort埠一致。
dataDir 該引數無預設值,必須配置,不支援系統屬性方式配置。引數dataDir用於配置Zookeeper伺服器儲存快照檔案的目錄。預設情況下,如果沒有配置引數dataLogDir,那麼事務日誌也會儲存在這個目錄中。考慮到事務日誌的寫效能直接影響Zookeeper整體的服務能力,因此建議同時通過引數dataLogDir來配置Zookeeper事務日誌的儲存目錄。
tickTime

該引數有預設值:3000,單位是毫秒(ms),可以不配置,不支援系統屬性方式配置。引數tickTime用於配置Zookeeper中最小事件單元的長度,很多執行時的時間間隔都是使用tickTime的倍數來表示的。例如,Zookeeper中會話的最小超時時間預設是2*tickTime.

高階配置

dataLogDir 該引數有預設值:dataDir,可以不配置,不支援系統屬性方式配置。引數dataLogDir用於配置Zookeeper伺服器儲存事務日誌檔案的目錄。預設情況下,Zookeeper會將事務日誌檔案和快照資料儲存在同一個目錄中,使用者應儘量將這兩者的目錄區分開來。另外,如果條件允許,可以將事務日誌的儲存配置在一個單獨的磁碟上。事務日誌記錄對於磁碟的效能要求非常高,為了保證資料的一致性,Zookeeper在返回客戶端事務請求響應之前,必須將本次請求對應的事務日誌寫入到磁碟中。因此事務日誌寫入的效能直接決定了Zookeeper在處理事務請求時的吞吐。針對同一塊磁碟的其他併發讀寫操作(例如Zookeeper執行時日誌輸出和作業系統自身的讀寫等),尤其是資料快照操作,會極大的影響事務日誌的寫效能。因此儘量給事務日誌的輸出配置一個單獨的磁碟或是掛載點,將極大地提升Zookeeper的整體效能
initLimit 該引數有預設值:10,即表示是引數tickTime值的10倍,必須配置,且需要配置一個正整數,不支援系統屬性方式配置。該引數用於配置Leader伺服器等待Follower啟動,並完成資料同步的時間。Follower伺服器在啟動過程中,會與Leader建立連線並完成對資料的同步,從而確定自己對外提供服務的起始狀態。通常情況下,運維人員不用太在意這個引數的配置,使用期預設值即可。但如果隨著Zookeeper叢集管理的資料量增大,Follower伺服器在啟動的時候,從Leader上進行同步資料的時間也會相應變長,於是無法在較短的時間完成資料同步。因此,在這種情況下,有必要適當調大這個引數。
syncLimit 該引數有預設值:5,即表示是引數tickTime值的5倍,必須配置,且需要配置一個正整數,不支援系統屬性當時配置。該引數用於配置Leader伺服器和Follower之間進行心跳檢測的最大延時事件。在Zookeeper叢集執行過程中,Leader伺服器會與所有的Follower進行心跳檢測來確定該伺服器是否存活。如果Leader伺服器在syncLimit時間內無法獲取到Follower的心跳檢測響應,那麼Leader就會認為該Follower已經脫離了和自己的同步。通常情況下,運維人員使用該引數的預設值即可,但如果部署Zookeeper叢集的網路環境質量較低(例如網路延時較大或丟包嚴重),那麼可以適當調大這個引數。
snapCount 該引數有預設值:100000,可以不配置,僅支援系統屬性方式配置:zookeeper.snapCount。引數snapCount用於配置相鄰兩次資料快照之間的事務操作次數,即Zookeeper會在snapCount次事務操作之後進行一次資料快照。
preAllocSize 該引數有預設值:65536,單位是KB,即64MB,可以不配置,僅支援系統屬性方式配置:zookeeper.preAllocSize。引數preAlloSize用於配置Zookeeper事務日誌檔案預分配的磁碟空間大小。通常情況下,我們使用Zookeeper的預設配置65536KB即可,但是如果我們將引數snapCount設定得比預設值更小或更大,那麼preAllocSize引數也要隨之做出變更。舉例來說:如果我們將snapCount的值設定為500,同時預估每次事務操作的資料量大小至多1KB,那麼引數preAllocSize設定為500就足夠了。
minSessionTimeout/maxSessionTimeout 這兩個引數有預設值,分別是引數tickTime值的2倍和20倍,即預設的會話超時時間在2tickTime~20tickTime範圍內,單位毫秒,可以不配置,不支援系統屬性方式配置。這兩個引數用於服務端對客戶端會話的超時時間進行限制,如果客戶端設定的超時事件不再該範圍內,那麼會被服務端強制設定為最大或最小超時時間
maxClientCnxns 該引數有預設值:60,可以不配置,不支援系統屬性方式配置。從Socket層面限制單個客戶端與單臺伺服器之間的併發連線數,即以IP地址粒度來進行連線數的限制。如果將該引數設定為0,則表示對連線數不做任何限制。需要注意該連線數限制選項的適用範圍,其僅僅是對單臺客戶端機器與單臺Zookeeper伺服器之間的連線數限制,並不能控制所有客戶端的連線數總和。另外,在3.4.0版本以前該引數的預設值都是10,從3.4.0版本開始變成了60,因此運維人員尤其需要注意這個變化,以防Zookeeper版本變化帶來伺服器連線數限制變化的隱患。
jute.maxbuffer 該引數有預設值:1048575,單位是位元組,可以不配置,僅支援系統屬性方式配置:jute.maxbuffer。該引數用於配置單個數據節點(ZNode)上可以儲存的最大資料量大小。通常情況下,運維人員不需要改動該引數,同時考慮到Zookeeper上不適宜儲存太多的資料,往往還需要將該引數設定得更小。需要注意的是,在變更該引數的時候,需要在Zookeeper叢集的所有機器以及所有的客戶端上均設定才能生效。
clientPortAddress 該引數沒有預設值:可以不配置,不支援系統屬性方式配置。針對那些多網絡卡的機器,該引數允許為每個IP地址制定不同的監聽埠。
server.id=host:port:port 該引數沒有預設值,在單機模式下可以不配置,不支援系統屬性方式配置。該引數用於配置組成Zookeeper叢集的及其列表,其中id即為ServerID,與每臺伺服器myid檔案中的數字相對應。同時,在該引數中,會配置兩個埠:第一個埠用於指定Follower伺服器與Leader進行執行時通訊和資料同步時所使用的埠,第二個埠則專門用於進行Leader選舉過程中的投票通訊。在Zookeeper伺服器啟動的時候,其會根據myid檔案中配置的ServerID來確定自己是哪臺伺服器,並使用對應配置的埠來進行啟動。如果在實際使用過程中,需要在同一臺伺服器上部署多個Zookeeper例項來構成偽叢集的話,那麼這些埠都需要配製成不同。例如 server.1=192.168.0.1:2777:3777server.1=192.168.0.1:2888:3888server.1=192.168.0.1:2999:3999
autopurge.snapRetainCount 該引數有預設值:3,可以不配置,不支援系統屬性方式配置。從3.4.0版本開始,Zookeeper提供了對歷史事務日誌和快照資料自動清理的支援。引數autopurge.snapRetainCount用於配置Zookeeper在自動清理的時候需要保留的快照資料檔案數量和對應的事務日誌萬能鍵。需要注意的是,並不是磁碟上的所有事務日誌和快照資料檔案都可以被清理掉–那樣的話將無法恢復資料。因此引數autopurge.snapRetainCount的最小值是3,如果配置的autopurge.snapRetainCount值小於3的話,那麼會被自動調整到3,即至少需要保留3個快照資料檔案和對應的事務日誌檔案
autopurge.purgeInteval 該引數有預設值:0,單位是小時,可以不配置,不支援系統屬性方式配置。引數autopurge.purgeInterval和引數autopurge.snapRetainCount配套使用,用於配置Zookeeper進行歷史檔案自動清理的頻率。如果配置該值為0或者負數,那麼就表明不需要開啟定時清理功能。Zookeeper預設不開啟這項功能。
fsync.warningthresholdms 該引數有預設值:1000,單位是毫秒,可以不配置,僅支援系統屬性方式配置:fsync.warningthresholdms。引數fsync.warningthresholdms用於配置Zookeeper進行事務日誌fsync操作時消耗時間的報警閾值。一旦進行一個fsync操作消耗的事件大於引數fsync.warningthresholdms指定的值,那麼就在日誌中打印出報警日誌。
forceSync 該引數有預設值:yes,可以不配置,可選配置項為yesno,僅支援系統屬性方式配置:zookeeper.forceSync。該引數用於配置Zookeeper伺服器是否在事務提交的時候,將日誌寫入操作強制刷入磁碟(即呼叫java.nio.channels.FileChannel.force介面),預設情況下是yes,即每次事務日誌寫入操作都會實時刷入磁碟。如果將其設定為no。則能一定程度的提高Zookeeper的寫效能,但同事也會存在類似於機器斷電這樣的安全風險。
globalOutstandingLimit 該引數有預設值:1000,可以不配置,僅支援系統屬性方式配置:zookeeper.globalOutstandingLimit。引數globalOutstandingLimit用於配置Zookeeper伺服器最大請求堆積數量。在Zookeeper伺服器執行的過程中,客戶端會源源不斷的將請求傳送到服務端,為了防止服務端資源(包括CPU,記憶體和網路等)耗盡,服務端必須限制同時處理的請求數,即最大請求堆積數量。
leaderServes 該引數有預設值:yes,可以不配置,可選配置項為yesno,僅支援系統屬性方式配置:zookeeper.leaderServes。該引數用於配置Leader伺服器是否能夠接受客戶端的連線,即是否允許Leader向客戶端提供服務,預設情況下,Leader伺服器能夠接受並處理客戶端的所有讀寫請求。在Zookeeper的架構設計中,Leader伺服器主要用來進行對事務更新請求的協調以及叢集本身的執行時協調,因此,可以設定讓Leader伺服器不接受客戶端的連線,以使其專注於進行分散式協調。
SkipAcl 該引數有預設值:no,可以不配置,可選配置項為yesno,僅支援系統屬性方式配置:zookeeper.skipACL。該引數用於配置Zookeeper伺服器是否跳過ACL許可權檢查,預設情況下是no,即會對每一個客戶端請求進行許可權檢查。如果將其設定為yes,則能一定程度的提高Zookeeper的讀寫效能,但同時也會向所有客戶端開放Zookeeper的資料,包括那些之前設定過ACL許可權的資料節點,也將不再接收許可權控制。
xncTimeout 該引數有預設值:5000,單位是毫秒,可以不配置,僅支援系統屬性方式配置:zookeeper.cnxTimeout。該引數用於配置在Leader選舉過程中,各伺服器之間進行TCP連線建立的超時時間。
electionAlg 在之前的版本中,可以使用該引數來配置選擇Zookeeper進行Leader選舉時所使用的演算法,但從3.4.0版本開始,Zookeeper廢棄了其他選舉演算法,只留下了FastLeaderElection演算法,因此該引數目前看來沒有用了。