zoopkeeper安装、三种模式的配置、脚本及配置项介绍

本文详细介绍了ZooKeeper的安装步骤与配置项解析,包括下载解压、配置文件编辑、关键参数说明如tickTime、initLimit、syncLimit等,以及如何创建myid文件、配置防火墙和启动服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

安装及配置项介绍

1、下载压缩包zookeeper-3.4.10.tar.gz,并进行解压tar -zxvf zookeeper-3.4.10.tar.gz

drwxr-xr-x 11 1001 1001      4096 Mar 19  2018 zookeeper-3.4.10
-rw-r--r--  1 root root  35042811 Mar 19  2018 zookeeper-3.4.10.tar.gz

2、复制一份样例配置文件并命名为zookeeper的配置文件

cp -p zoo_sample.cfg zoo.cfg

3、配置配置文件并简单介绍配置项的含义

配置项及说明
tickTime

该参数有默认值:3000,单位是毫秒ms,可以不配置,不支持系统属性方式配置。

用于配置 ZooKeeper 中最小时间单位的长度,很多运行时的时间间隔都是使用 tickTime 的倍数来表示的。例如,ZooKeeper 中会话的最小超时时间默认是 2*tickTime。

initLimit

该参数有默认值: 10,即表示是参数 tickTime 值得10倍,必须配置,且需要配置一个正整数,不支持系统属性方式配置。

该参数用于配置 Leader 服务器等待 Follower 启动,并完成数据同步的时间。Follwer 服务器再启动过程中,会与 Leader 建立连接并完成对数据的同步,从而确定自己对外提供服务的其实状态。Leader 服务器允许 Follower 在 initLimit 时间内完成这个工作。

通常情况下,运维人员不用太在意这个参数的配置,使用默认值即可。但如果随着 ZooKeeper 集群管理的数据量增大,Follower 服务器再启动的时候,从 Leader 上进行同步数据的时间也会相应变长,于是无法在较短的时间完成数据同步。因此,在这种情况下,有必要适当调大这个参数。

syncLimit

该参数有默认值: 5,即表示参数 tickTime 值得5倍,必须配置,且需要配置一个正整数,不支持系统属性配置。

该参数用于配置 Leader 服务器和 Follower 服务器之间进行心跳检测的最大延时时间。在 ZooKeeper 集群运行过程中,Leader 服务器会与所有的 Follower 进行心跳检测来确定该服务器是否存活。如果 Leader 服务器再 syncLimit 时间内无法获取到 Follower 的心跳检测响应,那么 Leader 就会认为该 Follower 已经脱离了和自己的同步。通常情况下,运维人员使用该参数的默认值即可,但如果部署ZooKeeper 集群的网络环境质量较低(例如网络延时较大或丢包严重),那么可以适当调大这个参数。

dataDir

该参数无默认值,必须配置。

用于配置 ZooKeeper 服务器存储快照文件的目录。默认情况下,如果没有配置参数 dataLogDir,那么事务日志也会存储在这个目录中。考虑到事务日志的写性能直接影响 ZooKeeper 整体的服务能力,因此建议同时通过参数 dataLogDir 来配置 ZooKeeper 事务日志的存储目录。

dataLogDir

该参数有默认值: dataDir,可以不配置,不支持系统属性方式配置。

参数 dataLogDir 用于配置 ZooKeeper 服务器存储事务日志文件的目录。默认情况下,ZooKeeper 会将事务日志文件和快照数据存储在同一目录中,应该尽量将这两者的目录区分开来。

另外,如果条件允许,可以将事务日志的存储位置配置在一个单独的磁盘上。事务日志记录对于磁盘的性能要求非常高,为了保证数据的一致性,ZooKeeper 在返回客户端事务请求相应之前,必须将本次请求对应的事务日志写入到磁盘中。因此,事务日志写入的性能直接决定了 ZooKeeper 在处理事务请求时的吞吐。针对同一块磁盘的其他并发读写操作(例如 ZooKeeper 运行时日志输出和操作系统自身的读写等),尤其是数据快照操作,会极大地影响事务日志的写性能。因此尽量给事务日志的输出配置一个单独的磁盘或挂载点,将极大地提升 ZooKeeper 的整体性能。

clientPort

该参数无默认值,必须配置,不支持系统属性方式配置。

用于配置当前服务器对外的服务端口,客户端会通过该端口和 ZooKeeper 服务器创建连接,一般设置为2181。每台 ZooKeeper 都可以配置任意可用的端口,同时集群中的所有服务器不需要保持 clientPort 端口一致。

server.id=host:port:port

该参数没有默认值,在单机模式下可以不配置,不支持系统属性配置。

该参数用于配置组成 ZooKeeper 集群的机器列表,其中 id 即为 Server ID,与每台服务器 myid 文件中的数字相对应。同时,在该参数中会配置2个端口,第一个端口用于指定 Follower 服务器与 Leader 进行运行时通信和数据同步时所使用的端口第二个端口则专门用于进行 Leader 选举过程中的投票通信。在 ZooKeeper 服务启动的时候,其会根据 myid 文件中配置的 Server ID来确定自己是那台服务器,并使用对应配置的端口来进行启动。如果在实际使用过程中,需要在同一台服务器上部署多个 ZooKeeper 示例来构成伪集群的话,那么这些端口都需要配置成不同如:

