明天你会感谢今天奋力拼搏的你。
ヾ(o◕∀◕)ノヾ
只要集群中大多数设备都准备好了,就可以使用ZK服务,对外部客户端没有影响。容错集群设置至少需要三个服务器,建议使用奇数个服务器。
怎么搭建,其实官方文档都写的很全。
zk集群服务器配置步骤如下:
1、安装JDK,这个还不会也就不用学ZK了。
2、zk是用Java编写的,所以启动的时候要设置Java虚拟机的堆内存大小(这做过Java运维和服务优化的都懂)。具体可能要根据实际情况测试和监控JVM中的CG频率来调整。文中也保守推荐了下:对于4GB的机器,使用最大3GB的堆大小。
3、下载安装ZK服务包,可以从这个地址下载(其实就是下载解压缩,把文件放到服务器的哪个目录下面)
4、创建配置文件其实就是在zk服务的conf目录下,一般有个zoo_sample.cfg文件,这就是一个示例的配置文件,把其拷贝一份改名为zoo.cfg,此为默认加载的配置文件,最简单配置如下:
#心跳时间,单位毫秒
tickTime=2000
#快照存储目录,别用/tmp做目录
dataDir=/var/lib/zookeeper/
#ZK服务供客户端连接的端口
clientPort=2181
#集群完成初始化同步连接所容忍的心跳数(tickTime的次数),集群节点多可以适当调大
initLimit=5
#集群主从服务器之间请求和应答之间能容忍的最多心跳数
syncLimit=2
#集群节点配置(有多少个节点配置多少个)
#格式(server.id=host:port:port)
#id(服务器ID,要与第5点中myid文件里的内容一致)
#host(服务器IP或者域名)
#第一个端口是从服务器用来连接领导者的,第二个端口用来选举领导者的。
server.1=zoo1:2888:3888
server.2=zoo2:2888:3888
server.3=zoo3:2888:3888
5、在dataDir设置的目录下创建一个名为myid的文件,文件由一行组成,只包含该机器的id的文本。因此,服务器1的myid只包含文本“1”,不包含其他内容。在集群中,id必须是惟一的,其值应该在1到255之间(不是强制要求)。但注意:如果启用诸如TTL节点,由于内部限制,id必须在1到254之间。
6、在与myid相同的目录中创建初始化标记文件“initialize”,里面什么都不用写为空就行(这是在3.6版本中才出现的,这是什么鬼呢,后续介绍)。
7、给了一种用jar包启动的方式,其实bin目录下面已经写好了一个脚本zkServer.sh,如下,可以start后面带上配置文件,表明用哪个配置文件启动。第2点中堆内存的修改也可以在此文件中修改。
启动服务端:bin/zkServer.sh start
客户端连接:bin/zkCli.sh -server 127.0.0.1:2181
扩展关于initiate(初始化标记文件的介绍):官网地址
initialize 文件在 ZooKeeper 中用于指示服务器在启动时应该初始化一个新的数据树(data tree)。具体来说,initialize 文件的作用包括:
initiate文件使用场景
扩展关于dataLogDir的配置:官方文档
默认情况下,事务日志和快照(Snapshot)可能存储在同一个目录(通常是 dataDir),官方文档也强烈建议加上这个配置,将事务日志存储在单独的目录(通过 dataLogDir 指定)。这有助于避免日志写入和快照操作之间的资源竞争。
客户端连接时,连接串可以指定多个或全部集群接地那的连接地址,用逗号分隔,当一个节点不通时,客户端将自动切换到另一个节点。
ZooKeeper 提供了一系列四字母命令(通过 netcat 或 telnet 发送到客户端端口),用于快速获取集群状态。
完整四字命令列表:
| 命令 | 描述 | 示例输出格式 |
|---|---|---|
ruok |
检查服务器是否正常运行。返回 imok 表示正常。 |
imok |
stat |
查看服务器概要状态(版本、客户端连接数、Leader/Follower 模式等)。 | 多行文本(键值对) |
srvr |
类似 stat,但仅显示服务器自身状态(不包含客户端连接信息)。 |
多行文本(键值对) |
mntr |
输出详细的监控指标(需 ZooKeeper 3.4.0+),适合集成到监控系统。 | 键值对(每行 key\tvalue) |
conf |
显示服务器的运行时配置参数(zoo.cfg 中的配置)。 |
多行文本(键值对) |
cons |
列出当前所有客户端的连接详细信息(IP、会话ID、请求延迟等)。 | 多行文本(每行一个连接) |
crst |
重置客户端连接统计信息(如 stat 中的计数器)。 |
无输出 |
dump |
列出所有临时节点(ephemeral nodes)及其会话ID(仅 Leader 节点响应)。 | 多行文本 |
envi |
显示服务器环境信息(JVM 参数、操作系统信息等)。 | 多行文本(键值对) |
wchs |
列出所有 Watcher 的概要信息(总 Watcher 数、节点路径数量等)。 | 多行文本 |
wchc |
列出所有 Watcher 的详细信息(按节点路径分组,需开启白名单权限)。 | 多行文本 |
wchp |
列出所有 Watcher 的详细信息(按节点路径前缀分组,需开启白名单权限)。 | 多行文本 |
srst |
重置服务器的统计信息(如 mntr 或 stat 中的计数器)。 |
无输出 |
isro |
检查服务器是否处于只读模式(返回 ro 或 rw)。 |
ro 或 rw |
使用示例:
通过 netcat 或 telnet 向 ZooKeeper 客户端端口(默认 2181)发送命令:
# 检查服务状态
echo ruok | nc localhost 2181
# 获取详细监控指标(需 3.4.0+)
echo mntr | nc localhost 2181
# 列出所有客户端连接
echo cons | nc localhost 2181
注意事项
1、版本兼容性:部分命令(如 mntr)需要 ZooKeeper 3.4.0 及以上版本。
2、权限控制:默认情况下,四字命令可能被防火墙或 ZooKeeper 配置限制。需在 zoo.cfg 中配置白名单:
# 允许所有 IP 访问四字命令
4lw.commands.whitelist=*
# 或指定允许的命令(逗号分隔)
4lw.commands.whitelist=ruok,stat,mntr
3、安全性:开放四字命令存在风险,建议限制访问 IP 或结合网络防火墙规则。
常用命令场景
全部评论