1. 程式人生 > >zookeeper集群搭建及優化

zookeeper集群搭建及優化

eal snapshot 環境 方式 ocs 是否 threshold 生成文件 忽略

zookeeper配置:三臺集群。

zookeeper二進制包安裝方法:
tar -xf zookeeper-3.4.6.tar.gz -C /usr/local
cd /usr/local
mv zookeeper-3.4.6 zookeeper

三臺:
153:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/zookeeper
clientPort=2181
server.1=192.168.1.153:2888:3888
server.2=192.168.1.154:2888:3888
server.3=192.168.1.155:2888:3888
forceSync=yes

fsync.warningthresholdms=50
globalOutstandingLimit=100000
preAllocSize=64M
snapCount=100000
skipACL=yes
myid:這個需要手動創建
mkdir -p /var/zookeeper
cd /var/zookeeper
echo 1 myid
cat myid
1

154:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/zookeeper
clientPort=2181
server.1=192.168.1.153:2888:3888
server.2=192.168.1.154:2888:3888
server.3=192.168.1.155:2888:3888

forceSync=yes
fsync.warningthresholdms=50
globalOutstandingLimit=100000
preAllocSize=64M
snapCount=100000
skipACL=yes
myid:這個需要手動創建
mkdir -p /var/zookeeper
cd /var/zookeeper
echo 2 myid
cat myid
2

155:
tickTime=2000
initLimit=10
syncLimit=5
dataDir=/var/zookeeper
clientPort=2181
server.1=192.168.1.153:2888:3888
server.2=192.168.1.154:2888:3888

server.3=192.168.1.155:2888:3888
forceSync=yes
fsync.warningthresholdms=50
globalOutstandingLimit=100000
preAllocSize=64M
snapCount=100000
skipACL=yes
myid:這個需要手動創建
mkdir -p /var/zookeeper 創建數據目錄
cd /var/zookeeper
echo 3 myid
cat myid
3

設置zookeeper的java虛擬機使用內存:
vim /usr/local/zookeeper/conf/java.env
export JVMFLAGS="-Xms2048m -Xmx2048m $JVMFLAGS" 此處的內存根據實際的內存做調整。

zookeeper服務端命令:

  1. 啟動ZK服務: zkServer.sh start
  2. 查看ZK服務狀態: zkServer.sh status
  3. 停止ZK服務: zkServer.sh stop
  4. 重啟ZK服務: zkServer.sh restart

以上命令快捷使用方式:
echo ‘PATH=/usr/local/zookeeper/bin:$PATH‘ > /etc/profile.d/zookeeper.sh
source /etc/profile.d/zookeeper.sh
說明:其他服務也可以使用類似方案操作。

zookeeper客戶端命令:

  1. 顯示根目錄下、文件: ls / 使用 ls 命令來查看當前 ZooKeeper 中所包含的內容
  2. 顯示根目錄下、文件: ls2 / 查看當前節點數據並能看到更新次數等數據
  3. 創建文件,並設置初始內容: create /zk "test" 創建一個新的 znode節點“ zk ”以及與它關聯的字符串
  4. 獲取文件內容: get /zk 確認 znode 是否包含我們所創建的字符串
  5. 修改文件內容: set /zk "zkbak" 對 zk 所關聯的字符串進行設置
  6. 刪除文件: delete /zk 將剛才創建的 znode 刪除
  7. 退出客戶端: quit
  8. 幫助命令: help

    ZooKeeper 支持某些特定的四字命令字母與其的交互。它們大多是查詢命令,用來獲取 ZooKeeper 服務的當前狀態及相關信息。用戶在客戶端可以通過 telnet 或 nc 向 ZooKeeper 提交相應的命令

  9. 可以通過命令:echo stat|nc 127.0.0.1 2181 來查看哪個節點被選擇作為follower或者leader
  10. 使用echo ruok|nc 127.0.0.1 2181 測試是否啟動了該Server,若回復imok表示已經啟動。
  11. echo dump| nc 127.0.0.1 2181 ,列出未經處理的會話和臨時節點。
  12. echo kill | nc 127.0.0.1 2181 ,關掉server
  13. echo conf | nc 127.0.0.1 2181 ,輸出相關服務配置的詳細信息。
  14. echo cons | nc 127.0.0.1 2181 ,列出所有連接到服務器的客戶端的完全的連接 / 會話的詳細信息。
  15. echo envi |nc 127.0.0.1 2181 ,輸出關於服務環境的詳細信息(區別於 conf 命令)。
  16. echo reqs | nc 127.0.0.1 2181 ,列出未經處理的請求。
  17. echo wchs | nc 127.0.0.1 2181 ,列出服務器 watch 的詳細信息。
  18. echo wchc | nc 127.0.0.1 2181 ,通過 session 列出服務器 watch 的詳細信息,它的輸出是一個與 watch 相關的會話的列表。
  19. echo wchp | nc 127.0.0.1 2181 ,通過路徑列出服務器 watch 的詳細信息。它輸出一個與 session 相

