1.將集羣中的leader設置不接受客戶端鏈接,讓它專一於集羣的通訊、選舉等操做算法
設置方式:服務器
在zoo.cfg中增長網絡
leaderServes=nosession
2.在大型的生產系統中,zookeeper機器會不少,由於選舉的過半原則,致使每一次選舉都須要大量的網絡通訊,若是併發高,請求多,那麼性能會下降不少,爲此zookeeper添加了觀察者observer,它不參與選舉,可是能夠接受客戶端的鏈接。併發
由於觀察者不參與選舉,所以觀察者掛了的話,並不會影響整個集羣的正常運行。性能
配置觀察者方式:大數據
重啓全部機器spa
登陸觀察者機器,執行./zkServer.sh status能夠看到mode:observer字樣,其餘是follower或者leader.net
附:zookeeper的配置說明日誌
參數名 |
說明 |
clientPort |
客戶端鏈接server的端口,即對外服務端口,通常設置爲2181吧。 |
dataDir |
存儲快照文件snapshot的目錄。默認狀況下,事務日誌也會存儲在這裏。 其中,x是生成快照時的Zxid。 |
dataLogDir |
事務日誌輸出目錄。 正常運行過程當中,針對全部事務操做,在返回客戶端「事務成功」的響應前,ZK會確保已經將本次事務操做的事務日誌寫到磁盤上,只有這樣,事務纔會生效。 |
tickTime |
ZK中的一個時間單元。ZK中全部時間都是以這個時間單元爲基礎,進行整數倍配置的。例如,session的最小超時時間是2*tickTime。 |
initLimit |
Follower在啓動過程當中,會從Leader同步全部最新數據,而後肯定本身可以對外服務的起始狀態。Leader容許F在 initLimit 時間內完成這個工做。一般狀況下,咱們不用太在乎這個參數的設置。若是ZK集羣的數據量確實很大了,F在啓動的時候,從Leader上同步數據的時間也會相應變長,所以在這種狀況下,有必要適當調大這個參數了。 |
syncLimit |
在運行過程當中,Leader負責與ZK集羣中全部機器進行通訊,例如經過一些心跳檢測機制,來檢測機器的存活狀態。若是L發出心跳包在syncLimit以後,尚未從F那裏收到響應,那麼就認爲這個F已經不在線了。 |
minSessionTimeout maxSessionTimeout |
Session超時時間限制,若是客戶端設置的超時時間不在這個範圍,那麼會被強制設置爲最大或最小時間。默認的Session超時時間是在2 * tickTime ~ 20 * tickTime 這個範圍 |
snapCount |
每進行snapCount次事務日誌輸出後,觸發一次快照(snapshot), 此時,ZK會生成一個snapshot.*文件,同時建立一個新的事務日誌文件log.*。默認是100000。這是一種狀況 此外,在產生新Leader時,也會生成新的快照文件,(同時會生成對應的事務文件) |
autopurge.purgeInterval |
3.4.0及以後版本,ZK提供了自動清理事務日誌和快照文件的功能,這個參數指定了清理頻率,單位是小時,須要配置一個1或更大的整數,默認是0,表示不開啓自動清理功能。 |
server.x=[hostname]:nnnnn[:nnnnn] |
這裏的x是一個數字,與myid文件中的id是一致的。右邊能夠配置兩個端口,第一個端口用於F和L之間的數據同步和其它通訊,第二個端口用於Leader選舉過程當中投票通訊。
|
jute.maxbuffer |
每一個節點最大數據量,是默認是1M。 |
globalOutstandingLimit |
最大請求堆積數。默認是1000。ZK運行的時候, 儘管server已經沒有空閒來處理更多的客戶端請求了,可是仍是容許客戶端將請求提交到服務器上來,以提升吞吐性能。固然,爲了防止Server內存溢出,這個請求堆積數仍是須要限制下的。
|
preAllocSize |
預先開闢磁盤空間,用於後續寫入事務日誌。默認是64M,每一個事務日誌大小就是64M。 |
electionAlg |
默認爲3,即 fast paxos election 選舉算法。在3.4版本後,1 2對應的選舉算已棄用,因此此項配置不要更改。 |
leaderServes |
默認狀況下,Leader是會接受客戶端鏈接,並提供正常的讀寫服務。可是,若是你想讓Leader專一於集羣中機器的協調,那麼能夠將這個參數設置爲no,這樣一來,會提升整個zk集羣性能。 |