news 2026/8/5 7:55:11

ZooKeeper 3.7.1三节点集群部署:myid、选举与同步测试

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ZooKeeper 3.7.1三节点集群部署:myid、选举与同步测试

前言

在本地学习ZooKeeper时,通常只需要启动一个服务端,再连接localhost:2181完成节点的创建和查询。这种方式适合熟悉命令,但单个进程停止后,整个协调服务就无法继续提供访问。

ZooKeeper集群通常由奇数个节点组成。三节点集群允许其中一个节点暂时不可用,只要剩余节点仍能形成多数派,集群就可以继续完成Leader选举并对外提供服务。

本文将准备三台虚拟机,配置固定IP、主机名映射和ZooKeeper 3.7.1,在每个节点中设置相同的集群成员列表,再通过不同的myid标识三台服务器。

集群启动后,还会检查Leader和Follower角色,创建临时、顺序及持久节点,并验证数据能否在不同节点之间同步。最后使用cpolar建立一个TCP公网入口,用于受控环境下的远程连接测试。需要注意,该入口只指向一个节点,不能替代完整的集群高可用访问方案。

1.前提条件

准备三台虚拟机,并列出对应的IP地址和主机名,如下图所示

IPHostname
192.168.42.140zookeeper1
192.168.42.145zookeeper2
192.168.42.146zookeeper3

在虚拟机分别对hostname进行命名:

hostnamectl set-hostname zookeeper1 //修改hostnamehostname//查看hostname

2.环境准备(3虚拟机都要做)

关闭防火墙

systemctl stop firewalld //停止firewalld防火墙 systemctl disable firewalld //disable防火墙,使其开机不自启 systemctl status firewalld //查看firewalld是否已经关闭

配置操作系统(SELINUX修改成disabled):

vi/etc/sysconfig/selinux

设置本机IP地址与MAC地址

vi/etc/sysconfig/network-scripts/ifcfg-ens33
  • BOOTPROTO的值修改成static
  • 文末加上对应的IP地址与MAC地址等数据
  • MAC 地址查看方法:ip link show ens33

添加主机名与映射关系

192.168.42.140 zookeeper1192.168.42.145 zookeeper2192.168.42.146 zookeeper3

3.安装zookeeper(三台虚拟机都要操作)

3.1环境准备

  • jvm环境
  • JDK 必须是7或以上版本
java-version

3.2.下载安装

去zookeeper 官网下载完后,将压缩包上传到linux环境中,我这边上传到/shan路径:

对压缩包进行解压:

tar-zxvfapache-zookeeper-3.7.1-bin.tar.gz

重命名:

mvapache-zookeeper-3.7.1-bin/ zookeeper

3.3 配置

进入zookeeper目录下的conf目录,将目录中的zoo_sample.cfg改成zoo.cfg:

mvzoo_sample.cfg zoo.cfg

在zookeeper目录下新建一个zkData文件夹

mkdirzkData

回到zoo.cfg中,对其进行修改,将dataDir的路径换成我们刚刚新建的zkData的路径

vimzoo.cfg

3.3.启动测试

进入bin目录下,启动服务端:

./zkServer.sh start

jps查看进程:

jps

回到zookeeper目录下,启动客户端:

bin/zkCli.sh

3.4.退出

quit

3.5关闭客户端

./zkServer.sh stop

4.配置zookeeper集群

添加环境变量

exportZK_HOME=/shan/zookeeperexportPATH=$PATH:$ZK_HOME/bin

对zookeeper/conf 中的zoo.cfg修改

server.1=192.168.42.140:2888:3888server.2=192.168.42.145:2888:3888server.3=192.168.42.146:2888:3888

进入zkData中,修改myid文件

vimyid

5.zookeeper集群测试

启动各个服务器的zookeeper

./zkServer.sh start

启动成功的被选举为zookeeper3被选举为leader而zookeeper2和zookeeper1成为了follower:

至此,zookeeper集群搭建成功啦~

6.zookeeper简单使用

登录到节点:

./zkCli.sh-server127.0.0.1:2181

使用help来查看zookeeper客户端命令:

ls [watch] : 查看zookeeper节点,默认情况下只存在一个zookeeper节点:

  • -s:顺序节点,顺序是累加的,由 zookeeper 提供
  • -e:临时节点,服务器断开,然后重新连接服务器之后该节点会消失
ls/ls/zookeeper create-e/znode01 001 create-e-s/znode02 002 create /znode03 003 create-s/znode04 004ls/

断开 zookeeper 后台服务之后,再次连接,可以看到根节点下的临时节点 znode01、znode02 已经消失了,但是由于 znode03、znode04 是持久节点,所以还继续存在:

查看节点值:

get /znode03

获取节点的状态体:

stat/znode03

修改节点值:

set/znode0310086

删除节点,zookeeper中有两种删除的方式:

  • delete [version]:类似于 Linux 中删除某一个文件
  • rmr path:类似于递归删除文件夹

leader创建了一个文件,follower也会创建:

leader:

follower:

在现实开发或测试场景中,你本地虚拟机里运行的ZooKeeper服务地址是 192.168.42.145:2181,但该 IP 仅限内网访问,外部设备(比如你的手机、公司电脑,或云服务器)无法直接连接。这时,你可以借助 Cpolar 实现内网穿透:只需在 ZooKeeper所在机器上执行 cpolar,Cpolar 就会为你分配一个公网地址。之后,无论你在世界哪个角落,都可以像这样连接:

./zkCli.sh-server3.tcp.cpolar.io:12345

跟我一起来安装cpolar吧!

7.安装cpolar内网穿透工具

cpolar 可以将你本地电脑中的服务(如 SSH、Web、数据库)映射到公网。即使你在家里或外出时,也可以通过公网地址连接回本地运行的开发环境。

❤️以下是安装cpolar步骤:

使用一键脚本安装命令:

sudocurlhttps://get.cpolar.sh|sh

安装完成后,执行下方命令查看cpolar服务状态:(如图所示即为正常启动)

sudosystemctl status cpolar

Cpolar安装和成功启动服务后,在浏览器上输入虚拟机主机IP加9200端口即:【ip:9200】访问Cpolar管理界面,使用Cpolar官网注册的账号登录,登录后即可看到cpolar web 配置界面,接下来在web 界面配置即可:

打开浏览器访问本地9200端口,使用cpolar账户密码登录即可,登录后即可对隧道进行管理。

8.配置公网地址

通过配置,你可以在本地 WSL 或 Linux 系统上运行 SSH 服务,并通过 Cpolar 将其映射到公网,从而实现从任意设备远程连接开发环境的目的。

  • 隧道名称:可自定义,本例使用了:zookeeper,注意不要与已有的隧道名称重复
  • 协议:tcp
  • 本地地址:
  • 端口类型:随机临时TCP端口
  • 地区:China Top

创建成功后,打开左侧在线隧道列表,可以看到刚刚通过创建隧道生成了公网地址,接下来就可以在其他电脑或者移动端设备(异地)上,使用任意一个地址在终端中访问即可。

  • tcp 表示使用的协议类型

  • 2.tcp.cpolar.top是 Cpolar 提供的域名

  • 10518是随机分配的公网端口号

通过Cpolar提供的公网地址和端口,ZooKeeper就可以在公网访问啦

./zkCli.sh-server2.tcp.cpolar.top:10518

9.保留固定TCP公网地址

使用cpolar为其配置TCP地址,该地址为固定地址,不会随机变化。

选择区域和描述:有一个下拉菜单,当前选择的是“China Top”。
右侧输入框,用于填写描述信息。
保留按钮:在右侧有一个橙色的“保留”按钮,点击该按钮可以保留所选的TCP地址。
列表中显示了一条已保留的TCP地址记录。

  • 地区:显示为“China Top”。

  • 地址:显示为“31.tcp.cpolar.top:11780”。

登录cpolar web UI管理界面,点击左侧仪表盘的隧道管理——隧道列表,找到所要配置的隧道zookeeper,点击右侧的编辑

修改隧道信息,将保留成功的TCP端口配置到隧道中。

  • 端口类型:选择固定TCP端口
  • 预留的TCP地址:填写保留成功的TCP地址

点击更新

创建完成后,打开在线隧道列表,此时可以看到随机的公网地址已经发生变化,地址名称也变成了保留和固定的TCP地址。