server.1=192.168.0.1:2777:3777

server.1=192.168.0.1:2888:3888

server.1=192.168.0.1:2999:3999

扩展:该ServerID也参与到了会话创建过程中,ZooKeeper给客户端生成会话的SessionID的算法中

leaderServers

该参数有默认值: yes,可以不配置,可选配置项为"yes" 和 "no",仅支持系统属性方式配置: zookeeper.leaderServers。

该参数用于配置 Leader 服务器是否能够接受客户端的连接,即是否允许 Leader 想客户端提供服务,默认情况下,Leader 服务器能够接受并处理客户端的所有读写请求。在 ZooKeeper 的架构设计中,Leader 服务器主要用来进行实物更新请求的协调以及集群本省运行时协调,因此,可以设置让 Leader 服务器不接受客户端的连接,以使其专注于进行分布式协调。

minSessionTimeout

maxSessionTimeout

这2个参数有默认值,分别是参数 tickTime 值的2倍和20倍,即默认的会话超时时间在 2 * tickTime ~ 20 * tickTime 范围内,单位为毫秒,可以不配置,不支持系统属性配置。

这2个参数用于服务端对客户端会话的超时时间进行限制,如果客户端设置的超时时间不在该范围内,那么会被服务端强制设置为最大或最小超时时间。

maxClientCnxns

该参数有默认值: 60,可以不配置,不支持系统属性方式配置。

从 Socket 层面限制单个客户端与单台服务器之间的并发连接数,即以 IP 地址粒度来进行连接数的限制。如果将该参数设置为0,则表示对连接不做任何限制。

需要注意的是该连接数限制选项的使用范围仅仅是对单台客户端机器与单台 ZooKeeper 服务器之间的连接数限制,并不能控制所有客户端的连接数总和。

在 3.4.0 版本以前该参数的默认值都是 10,从 3.4.0 版本开始变成了 60,因此运维人员需要注意这个变化,以防 ZooKeeper 版本变化带来服务端连接数限制变化的隐患。

jute.maxbuffer

该参数有默认值: 1048575,单位是字节,可以不配置,仅支持系统属性方式配置: jute.maxbuffer。

该参数用于配置单个数据节点(ZNode)上可以存储的最大数据量大小。

通常情况下,运维人员不需要改动该参数,同时考虑到 ZooKeeper 上不适宜存储太多的数据,往往还需要将该参数设置的更小。

需要注意的是,在变更该参数的时候,需要在 ZooKeeper 集群的所有机器以及所有的客户端上均设置才能生效。

clientPortAddress

该参数没有默认值,可以不配置,不支持系统属性配置。

针对那些多网卡的机器,该参数允许为每个 IP 地址指定不同的监听端口。

snapCount

该参数有默认值: 1000,可以不配置,仅支持系统属性方式配置 zookeeper.snapCount。

参数 snapCount 用于配置相邻2次数据快照之间的事务操作次数,即 ZooKeeper 会在 snapCount 次事务操作之后进行一次数据快照。

autopurge.snapRetainCount

该参数有默认值: 3,可以不配置,不支持系统属性配置。

从 3.4.0 版本开始,ZooKeeper 提供了对历史事务日志和快照数据自动清理的支持。

参数 autopurge.snapRetainCount 用于配置 ZooKeeper 在自动清理的时候需要保留的快照数据文件数量和对应的事务日志文件。

需要注意的是,并不是磁盘上的所有事务日志和快照数据文件都可以被清理掉---那样的话将无法恢复数据。因此参数 autopurge.snapRetainCount 的最小值是 3,如果配置的 autopurge.snapRetainCount 值比 3 小的话,那么会被自动调整到 3,即至少需要保留3个快照数据文件和对应的事务日志文件。

autopurge.purgeInterval

该参数有默认值: 0,单位是小时,可以不配置,不支持系统属性配置。

参数 autopurge.purgeInterval 和参数 autopurge.snapRetainCount 配套使用,同于配置 ZooKeeper 进行历史文件自动清理的频率。如果配置该值为 0或负数,那么就表明不需要开启定时清理功能。ZooKeeper 默认不开启这项功能。

fsync.warningthresholdms

该参数有默认值: 1000,单位是毫秒,可以不配置,仅支持系统属性方式配置: fsync.warningthresholdms。

参数 fsync.warningthresholdms 用于配置 ZooKeeper 进行事务日志 fsync 操作时消耗时间的报警阈值。一旦进行一个 fsync 操作消耗的时间大于参数 fsync.warningthresholdms 指定的值,那么就在日志中打印出报警日志。

preAllocSize

该参数有默认值: 65536,单位是 KB,即64MB,可以不配置,仅支持系统属性方式配置: zookeeper.preAllocSize。

参数 preAllocSize 用于配置 ZooKeeper 事务日志文件预分配的磁盘空间大小。

