zookeeper在生產環境中的配置(zookeeper3.6)


一,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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM