一,zookeeper中日志的配置
1,快照文件snapshot的目錄:
dataDir=/data/zookeeper/data
存儲快照文件snapshot的目錄。默認情況下,事務日志也會存儲在這里
所以我們建議指定dataLogDir
2,事務日志的目錄
dataLogDir=/data/zookeeper/datalogs
事務日志輸出目錄,不建議和快照文件寫在一個目錄下
3,日志清理
ZooKeeper 默認不會自動清理 tx log,總有一天你會遇到磁盤空間耗盡。
可以開啟自動清理機制
autopurge.snapRetainCount=300 autopurge.purgeInterval=72
#autopurge.purgeInterval=1
自動清理事務日志和快照文件的功能
這個參數是清理頻率,單位是小時
默認值是0,表示不開啟自動清理功能
#autopurge.snapRetainCount=3
自動清理事務日志和快照文件:保留的文件數量,默認值是保留3個
4,日志的手動清理命令
如果zookeeper集群訪問量較高,清理會影響性能,可以手動清理
手動清理文件的例子:
#-n 3 表示保留3個文件
[root@zk1 bin]# /usr/local/soft/apache-zookeeper-3.6.0-bin/bin/zkCleanup.sh -n 3
也可以放到crond中按時間計划執行
說明:劉宏締的架構森林是一個專注架構的博客,地址:https://www.cnblogs.com/architectforest
對應的源碼可以訪問這里獲取: https://github.com/liuhongdi/
說明:作者:劉宏締 郵箱: 371125307@qq.com
二,zookeeper中客戶端相關配置
1,客戶端連接 Zookeeper 服務器的端口
clientPort=2181
端口端和zookeeper連接時,zookeeper使用的端口,防火牆要放開此端口供客戶端訪問
2,客戶端的並發連接數限制
maxClientCnxns=300
官方說明:
maxClientCnxns : (No Java system property) Limits the number of concurrent connections (at the socket level) that a single client,
identified by IP address, may make to a single member of the ZooKeeper ensemble. This is used to prevent certain classes of DoS attacks, including file descriptor exhaustion. The default is 60. Setting this to 0 entirely removes the limit on concurrent connections
對一個客戶端的連接數限制,默認值是60
將它設置為0表示取消對並發連接的限制
這個值過低會在日志中出現:too many connections from host - max is 60
可以視實際連接的情況進行調整
3,關閉啟動內置的管理器
admin.enableServer=false
避免啟動內置的管理器,也避免占用8080端口
三,zookeeper集群的配置
1,tickTime
tickTime=2000
Zookeeper 服務器之間或客戶端與服務器之間維持心跳的時間間隔,也就是每個 tickTime 時間就會發送一個心跳。
tickTime以毫秒為單位
默認值:2000
保持默認值即可,無需修改
2,initLimit:LF初始通信時限
initLimit=10
集群中的follower服務器(F)與leader服務器(L)之間 初始連接 時能容忍的最多心跳數(tickTime的數量)
表示允許 follower連接 並同步到 leader 的初始化連接時間,它以 tickTime 的倍數來表示。
當超過設置倍數的 tickTime 時間,則連接失敗
在設定的initLimit時間長度內,如果半數以上的跟隨者不能完成同步,領導者便會放棄領導地位,進行另一次的領導選舉。
如果zk集群環境數量很大則同步數據的時間會變長,這種情況下可以適當調大該參數。
默認為10
3,syncLimit:LF同步通信時限
syncLimit=5
集群中的follower服務器(F)與leader服務器(L)之間 請求和應答 之間能容忍的最多心跳數(tickTime的數量)
表示 leader 與 follower 之間發送消息,請求 和 應答 時間長度。
如果 follower 在設置的時間內不能與leader 進行通信,那么此 follower 將被集群丟棄
默認值是5
4,cluster成員列表
#cluster server.1=172.18.1.1:2888:3888 server.2=172.18.1.2:2888:3888 server.3=172.18.1.3:2888:3888
server.A = B:C:D
A:zookeeper服務器的序號,即第幾號服務器.
注意這個序號要與zookeeper的myid保持一致
B:服務器的 IP 地址
C:服務器跟隨者follower與集群中的 Leader 服務器交換信息的端口
D:如果集群中的 Leader 服務器宕機,需要一個端口通信重新進行選舉,選出一個新的 Leader。
這個端口就是用來做leader選舉的端口
四,為zookeeper的運行配置JVM參數
vi zkEnv.sh
修改:SERVER_JVMFLAGS一行為:
export SERVER_JVMFLAGS="-Xmx2048m -Xms2048m"
說明:這兩個參數的作用,
Xmx :程序運行期間最大可占用的內存大小,
如果程序運行需要占用更多的內存,超出了這個設置值,就會拋出 OutOfMemory異常
Xms : 程序啟動時占用內存大小
此值可以設置與-Xmx相同,
以避免每次垃圾回收完成后JVM重新分配內存
應設置為多少?
Xmx 默認是物理內存的1/4,
最大建議不超過物理內存的3/4
所以如果沒有其他應用同時運行的話,
可以設置為物理內存的1/2再觀察調整
五,用jmx監控集群:
1,在zookeeper的conf目錄下新建java.env
[root@zk1 conf]# vi java.env
內容:
JMXHOSTNAME="172.18.1.1" JMXPORT=8899
說明:JMXHOSTNAME的值是當前服務器的ip
2,修改zkServer.sh
在
echo "ZooKeeper remote JMX log4j set to $JMXLOG4J" >&2
下面的
ZOOMAIN="-Dcom.sun.management.jmxremote
jmxrmote后面添加:
-Djava.rmi.server.hostname=$JMXHOSTNAME
3,添加完成后,重啟服務:
[root@zk1 conf]# systemctl stop zookeeper
[root@zk1 conf]# systemctl start zookeeper
4,啟動jconsole,
在遠程進程處輸入:
172.18.1.1:8899
(說明:這里輸入的是遠程進程的ip地址和端口)
然后點連接
進入后:
mbean->org.apache.ZooKeeperService
可以看到下面的服務:
例子如圖:
六,查看zookeeper版本
[root@zk1 ~]# echo stat|nc 127.0.0.1 2181 Zookeeper version: 3.6.0--b4c89dc7f6083829e18fae6e446907ae0b1f22d7, built on 02/25/2020 14:38 GMT