zookeeper服務優化

1.快照文件和事務日誌文件分別掛在不同磁盤。zoo.cfg文件中,dataDir是存放快照數據的,dataLogDir是存放事務日誌的。zookeeper更新操作過程:先寫事務日誌,再寫內存,周期性落到磁盤(刷新內存到快照文件)。事務日誌的對寫請求的性能影響很大,保證dataLogDir所在磁盤性能良好、沒有競爭者。

  1. 默認jvm沒有配置Xmx、Xms等信息,可以在conf目錄下創建java.env文件(內存堆空間一定要小於機器內存,避免使用swap)
    export JVMFLAGS="-Xms2048m -Xmx2048m $JVMFLAGS"

  2. 按天出zookeeper日誌,避免zookeeper.out文件過大。

zkEnv.sh文件日誌輸出方式從CONSOLE改為ROLLINGFILE;

if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then

ZOO_LOG4J_PROP="INFO,CONSOLE"

ZOO_LOG4J_PROP="INFO,ROLLINGFILE"

fi

conf/log4j.properties設置為按天生成文件DailyRollingFileAppender

#zookeeper.root.logger=INFO, CONSOLE
zookeeper.root.logger=INFO, ROLLINGFIL

log4j.appender.ROLLINGFILE=org.apache.log4j.DailyRollingFileAppender
log4j.appender.ROLLINGFILE.Threshold=${zookeeper.log.threshold}
log4j.appender.ROLLINGFILE.File=${zookeeper.log.dir}/${zookeeper.log.file}
log4j.appender.ROLLINGFILE.DatePattern=‘.‘yyyy-MM-dd

Max log file size of 10MB

#log4j.appender.ROLLINGFILE.MaxFileSize=10MB

  1. zoo.cfg文件中skipACL=yes,忽略ACL驗證,可以減少權限驗證的相關操作,提升一點性能。

  2. zoo.cfg文件中forceSync=no,這個對寫請求的性能提升很有幫助,是指每次寫請求的數據都要從pagecache中固化到磁盤上,才算是寫成功返回。當寫請求數量到達一定程度的時候,後續寫請求會等待前面寫請求的forceSync操作,造成一定延時。如果追求低延時的寫請求,配置forceSync=no,數據寫到pagecache後就返回。但是機器斷電的時候,pagecache中的數據有可能丟失。
    默認為forceSync=yes,為yes可以設置fsync.warningthresholdms=50 如果數據固化到磁盤的操作fsync超過50ms的時候,將會在zookeeper.out中輸出一條warn日誌(forceSync=yes有效)。

  3. globalOutstandingLimit=100000 客戶端連接過多,限制客戶端請求,避免OOM

  4. zoo.cfg文件中preAllocSize=64M 日誌文件預分配大小; snapCount=100,000 多少次寫事務,生成一個快照如果快照生成頻繁可適當調大該參數。
    一般zk的應用提倡讀大於寫,性能較好(10:1),存儲元數據用來協調分布式數據最終一致。寫過於頻繁使用緩存更好

  5. 日誌文件自動清除(如果追求性能,可手動清除)
    autopurge.snapRetainCount=3 # The number of snapshots to retain in dataDir
    autopurge.purgeInterval=24 # Purge task interval in hours Set to "0" to disable auto purge feature

zookeeper集群搭建及優化