当前位置: 首页 > 编程日记 > 正文

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=aaaagroup.1=1:2:3
    group.2=4:5:6
    group.3=7:8:9weight.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。

相关文章:

明星企业内推+BAT面经,长三角的开发者联合起来!

“为什么公司宁愿花20K招新人,也不愿给老员工加到20K?”这个热门的微博话题戳起了很多人的痛处,但根据 CSDN &《程序员》杂志发布的「中国软件开发者薪资调查报告」,有32.98%的开发者在过去曾换过工作,其中有72.5%…

《一江春水向东流》之随笔

这篇文章,更像是为后任正非时代的华为,进行的定调。开篇任总提到小时候的教育和意识养成的个人英雄主义,这种性格让自己四十岁之前遭遇坎坷。四十不惑之后,领悟了团结就是力量的政治内涵,开始妥协、包容。全篇浓墨重彩…

程序员拯救乐坛?OpenAI用“逆天”GPT2.0搞了个AI音乐生成器

作者 | 琥珀出品 | AI科技大本营(id:rgznai100)基于深度神经网络进行语音合成、音乐风格迁移,正成为不少致力于“让人人成为音乐家”的研究人员所追求的事情。像此前我们报道的微软小冰作词又作曲,AI帮清华博士写说唱歌…

centos7 JDK1.8

安装之前先检查一下系统有没有自带open-jdk rpm -qa |grep java rpm -qa |grep jdk 卸载找出的已安装Java相关rpm文件:rpm -e --nodeps 重新输入rpm -qa |grep java ,卸载完成 下载jdk1.8 for linux的安装包 jdk-8u11-linux-x64.tar.gz,下载…

【FFmpeg】详解FFmpeg解封装、解码流程

目录 1、获取媒体信息头2、获取媒体流信息3、准备解码器3.1 获取视频、音频、字幕流在解封装上下文 AVFormatContext 的流列表 AVStream **streams 中的索引3.2 使用已经获取的流信息创建对应的解码器及其上下文,以视频解码器为例3.3 初始化解码器上下文4、准备用于保存解码前…

Win2008远程多用户登陆的配置方法

核心提示:在使用Windows 2008远程登录功能时,如果需要进行多用户登录,可以采用以下配置方法 在使用Windows 2008远程登录功能时,如果需要进行多用户登录,可以采用以下配置方法: 首先要启用远程桌面这一功能…

策略梯度搜索:不使用搜索树的在线规划和专家迭代 | 技术头条

作者 | Thomas Anthony、Robert Nishihara、Philipp Moritz、Tim Salimans、John Schulman译者 | 李倩编辑 | Rachel、Jane出品 | AI科技大本营(ID:rgznai100)蒙特卡罗树搜索(MCTS)算法执行基于模拟的搜索以改进在线策…

【FFmpeg】解码时refcounted_frames标志的使用

1、refcounted_frames说明 在接口 avcodec_decode_video2 的注释中,有关于 refcounted_frames 的详细说明: (1)当 AVCodecContext.refcounted_frames 被设置为1,该 AVFrame 被引用计数,返回的引用属于调用者。当不再需要 AVFrame 时,调用者必须使用 av_frame_unref() 来…

python-selenum3 第五天定位——不常用定位与css定位详

使用tag来定位tag定位的是标签,不常用例如:百度的输入框标签是input最终会报错,因为百度首页input标签太多了 driver webdriver.Firefox(executable_path"d:\\geckodriver") driver.get("https://www.baidu.com")driver…

nagios监控三部曲之——为什么nagios不能发送报警邮件(2)

最近我写了关于naigos监控的安装与配置的技术文档,公司运维按照我的文档部署naigos,发现不能发送报警邮件,经过我的检查,发现问题如下: 1、hosts里的配置 [rootnagios ~]# cat /etc/hosts # Do not remove the follow…

小样,加张图你就不认识我了?“补丁”模型骗你没商量!| 技术头条