通常情况下,使用 ZooKeeper 的默认配置 65536KB 即可,但是如果我们将参数 snapCount设置得比默认值更小或更大,那么 preAllocSize 参数也要随之做出变更。

举个例子来说: 如果我们将 snapCount 的值设置为 500,同时预估每次事务操作的数据量大小至多 1KB,那么参数 preAllocSize 设置为 500就足够了。

cnxTimeout

该参数有默认值: 5000,单位是毫秒,可以不设置,仅支持系统属性方式配置: zookeeper.cnxTimeout。

该参数用于配置在 Leader 选举过程中,如服务器之间进行 TCP 连接创建的超时时间。

globalOutstandingLimit

该参数有默认值: 1000,可以不配置,仅支持系统属性方式配置: zookeeper.globalOutstandingLimit。

参数 globalOutstandingLimit 用于配置 ZooKeeper 服务器最大请求堆积数量。在 ZooKeeper 服务器运行的过程中,客户端会源源不断的请求发送到服务器,为了防止服务器资源(包括 CPU、内存和网络等)耗尽,服务端必须限制同时处理的请求数,即最大请求堆积数量。

SkipAcl

该参数有默认值: no,可以不配置,可选配置项为"yes" 和 "no",仅支持系统属性方式配置: zookeeper.skipAcl。

该参数用于配置 ZooKeeper 服务器是否跳过 ACL 权限检查,默认情况下是"no",即会对每一次客户端请求进行权限检查。如果将其设置为"yes",则能一定程度的提高 ZooKeeper 的读写性能,但同时也将向所有客户端开放 ZooKeeper 的数据,包括那些之前设置过 ACL 权限的数据节点,也将不在接受权限控制。

electionAlf

在之前的版本中,可以使用该参数来配置选择 ZooKeeper 进行 Leader 选举时所使用的算法,但从 3.4.0 版本开始,ZooKeeper 废弃了其他选举算法,只留下 FastLeaderElection 算法,因此该参数目前看来没有用了。

4、创建文件mkdir myid

在dataDir目录下创建文件mkdir myid,然后echo 1 myid(在第二台机器上myid文件的内容则写2,一次类推)

5、防火墙

对应的端口打开,或者直接将防火墙关闭

6、启动服务

在 zookeeper的bin路径下执行sh zkServer.sh start启动服务

可以用jps(查看java进程的,hadoop相关组件模块都是java编写,所以可以间接的查看)查看进程

QuorumPeerMain是Zookeeper进程。

7、查看zookeeper状态

进入到bin目录下,sh zkServer.sh status 查看状态,查看zookeeper服务输出信息,服务信息输出文件在bin/zookeeper.out

集群模式

假设我们有三台互相联网的Linux机器,他们的ip地址分别是192.168.0.1、192.168.0.2、192.168.0.3

在集群模式下,集群中的每台机器都需要感知到整个集群是由哪几台机器组成的,在配置文件中,可以按照这样的格式进行配置,每一行都代表一个机器配置:server.id=host:port:port

server.1=192.168.0.1:2888:3888
server.2=192.168.0.2:2888:3888
server.3=192.168.0.3:2888:3888

其中,id被称为ServerID,用来标识该机器在集群中的机器序号,id的范围是1-255。同时,在每台ZooKeeper机器上,我们都需要在数据目录(即dataDir参数指定的那个目录)下创建一个myid文件,该文件只有一行内容,并且是一个数字,即对应于每台机器的ServerID数字。

在ZooKeeper的设计中,集群中所有机器上zoo.cfg文件的内容都应该是一致的。因此最好使用SVN或GIT把此文件管理起来,确保每个机器都能共享到一份相同的配置。

单机模式

单机模式和集群模式唯一的区别就在机器列表上,在单机模式的zoo.cfg文件中的机器列表,只有server.1=192.168.0.1:2888:3888这一个,也可以不进行配置在单机模式下可以不配置。

我们在bin目录下执行./zkServer.sh status查看状态,显示的信息中Mode:standalone,表示单机模式

[root@iZbp13pwlxqwiu1xxb6szsZ bin]# ./zkServer.sh status
ZooKeeper JMX enabled by default
Using config: /tomcat/zookeeper-3.4.10/bin/../conf/zoo.cfg
Mode: standalone
[root@iZbp13pwlxqwiu1xxb6szsZ bin]# 

伪集群模式

所谓的伪集群,就是所有的机器都在一台机器上,像Hadoop就可以在一台机器上搭建伪集群模式,这种模式和集群模式类似,还是机器列表的变化

server.1=192.168.0.1:2888:3888
server.2=192.168.0.1:2889:3889
server.3=192.168.0.1:2890:3890

每一行的机器列表配置都是同一个IP地址,但是后面的端口配置是不一样的,因为在同一台机器上启动多个进程,就必须绑定不同的端口。

ZooKeeper可执行脚本

脚本说明
zkCleanup清理ZooKeeper历史数据,包括事务日志文件和快照数据文件
zkCliZooKeeper的一个简易客户端
zkEnv设置ZooKeeper的环境变量
zkServerZooKeeper服务器的启动、停止和重启脚本

参考

https://blog.csdn.net/liyiming2017/article/details/83035157

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值