ZooKeeper系列(4):ZooKeeper的配置文件详解
ZooKeeper系列文章:https://www.cnblogs.com/f-ck-need-u/p/7576137.html#zk
zkServer.sh读取的默认配置文件是$ZOOKEEPER_HOME/conf/zoo.cfg。如果要用其它配置文件。如下传递配置文件参数:
zkServer.sh start your_config
zkServer.sh stop your_config
zkServer.sh status your_config
配置文件的官方说明:http://zookeeper.apache.org/doc/r3.4.12/zookeeperAdmin.html#sc_configuration
以下是ZooKeeper的配置文件中各配置项的解释,分两部分:一部分是ZooKeeper正常运行所必须的配置项(只有3项),一部分是非必须项。
1.必须配置项
下面3项是ZooKeeper正常运行所必须配置的。
clientPort:
向外提供服务的端口号。换句话说,是给客户端连接的端口。dataDir:
ZooKeeper的数据目录,主要目的是存储内存数据库序列化后的快照路径。如果没有配置事务日志(即dataLogDir配置项)的路径,那么ZooKeeper的事务日志也存放在数据目录中。tickTime:
tick的中文意思是"嘀的一声",tickTime指的是滴答一声的时间长度。在ZooKeeper中,它是所有涉及到时间长度的单元,单位为毫秒,就相当于时钟里的秒单元一样。例如,tickTime=2000;initLimit=5,表示initLimit的时间为"嘀嗒"5次,长度为2000*5=10秒。tickTime隐含了心跳时间(即心跳时间为tickTime),还隐含了客户端和服务器之间保持的会话的最小和最大超时时间(最小2倍tickTime,最大20倍tickTime)。
2.其它配置项
2.1 一般选项
dataLogDir:
指定事务日志的存放目录。事务日志对ZooKeeper的影响非常大,强烈建议事务日志目录和数据目录分开,不要将事务日志记录在数据目录(主要用来存放内存数据库快照)下。globalOutstandingLimit:
接收客户端的最大请求队列。默认是1000。为了提高ZooKeeper的吞吐量,即使ZooKeeper已经没有空闲资源来处理新的客户端请求,也还是会接收进来。这个配置项是为了限流,避免内存溢出。preAllocSize:
为事务日志预先开辟磁盘空间。默认是64M,意味着每个事务日志大小就是64M(可以去事务日志目录中看一下,每个事务日志只要被创建出来,就是64M)。如果ZooKeeper产生快照频率较大,可以考虑减小这个参数,因为每次快照后都会切换到新的事务日志,但前面的64M根本就没写完。(见snapCount配置项)snapCount:
ZooKeeper使用事务日志和快照来持久化每个事务(注意是日志先写)。该配置项指定ZooKeeper在将内存数据库序列化为快照之前,需要先写多少次事务日志。也就是说,每写几次事务日志,就快照一次。默认值为100000。为了防止所有的ZooKeeper服务器节点同时生成快照(一般情况下,所有实例的配置文件是完全相同的),当某节点的先写事务数量在(snapCount/2+1,snapCount)范围内时(挑选一个随机值),这个值就是该节点拍快照的时机。maxClientCnxns:
在套接字级别上限制同一客户端的并发连接数。因为同一客户端IP地址相同,可能会调度到同一个ZooKeeper服务器节点上。这个配置项是为了避免DoS攻击。默认值为60,设置为0表示不做任何限制。clientPortAddress:
指定为客户端提供服务的监听地址(ipv4/ipv6)。换句话说,clientPort将只绑定在地址上。如果不设置该选项,将默认监听在所有地址上(0.0.0.0)。minSessionTimeout:maxSessionTimeout:
客户端和服务端会话保持的最小、最大超时时间。ZooKeeper的很多数据和状态都和会话绑定。假如客户端和服务端成功建立连接(会话)后,正常情况下,客户端会时不时地向服务端发送心跳,如果这个服务端或者客户端挂了,它们之间的会话要保持多长时间。fsync.warningthresholdms:
事务日志输出时,如果调用fsync方法超过此处指定的超时时间,那么会在日志中输出警告信息。默认是1000ms。autopurge.snapRetainCount:
该配置项指定开启了ZooKeeper的自动清理功能后(见下一个配置项),每次自动清理时要保留的版本数量。默认值为3,最小值也为3。它表示在自动清理时,会保留最近3个快照以及这3个快照对应的事务日志。其它的所有快照和日志都清理。autopurge.purgeInterval:
指定触发自动清理功能的时间间隔,单位为小时,值为大于或等于1的整数,默认值为0,表示不开启自动清理功能。syncEnabled:
指定观察者(observers)是否像follower一样,也记录事务日志和快照,以便在observers重启时能加速恢复。默认值为true,设置为false表示禁用该功能,不记录日志和快照。
2.2 集群选项
在配置ZooKeeper集群时可能用到的配置项。
electionAlg:
指定leader选举算法。默认值为3,表示使用基于TCP的快速选举。在以前的版本中,还有0/1/2三种算法,它们都是基于UDP的,已经废弃了,以后的版本中会移除这三种算法。initLimit:
followers启动时需要连接leader,并从Leader处获取它所缺失的那部分数据,以便它能和leader的数据保持同步。只有保持了同步,该follower才被标记为ONLINE,然后才能提供服务。这个配置项限定从follower启动到恢复完成的超时时间。一般情况下,ZooKeeper保存的都是协调数据,数据量不会很大,但如果要同步的数据很大,可以考虑增大这个选项的值。注意,这个值依赖于tickTime时间单元,例如tickTime=2000,initLimit=2表示4秒。syncLimit:
follower和leader之间数据延迟的最大时间长度。例如,有个节点的更新操作缓慢,它的数据已经严重落后于leader,ZooKeeper就会将它从ZooKeeper集群中踢出去。ZooKeeper使用时间来度量follower和leader之间数据的延迟,这个选项的值依赖于tickTime,例如tickTime=2000,syncLimit=2表示follower比leader延迟了4秒。leaderServes:
默认值为yes,表示leader也接受客户端的连接,接受来自客户端的读、写请求。leader的主要作用是协调ZooKeeper集群服务器节点间的写操作,如果想要获取更高的写吞吐量,可以将其设置为no,这样leader将不允许客户端的连接,它将专注于协调,但这会损失一点读吞吐量。server.x=[hostname]:port_A:port_B:
指定ZooKeeper集群中的服务器节点。有几个server节点,就给几个这个配置项,所有节点上的这部分配置要一致。- X:整数。是ZooKeeper中服务器的一个简单标识。这个数值需要和dataDir下的myid文件内容一致。在启动ZooKeeper集群中的每个实例时,需要读取dataDir中的myid文件,并将该文件中的数值和配置文件中的server.X做匹配,匹配到哪个就表示是哪个ZooKeeper服务器节点。
- hostname:ZooKeeper服务器节点的地址。
- port_A:这是第一个端口,用于Follower和Leader之间的数据同步和其它通信。
- port_B:这是第二个端口,用于Leader选举过程中投票通信。
如果要配置的ZooKeeper的伪集群(多个ZooKeeper实例运行在同一机器上),每个server.X中的X、port_A和port_B必须不能相同。
例如,3个服务器节点的伪集群ZooKeeper,数据目录分别为/zk/data1,/zk/data2,/zk/data3。可以这样配置。
server.1=localhost:2881:3881
server.2=localhost:2882:3882
server.3=localhost:2883:3883
然后在data1/myid、data2/myid、data3/myid中分别写入1、2、3(需要和X值对应)。
group.x=A[:B]:weight.y=N:
这两个一起用,用于启用分层仲裁功能。group命令用于将ZooKeeper集群中的服务器节点进行分组。如果没有使用group选项,则ZooKeeper默认将所有服务器节点归入一个默认组中。weight命令用于为每个服务器节点指定权重值,权重越高,投票时能投的票数越多。如果不配置weight命令,则所有节点的默认权重值为1。- x:分组id。整数值。
- A:B:C...:用冒号分隔的服务器节点列表,表示这几个节点属于同一个组。整数值,取自server.X中的X。例如,上面server.x中的示例,
group.1=1:2:3表示将这3个节点放进一个id=1的组中。 - y:取自server.X中的X。
- N:为该服务器节点指定的权重值。
例如,9个节点的ZooKeeper集群,分成3组:
server.1=aaaa
server.2=aaaa
server.3=aaaa
server.4=aaaa
server.5=aaaa
server.6=aaaa
server.7=aaaa
server.8=aaaa
server.9=aaaa
group.1=1:2:3
group.2=4:5:6
group.3=7:8:9
weight.1=1
weight.2=1
weight.3=1
weight.4=1
weight.5=1
weight.6=1
weight.7=1
weight.8=1
weight.9=1
当需要仲裁时,首先过滤掉权重值为0的组(即组中所有节点权重都为0),然后判断,如果组中有大多数节点投票的组达到了大多数组的要求,仲裁就通过。换个理解方式,就是先在组内投票,然后组自身投票。组内投票数达到了该组的大多数,这个组就有一票。如果投票的组数量达到了总组数的大多数(不考虑权重为0的组),则整个仲裁就通过。
cnxTimeout:
在投票选举新的leader时,需要通过选举端口建立连接来发送通知信息。该配置项设置打开这个连接的超时时长。默认值为5。ipReachableTimeout:
3.4.11版本中才引入的配置项。当解析主机名时,为可访问的IP地址设置此超时值,单位毫秒。默认情况下,ZooKeeper将使用主机名的第一个IP地址(不做任何reachable检查)。设置ipReachableTimeout(大于0)后,ZooKeeper将尝试获取第一个可访问的IP地址。这是通过调用Java API函数InetAddress.isreavailable(long timeout)实现的。其中使用了这个超时值。如果找不到这样的IP地址,主机名的第一个IP地址将被使用。
2.3 其它配置项
还有一些配置项,用到的可能性很小,所以不解释了。如有需要,参考官方手册:http://zookeeper.apache.org/doc/r3.4.12/zookeeperAdmin.html#sc_configuration。
ZooKeeper系列(4):ZooKeeper的配置文件详解的更多相关文章
- Spring Boot2 系列教程 (五) | yaml 配置文件详解
自定义属性加载 首先构建 SpringBoot 项目,不会的看这篇旧文 使用 IDEA 构建 Spring Boot 工程. 首先在项目根目录 src >> resource >&g ...
- Zookeeper系列二:分布式架构详解、分布式技术详解、分布式事务
一.分布式架构详解 1.分布式发展历程 1.1 单点集中式 特点:App.DB.FileServer都部署在一台机器上.并且访问请求量较少 1.2 应用服务和数据服务拆分 特点:App.DB.Fi ...
- Spring Boot系列教程四:配置文件详解properties
一.配置随机数,使用随机数 在application.properties文件添加配置信息 #32位随机数 woniu.secret=${random.value} #随机整数 woniu.numbe ...
- MyBatis系列:二、配置文件详解
本文会详细介绍MyBatis的常用配置 1.properties节点 <properties resource="mybatis-config.properties"> ...
- springboot系列(三)配置文件详解
目录 properties 文件 1.语法 2.优先级 3.自定义数据配置 4.获取自定义数据配置 1.通过prefix获取 yml文件 1.语法 2.优先级 3.自定义数据配置. 4.获取自定义数据 ...
- SpringBoot系列(十二)过滤器配置详解
SpringBoot(十二)过滤器详解 往期精彩推荐 SpringBoot系列(一)idea新建Springboot项目 SpringBoot系列(二)入门知识 springBoot系列(三)配置文件 ...
- nginx高性能WEB服务器系列之四配置文件详解
nginx系列友情链接:nginx高性能WEB服务器系列之一简介及安装https://www.cnblogs.com/maxtgood/p/9597596.htmlnginx高性能WEB服务器系列之二 ...
- Hexo系列(二) 配置文件详解
Hexo 是一款优秀的博客框架,在使用 Hexo 搭建一个属于自己的博客网站后,我们还需要对其进行配置,使得 Hexo 更能满足自己的需求 这里所说的配置文件,是位于站点根目录下的 _config.y ...
- 【Hibernate】Hibernate系列3之配置文件详解
配置文件详解 3.1.配置文件 连接池性能优化:http://www.cnblogs.com/xdp-gacl/p/4002804.html
- SaltStack系列(一)之环境部署、命令及配置文件详解
一.SaltStack介绍 1.1 saltstack简介: saltstack是基于python开发的一套C/S架构配置管理工具,它的底层使用ZeroMQ消息队列pub/sub方式通信,使用SSL证 ...
随机推荐
- [swarthmore cs75] inlab1 — Tiny Compiler
课程回顾 Swarthmore学院16年开的编译系统课,总共10次大作业.本随笔记录了inlab1的实践过程. tiny compiler 这个迷你的编译器可以将一个源文件,编译成可执行的二进制代码. ...
- webpack多页面配置
const path = require('path'); const CleanWebpackPlugin = require('clean-webpack-plugin'); const Html ...
- python之路(七)-递归算法
递归 特点 递归算法是一种直接或者间接地调用自身算法的过程.在计算机编写程序中,递归算法对解决一大类问题是十分有效的,它往往使算法的描述简洁而且易于理解. 递归算法解决问题的特点: (1) 递归就是在 ...
- eslint 的 env 配置是干嘛使的?
这笔修改体现了 env 和 global 的关系: https://github.com/g8up/youDaoDict/commit/8b05616f 官方文档表述: https://eslint. ...
- STM32-跑马灯实验
实验环境: STM32开发板 Keil uVision4 FlyMcu.exe 一. 建立文件夹 1.建立跟文件夹"BASE"(名称任意),再在其下建立四个子文件夹 2. 在&qu ...
- Django积木块五——分页
分页 django本身带有分页功能,为什么要用他呢?因为它的代码更为简洁,并且在做筛选的时候会把url中的所有参数都组装起来,并且加上分页.也就是做筛选中的结果也可以用这个分页. pip instal ...
- post推送消息时的乱码
URL realUrl = new URL(url); // 打开和URL之间的连接 URLConnection conn = realUrl.openConnection(); // 设置通用的请求 ...
- python 上传文件
上周产品给我提了个需求,大体是做一个后台系统,管理游戏比赛落地页的数据更新,难点在于需要给CDN上传文件.现在把经验记录下来,下次有类似的需求能提高开发效率. 我使用的是网宿CDN,没有用网宿的SDK ...
- ASP.NET Core 微服务初探[2]:熔断降级之Polly
当我们从单体架构迁移到微服务模式时,其中一个比较大的变化就是模块(业务,服务等)间的调用方式.在以前,一个业务流程的执行在一个进程中就完成了,但是在微服务模式下可能会分散到2到10个,甚至更多的机器( ...
- 背水一战 Windows 10 (101) - 应用间通信: 通过协议打开指定的 app 并传递数据以及获取返回数据, 将本 app 沙盒内的文件共享给其他 app 使用
[源码下载] 背水一战 Windows 10 (101) - 应用间通信: 通过协议打开指定的 app 并传递数据以及获取返回数据, 将本 app 沙盒内的文件共享给其他 app 使用 作者:weba ...