作者 | Simen Thys, Wiebe Van Ranst(共同一作)译者 | 刘畅编辑 | Rachel、Jane出品 | AI科技大本营(id:agznai100)【导语】本文介绍了一个可以生成欺骗性补丁的系统模型,通过将该补丁放置在固定位置,人们能够使自己在…

【经验】如何查看gcc、g++不加-std时的默认版本

一、测试gcc 1、测试代码:c.c #include <stdio.h>int main(void) { #ifdef __STDC_VERSION__printf("__STDC_VERSION__ %ld \n", __STDC_VERSION__); #endif #ifdef __STRICT_ANSI__printf("__STRICT_ANSI__ %d \n", __STRICT_ANSI__); #endifre…

发布开源框架到CocoaPods入坑指南

个人原文博客地址: 发布开源框架到CocoaPods入坑指南在开发过程中一定会用到一些第三方框架, 只要安装了CocoaPods, 然后通过pod install命令, 就可以集成框架到项目中了可是如果想要把自己的框架或者组件也开源出去, 让别人也可以使用, 那该如何入手 ?对于CocoaPods还不是很了…

linux下打印机共享及监控

操作系统:centos6.0 主要软件&#xff1a;cups&#xff0c;samba&#xff0c;ghostpostscript 打印机&#xff1a;richo 3025 主要功能&#xff1a;通过samba将打印机共享给局域网用户&#xff0c;并实现对打印内容的监控 主要有三大步&#xff1a;本机安装打印机&#xff0c;通…

【H.264】x264命令详解:x264 --fullhelp

1、简述 宏区块: macroblock:。是一种图像压缩的术语。 宏区块是运动预测的基本单位,一张完整的图像(frame)通常会被切割成几个宏区块。h.264 的宏区块大小是可变的,常用 16x16 pixels。 帧类型 “帧”基础知识: 影片可以看作是由一张张连续的图片组成的,每幅图片就…

东大漆桂林、清华李涓子、复旦肖仰华等大牛确认出席CTA峰会!5月一起打卡杭州...

5月26日-27日&#xff0c;由中国IT社区CSDN与数字经济人才发展中心联合主办的第一届CTA核心技术及应用峰会将在杭州国际博览中心召开。首届CTA核心技术及应用峰会将聚焦人工智能&#xff0c;邀请技术领航者&#xff0c;与开发者共同探讨机器学习和知识图谱的前沿研究及应用。20…

【Oracle Database】数据库用户管理

创建用户 SQL> create user soe identified by soe default tablespace soe temporary tablespace temp; User created.查询用户的默认表空间 SQL> set line 200 SQL> col username for a30 SQL> col account_status for a20 SQL> select username,account_stat…

MySQL两主多从,且故障转移配置

一、角色划分1、MySQL数据库规划主机名 IP地址 角色 mysql_server_idweiliaodb1 192.168.1.233 master1 1weiliaodb2 192.168.1.234 master2 2weiliaodb3 192.168.1.235 slave1 3monitor 192.168.1.240 mmm_mon -2、虚拟IP规划IP地址 角色192.168.1.10 writer192.168.1.20 read…

Go开发者路线图2019,请收下这份指南

整理 | Rachel责编 | 阿司匹林出品 | AI科技大本营&#xff08;ID: rgznai100&#xff09;Go是Google开发的一种静态、强类型、编译型、并发型&#xff0c;并具有垃圾回收功能的类C编程语言。2009以开源项目的形式发布&#xff0c;2012年发布1.0稳定版本&#xff0c;距今已经十…

【Ubuntu】在Ubuntu中设置永久的DNS

1、问题描述 ping不通域名&#xff0c;比如“ping www.baidu.com”时&#xff0c;报错“ping: unknown host www.baidu.com”。这是因为ubuntu默认情况下没有设置DNS。 在ubuntu上设置DNS的方法&#xff0c;修改“/etc/resolv.conf”&#xff0c;添加“nameserver 8.8.8.8”&a…