最后测试一下固定的地址是否好用,测试命令:

./zkCli.sh-server31.tcp.cpolar.top:11780

总结

完成以上配置后,三台虚拟机已经组成一个ZooKeeper集群。每台服务器都使用相同的server.1server.2server.3配置,再通过各自的数据目录中的myid确定节点身份。

集群启动后,会选举一台服务器作为Leader,其余节点作为Follower。客户端创建或修改znode时,变更会经过集群事务流程同步到其他节点,因此在不同服务器中能够读取到相同的数据。

临时节点会与客户端会话绑定,会话失效后节点将被删除;持久节点则会继续保存在ZooKeeper数据目录中。正常重启服务不会自动清空持久节点,但删除数据目录、错误挂载目录或重新初始化环境可能造成数据丢失。

通过cpolar将2181端口映射为公网TCP地址后,可以在其他网络环境中使用zkCli.sh连接对应节点。这里的本地地址应明确填写2181端口,不应开放用于集群选举和节点通信的2888、3888端口。

当前配置只为一台ZooKeeper服务器建立了公网隧道。因此,即使后端是三节点集群,只要被映射的这台服务器停止,外部客户端使用的公网地址仍然会断开。这种方式适合临时实验,不能直接称为公网高可用入口。

ZooKeeper客户端在正式环境中通常应配置多个服务器地址,让客户端能够在单个节点故障后切换连接。远程访问场景也需要单独设计多个受控入口,而不是只依赖一个固定TCP地址。

更重要的是,ZooKeeper并不适合在没有保护的情况下直接开放到互联网。公网测试前应配置ACL和身份认证,限制可访问的znode及操作权限,并避免在其中保存明文密码、令牌和其他敏感配置。

文章中关闭防火墙和SELinux的做法只适合受控实验环境。长期运行时,应恢复必要的系统防护,只允许三台节点之间访问集群端口,并限制2181端口的来源范围。

用于生产环境时,还需要补充事务日志和快照清理、JVM参数、磁盘监控、服务守护、配置备份及节点故障演练。三台虚拟机也应尽量分布在不同物理主机或故障域中,避免底层设备故障同时影响全部节点。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/5 7:54:45

算法空间复杂度解析:从O(1)到O(n²)的实战指南与优化策略

1. 从“跑得快”到“装得下”:为什么空间复杂度同样重要 刚入门算法的朋友,一提到复杂度分析,脑子里蹦出来的第一个词多半是“时间复杂度”。我们总在关心代码跑得快不快,循环了几次,这当然没错。但今天,我…

作者头像 李华
网站建设 2026/8/5 7:52:27

2026.8.3总结

今日思考:这个月的计划是重拾总结不间断的目标。要达成这个目标,每天晚上需要抽35分钟左右的时间去写。那么问题来了,我要用什么模板去写这个总结,才能让我更快的成长,进步。那就是每天将思考的问题写下来。两年了&…

作者头像 李华
网站建设 2026/8/5 7:44:05

【多组消除谐波PWM双极波形的解决方案】两电平三相逆变器的选择性谐波消除PWM(SHEPWM))四分之一周期具有3、5和7个开关角的三相两电平逆变器的选择性谐波消除PWM(SHEPWM)(Matla)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 &#x1f381…

作者头像 李华
网站建设 2026/8/5 7:43:20

LAV Filters终极指南:免费开源解码器打造完美播放体验

LAV Filters终极指南:免费开源解码器打造完美播放体验 【免费下载链接】LAVFilters LAV Filters - Open-Source DirectShow Media Splitter and Decoders 项目地址: https://gitcode.com/gh_mirrors/la/LAVFilters 你是否厌倦了视频播放时的卡顿、格式不支持…

作者头像 李华
网站建设 2026/8/5 7:42:40

Session、Cookie与Token:Web身份认证核心机制全解析与实战选型

1. 项目概述:从“登录”说起,为什么我们需要Session、Cookie和Token? 如果你是一名Web开发者,或者对网站后台技术感兴趣,那么“登录”这个动作你一定不陌生。输入用户名密码,点击登录,然后就能…

作者头像 李华