Zookeeper08——Zookeeper服务器关键配置与说明(zoo.cfg)

本文详细介绍了Zookeeper服务器的配置,包括基础配置如客户端端口、dataDir和dataLogDir,存储配置如preAllocSize和snapCount,网络配置如globalOutstandingLimit和maxClientCnxns,以及集群配置如follower和leader的超时值、选举算法等,帮助理解Zookeeper的运行机制。
1.基础配置
  • clientPort
    • 客户端所连接的服务器所监听的TCP端口,默认情况下,服务端会监听在所有连接到这个端口的客户端,除非设置了clientPortAddress参数。客户端端口可以是任何值,默认为2181
  • dataDirdataLogDir
    • dataDir用于配置内存数据库保存的模糊快照的目录,如果某个服务器为集群中的一台,id文件也保存在该目录下。快照是以后台线程的方式来写入,不会锁定内存数据库。
    • dataLogDir存储事务日志。服务端会尝试进行顺序写入事务日志。
  • tickTime
    • tick的时长单位为毫秒,tick为zookeeper使用的基本时间度量单位。Zookeeper集群中使用的超时时间单位通过tickTime指定,即tickTime设置了超时时间的下限值,因为最小的超时时间为一个tick时间,客户端最小会话超时时事件为两个ticktime时间。
    • tickTime默认值为3000毫秒,更低的tickTime值可以更快的发现超时问题,也会导致更高的网络流量(心跳信息)和更高的CPU使用率(会话存储器的处理)。
2.存储配置
  • preAllocSzie
    • 用于设置预分配的事务日志文件的大小值,以kb为单位。
    • 当写入事务日志文件时,服务端每次会分配preAllocSize值的KB的存储大小,通过这种方式可以分摊文件系统将磁盘分配存储空间更新元数据的开销以及减少文件寻址操作的次数。
    • 默认值为64MB,该值需要进行缩小,因为事务日志永远不可能达到这么大,每次快照后会重新启动一个新的事务日志,如果每次快照之间额度事务日志数量很小,而且每个事务本身也很小,那64MB的默认值就显得太大了。
    • 默认值适用于:默认的snapCount和平均事务超过512字节的情况。
  • snapCount
    • 指定每次快照之间的事务数。默认值为100000(10万)。
    • 在snapCount已达到,但是前一个快照正在进行中,新的快照不会开始。
  • autopurge.snapRetainCount
    • 进行清理数据操作的时候,需要保留的快照数量和对应的事务日志文件的数量。默认值为3。
  • autopurge.purgeInterval
    • 对快照和日志进行垃圾回收操作时间间隔的小时数。如果设置为0,默认情况下,垃圾回收不会自动进行。
  • fsync.warningthresholdms
    • 触发警告的存储同步操作的阀值,以毫秒为单位。默认值为1000毫秒。
    • Zookeeper服务器在应答变化消息前会同步变化到存储中。如果同步系统调用消耗了太长时间,系统性能就会受到影响,在超过我们设定的阀值时,会产生一个警告信息。
  • weight.x=n
    • x:为集群中的myid值
    • n:表示该服务器在进行投票时的权重值。默认值为1。
  • traceFile
    • 持续跟踪Zookeeper的操作,并将操作记录到跟踪日志中,跟踪日志的文件名为traceFile.year.month.day。
3.网络配置
  • globalOutstandingLimit
    • Zookeeper中待处理请求的最大值。默认值为1000
    • Zookeeper客户端提交请求比Zookeeper服务器端处理请求快很多,服务端将会对接收到的请求队列化,最终(也许几秒内)可能会导致服务端的内存溢出。为防止这个问题,Zookeeper服务端中如果待处理的请求达到globalOutstandingLimit值就会限制客户端的请求。如果在当前客户端没有一个待处理请求,则该客户端还可以发起一次。
  • maxClientCnxns
    • 允许每个IP地址的并发socket连接的最大数量。Zookeeper通过流量控制和限制值来避免过载情况的发生。默认值为60。
    • 在集群中,如5个机器中,一个客户端可以达到的最大连接值为5*60=300。
  • clientPortAddress
    • 限制客户端连接到指定的接收信息的地址上。默认为所有。
  • minSessionTimeout
    • 最小会话超时时间,单位为毫秒。默认值为两个tickTime。
  • maxSessionTimeout
    • 会话的最大超时时间值,单位为毫秒,默认为20个tickTime。