实习期间问题总结

主要针对实习期间&#xff0c;接触的部分问题进行总结&#xff0c;后续会不间断的补充&#xff0c;作为实习期间的回顾。 1&#xff0c;git ,github和gitlab的关系 git 是一个版本控制工具&#xff0c;github是一个用git做版本控制的项目托管平台&#xff0c;他是一个网站&…

在windows sever 2008系统中如何添加桌面体验功能

1.开启THEMES服务&#xff1a;运行&#xff0d;services.msc &#xff0d;找到Themes服务项&#xff0c;默认是禁用&#xff0c;改为自动。 2.运行服务器管理器&#xff1a;左窗口选择功能&#xff0d;右边点“添加功能”在弹出的“添加功能向导”窗口中拖到最下面&#xff0c;…

17篇论文入选CVPR 2019,百度AI都在关注什么?(附论文地址)

整理 | 阿司匹林出品 | AI科技大本营&#xff08;公众号id&#xff1a;rgznai100&#xff09;计算机视觉和模式识别大会CVPR 2019即将于6月在美国长滩召开&#xff0c;作为人工智能领域计算机视觉方向的重要学术会议&#xff0c;CVPR每年都会吸引全球最顶尖的学术机构和公司的研…

【GStreamer】在x264enc中设置profile级别

1、问题描述 在使用GStreamer生成h.264的rtmp流时,不知道怎么设置h.264的profile级别。默认一直是“high”: video/x-h264, ... profile=(string)high, ...2、解决方法 查看官网手册中,有如下解释 The H264 profile that is eventually used depends on a few settings. …

js 使用a标签 下载资源

文档 let data new Blob([hello ajanuw], {type: application/text})let src window.URL.createObjectURL(data)let dl document.createElement(a)dl.href src;dl.download hello.txtdl.click() 切片下载 let data new Blob([hello ajanuw], {type: application/text }) …

linux 新增swap分区

由于用vmware 物理机转换成虚拟机时 忘记把swap 分区转过来了&#xff0c;只能手动在系统里添加了 1建立1G 大小的交换分区 # dd if/dev/zore of/opt/swapfile bs1M count1024 2,设置交换分区文件 # mkswap /opt/swapfile 3.立即启用交换分区文件 # swapon /opt/swapfile 4.使系…

通过cookies跳过验证码登陆页面,直接访问网站的其它URL

我每次手动访问去NN网的一家酒店&#xff0c;就不需要登陆&#xff0c;一旦我用脚本打开就会让我登陆&#xff0c;而登陆页面又有验证码&#xff0c;不想识别验证码&#xff0c;所以就想&#xff1a;“通过cookies跳过验证码登陆页面&#xff0c;直接访问网站的其它URL”转载虫…

可视化深入理解损失函数与梯度下降 | 技术头条

作者 | Hugegene译者 | 刘畅责编 | Rachel出品 | AI科技大本营&#xff08;id&#xff1a;rgznai100&#xff09;【导语】本文对梯度函数和损失函数间的关系进行了介绍&#xff0c;并通过可视化方式进行了详细展示。另外&#xff0c;作者对三种常见的损失函数和两种常用的激活函…

【Qt】Linux上设置自启动后qApp->applicationDirPath()的返回值问题

1、问题描述 开发程序过程中&#xff0c;使用qApp->applicationDirPath()返回程序所在目录&#xff0c;一直没问题。但是在设置自启动后&#xff0c;qApp->applicationDirPath()返回的目录不是程序所在目录。 2、原因分析 查看qApp->applicationDirPath()官方手册&…

sqlserver 行转列

还写了一篇Linq 实现 DataTable 行转列有时间大家可以看一下 sqlserver把行转成列在我们编码中是经常遇到的我做一个小例子大家看一下 1 --创建一个表 2 create table PayPhoneMoney 3 ( 4 id int identity(1,1), 5 userName Nvarchar(20), 6 payType nvarchar(20)…