zookeeper配置:三臺集羣。java
zookeeper二進制包安裝方法:
tar -xf zookeeper-3.4.6.tar.gz -C /usr/local
cd /usr/local
mv zookeeper-3.4.6 zookeepernode
三臺:
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
1apache
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
2vim
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服務端命令:session
以上命令快捷使用方式:
echo 'PATH=/usr/local/zookeeper/bin:$PATH' > /etc/profile.d/zookeeper.sh
source /etc/profile.d/zookeeper.sh
說明:其餘服務也可使用相似方案操做。app
zookeeper客戶端命令:jvm
幫助命令: help 分佈式
ZooKeeper 支持某些特定的四字命令字母與其的交互。它們大可能是查詢命令,用來獲取 ZooKeeper 服務的當前狀態及相關信息。用戶在客戶端能夠經過 telnet 或 nc 向 ZooKeeper 提交相應的命令
zookeeper服務優化
1.快照文件和事務日誌文件分別掛在不一樣磁盤。zoo.cfg文件中,dataDir是存放快照數據的,dataLogDir是存放事務日誌的。zookeeper更新操做過程:先寫事務日誌,再寫內存,週期性落到磁盤(刷新內存到快照文件)。事務日誌的對寫請求的性能影響很大,保證dataLogDir所在磁盤性能良好、沒有競爭者。
默認jvm沒有配置Xmx、Xms等信息,能夠在conf目錄下建立java.env文件(內存堆空間必定要小於機器內存,避免使用swap)
export JVMFLAGS="-Xms2048m -Xmx2048m $JVMFLAGS"
zkEnv.sh文件日誌輸出方式從CONSOLE改成ROLLINGFILE;
if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
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
#log4j.appender.ROLLINGFILE.MaxFileSize=10MB
zoo.cfg文件中skipACL=yes,忽略ACL驗證,能夠減小權限驗證的相關操做,提高一點性能。
zoo.cfg文件中forceSync=no,這個對寫請求的性能提高頗有幫助,是指每次寫請求的數據都要從pagecache中固化到磁盤上,纔算是寫成功返回。當寫請求數量到達必定程度的時候,後續寫請求會等待前面寫請求的forceSync操做,形成必定延時。若是追求低延時的寫請求,配置forceSync=no,數據寫到pagecache後就返回。可是機器斷電的時候,pagecache中的數據有可能丟失。
默認爲forceSync=yes,爲yes能夠設置fsync.warningthresholdms=50 若是數據固化到磁盤的操做fsync超過50ms的時候,將會在zookeeper.out中輸出一條warn日誌(forceSync=yes有效)。
globalOutstandingLimit=100000 客戶端鏈接過多,限制客戶端請求,避免OOM
zoo.cfg文件中preAllocSize=64M 日誌文件預分配大小; snapCount=100,000 多少次寫事務,生成一個快照若是快照生成頻繁可適當調大該參數。
通常zk的應用提倡讀大於寫,性能較好(10:1),存儲元數據用來協調分佈式數據最終一致。寫過於頻繁使用緩存更好