4.集群配置
  • initLimit
    • 对追随者最初连接到群首时的超时值,单位为tick值的倍数。没有默认值。
  • syncLimit
    • 追随者与群首之间进行sync操作时的超时值,单位为ticket值的倍数。莫有默认值。
  • leaderServes
    • 配置值为‘yes’或‘no’标志,只是群首服务器是否为客户端提供服务。
  • server.x=[hostname]:n:n[:observer]
    • x:集中中服务器的myid。
    • hostname:集群服务器在网络中的名称(ip或域名)。
    • 第一个n:用于事务发送的端口
    • 第二个n:用于群首选举的端口
    • observer:填写则表示,该服务器为观察者。
  • cnxTime
    • 在群首选举打开一个新的连接的超时值。
  • electionAlg
    • 选举算法的配置项。
### ZooKeeper 3.4.10版本中zoo.cfg文件的配置方法及示例 在ZooKeeper 3.4.10版本中,`zoo.cfg`是核心配置文件,用于定义ZooKeeper服务的各项参数。以下是常见的配置项及其说明: #### 1. tickTime `tickTime` 是 ZooKeeper 的基本时间单位,以毫秒为单位。心跳机制和超时时间都基于此值计算。 ```properties tickTime=2000 ``` 此值通常设置为2000毫秒(即2秒)[^1]。 #### 2. initLimit `initLimit` 定义了集群中的 follower 节点 leader 节点进行初始连接时的最大尝试次数(以 tickTime 为单位)。如果 follower 在指定时间内未能完成同步,则会被视为连接失败。 ```properties initLimit=10 ``` 此值表示允许的最大初始化时间为 10 * tickTime = 20 秒[^1]。 #### 3. syncLimit `syncLimit` 定义了 follower 节点 leader 节点之间的最大同步时间限制(以 tickTime 为单位)。如果 follower 在此时间内未能完成数据同步,则会被移除。 ```properties syncLimit=5 ``` 此值表示允许的最大同步时间为 5 * tickTime = 10 秒[^1]。 #### 4. dataDir `dataDir` 指定了存储内存数据库快照的位置。同时,除非另有指定,WAL(Write-Ahead Log)日志也会存储在此目录中。 ```properties dataDir=/var/lib/zookeeper ``` 确保此路径存在且具有写权限[^1]。 #### 5. clientPort `clientPort` 是 ZooKeeper 监听客户端连接的端口号。 ```properties clientPort=2181 ``` 默认情况下,ZooKeeper 使用 2181 端口监听客户端请求[^1]。 #### 6. maxClientCnxns `maxClientCnxns` 定义了单个 IP 地址上允许的最大客户端连接数。 ```properties maxClientCnxns=60 ``` 此值可以防止某个客户端占用过多连接资源。 #### 7. autopurge.snapRetainCount 和 autopurge.purgeInterval 这两个参数用于自动清理旧的快照和事务日志: - `autopurge.snapRetainCount` 表示保留的最新快照和日志文件数量。 - `autopurge.purgeInterval` 表示自动清理的频率(以小时为单位)。 ```properties autopurge.snapRetainCount=3 autopurge.purgeInterval=24 ``` 上述配置表示每 24 小时清理一次,并保留最近的 3 个快照和日志文件。 #### 8. dataLogDir `dataLogDir` 指定了事务日志的存储位置。如果未指定,则事务日志将存储在 `dataDir` 中。 ```properties dataLogDir=/var/log/zookeeper ``` 建议将事务日志快照分开存储,以提高性能。 #### 9. 集群相关配置 对于分布式集群模式,需要在 `zoo.cfg` 中添加以下内容: ```properties server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888 ``` 其中: - `zoo1`、`zoo2`、`zoo3` 是服务器主机名或 IP 地址。 - `2888` 是 follower 节点 leader 节点通信的端口。 - `3888` 是选举端口,用于在 leader 选举期间通信[^1]。 #### 示例配置文件 以下是一个完整的 `zoo.cfg` 示例: ```properties tickTime=2000 initLimit=10 syncLimit=5 dataDir=/var/lib/zookeeper clientPort=2181 maxClientCnxns=60 autopurge.snapRetainCount=3 autopurge.purgeInterval=24 dataLogDir=/var/log/zookeeper # 集群配置 server.1=zoo1:2888:3888 server.2=zoo2:2888:3888 server.3=zoo3:2888:3888 ``` ### 常用命令 ZooKeeper 提供了一些常用命令来管理服务和客户端操作: - 启动服务端:`./zkServer.sh start` - 查看状态:`./zkServer.sh status` - 启动客户端:`./zkCli.sh` - 停止服务端:`./zkServer.sh stop`[^3]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值