跨网操控分布式协调中枢不卡壳!ZooKeeper+cpolar 内网穿透实验室第 741 个成功挑战

21 阅读11分钟

在这里插入图片描述

软件名称:

ZooKeeper(分布式协调服务软件)+ cpolar(内网穿透工具)

操作系统支持:

  • ZooKeeper:支持 Linux(CentOS、Ubuntu 等)、Windows、macOS,生产环境主流部署在 Linux 系统
  • cpolar:支持 Linux(全系列发行版)、Windows、macOS、Docker,本文实操基于 Linux 系统

软件介绍:

ZooKeeper 是 Apache 旗下的分布式协调服务软件,像分布式系统的 “大脑中枢”,能解决分布式环境下的节点管理、配置同步、集群选主、分布式锁等核心问题,集群模式下具备高可用、强一致、自动容灾的特性,是 Kafka、Dubbo、HBase 等分布式框架的 “标配”;cpolar 是一款轻量级内网穿透工具,无需公网 IP,能把内网中的服务(如 ZooKeeper 集群)映射到公网,实现异地跨网访问,操作简单、无需复杂配置,还支持固定 TCP 公网地址,稳定性拉满。

在这里插入图片描述

ZooKeeper 的出色功能

ZooKeeper 最核心的本事,就是给分布式系统当 “定海神针”:

  1. 集群自动选主:3 节点及以上集群中,一旦 Leader 节点宕机,能自动从 Follower 节点里选出新 Leader,全程无需人工干预,保证服务不中断,就像团队里没了队长,立刻能选出新队长扛活;
  2. 数据一致性保障:不管是 Leader 还是 Follower 节点,写入的数据都会同步一致,比如在 Leader 上创建一个分布式锁节点,所有 Follower 节点都能实时看到,杜绝 “数据各说各的”;
  3. 灵活的节点管理:支持临时节点(断开连接自动消失)、持久节点(永久保存)、顺序节点(自动生成序号),能适配分布式任务调度、配置中心、服务注册发现等多种场景,像个 “万能文件柜”,想存临时文件、永久文件都能满足。

在这里插入图片描述

实用场景

场景 1:异地开发调试分布式系统

  • 痛点:开发团队分散在不同城市,本地搭建的 ZooKeeper 集群只有内网 IP,异地同事没法连接集群调试代码,只能靠远程桌面或反复传日志,调试一次要半天,沟通成本高、效率低;
  • 爽点:在部署 ZooKeeper 集群的 Linux 机器上装 cpolar,配置好隧道后生成公网 TCP 地址,异地同事直接用./zkCli.sh -server 公网地址:端口就能连接集群,像访问本地服务一样丝滑,调试代码实时同步,半天的活 1 小时搞定。

场景 2:生产环境 ZooKeeper 集群远程运维

  • 痛点:公司 ZooKeeper 集群部署在机房内网,运维人员下班或出差时,集群出小问题(比如需要查看节点状态、修改配置),必须到机房操作,半夜跑机房是家常便饭,又累又耽误事;
  • 爽点:用 cpolar 给 ZooKeeper 集群配置固定公网 TCP 地址,运维人员在异地用手机热点、家里网络,都能通过公网地址连接集群,执行stat /节点名set /节点名 新值等操作,远程解决问题,不用再跑机房,下班能安心陪家人。 在这里插入图片描述

cpolar 内网穿透技术带来的便利

  1. 摆脱公网 IP 依赖:不用再找运维申请公网 IP,不用配置复杂的路由器端口映射,只要在 ZooKeeper 所在机器装 cpolar,一键创建隧道就能生成公网地址,小白也能 5 分钟搞定,省去跟网络配置较劲的时间;
  2. 跨网访问无限制:不管是在公司外的咖啡厅、异地出差的酒店,还是家里的卧室,只要能上网,就能访问内网的 ZooKeeper 集群,再也不用局限在局域网里操作,工作场景彻底 “解绑”;
  3. 固定地址更省心:cpolar 支持保留固定 TCP 公网地址,不用每次重启隧道都换地址,对接客户、调试代码时,把固定地址发给相关人员,一次配置永久可用,避免反复沟通改地址的麻烦;
  4. 多系统适配无压力:cpolar 能在 Linux、Windows、macOS 上运行,不管 ZooKeeper 部署在什么系统,都能适配,不用为了内网穿透换系统、改部署架构;
  5. 安全又稳定:cpolar 的隧道传输加密,不用担心内网服务暴露后的数据安全问题,而且公网连接延迟低、稳定性高,远程操作 ZooKeeper 集群时,跟访问本地集群几乎没差别,不会出现卡顿、断连的情况;
  6. 低成本解决大问题:相比于租用云服务器搭建中转节点,cpolar 免费版就能满足基础的内网穿透需求,付费版价格亲民,中小企业用起来毫无压力,用一杯奶茶的成本解决跨网访问的核心痛点。

在这里插入图片描述

总结

ZooKeeper 作为分布式系统的 “协调中枢”,集群模式下的高可用、强一致性是解决分布式问题的核心,但内网部署的限制让它的使用场景大打折扣;而 cpolar 就像给 ZooKeeper 装了 “跨网翅膀”,无需公网 IP、无需复杂配置,就能把内网的 ZooKeeper 集群映射到公网,让开发调试、远程运维、客户验收都变得简单高效。

不管是开发团队异地协作,还是运维人员远程处理集群问题,ZooKeeper+cpolar 的组合都能打破局域网的边界,既发挥了 ZooKeeper 集群的高可用优势,又解决了跨网访问的核心痛点,让分布式协调服务真正 “无处不在”,不用再被内网限制绑住手脚!

摆脱内网束缚的教程已准备好。赶紧去安装吧!

本篇将带你从零开始,手把手搭建一个真正可用的三节点ZooKeeper集群。

  • 配置文件怎么写?
  • myid 到底是什么?
  • 如何验证Leader/Follower角色?

遇到“Error contacting service”怎么办?所有坑我们都踩过,所有命令都亲测有效。别再单机玩ZooKeeper了——是时候进入高可用的世界了!

image-20251205103527547

1.前提条件

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

IPHostname
192.168.42.140zookeeper1
192.168.42.145zookeeper2
192.168.42.146zookeeper3

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

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

image-20251204153434057

image-20251204153539525

image-20251204153551879

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

关闭防火墙

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

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

vi /etc/sysconfig/selinux

image-20251204153820960

设置本机IP地址与MAC地址

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

image-20251204154615776

添加主机名与映射关系

192.168.42.140 zookeeper1
192.168.42.145 zookeeper2
192.168.42.146 zookeeper3

image-20251204155338255

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

3.1环境准备

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

149b1d82094224db59959c7d7c10b8c8

3.2.下载安装

zookeeper 官网:Apache ZooKeeper 最新稳定版下载地址:Apache Downloads

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

dd0fa6d9d8c3be9ae8d48cba0d9e2381

对压缩包进行解压:

tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz

d02b62095642e432bb7e77eb069401b5

重命名:

mv apache-zookeeper-3.7.1-bin/ zookeeper

328f816e419fefa040579c2deb731fa0

3.3 配置

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

mv zoo_sample.cfg zoo.cfg

a513c5c58d43e5e8f1b2f23c9cb67dd2

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

mkdir zkData

f606f45cb3374302bfa3c93f53b72300

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

vim zoo.cfg

8c29ef2a142f497bfc4ad80ea0fd03f0

3.3.启动测试

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

./zkServer.sh start

b165240c1b5d76c1ef38b5eb80f5435e

jps查看进程:

jps

b165240c1b5d76c1ef38b5eb80f5435e

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

bin/zkCli.sh

183801c4d401c70b746141db86804128

3.4.退出

quit

de0533544db1e1ae509bbc2742ff1ffe

3.5关闭客户端

./zkServer.sh stop

4.配置zookeeper集群

添加环境变量

export ZK_HOME=/shan/zookeeper
export PATH=$PATH:$ZK_HOME/bin

对zookeeper/conf 中的zoo.cfg修改

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

image-20251204160155080

image-20251204160122040

进入zkData中,修改myid文件

vi myid

image-20251204160334456

5.zookeeper集群测试

启动各个服务器的zookeeper

./zkServer.sh start 

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

image-20251204161224379

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

6.zookeeper简单使用

登录到节点:

./zkCli.sh -server 127.0.0.1:2181

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

image-20251204162227722

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

image-20251204165711393

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

image-20251204170044014

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

image-20251204170124456

查看节点值:

get /znode03

image-20251204170213778

获取节点的状态体:

stat /znode03

image-20251204170310662

修改节点值:

set /znode03 10086

image-20251204170356626

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

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

image-20251204170512533

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

leader:

image-20251204170723532

follower:

image-20251204170748622

image-20251204170759473

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

./zkCli.sh -server 3.tcp.cpolar.io:12345

跟我一起来安装cpolar吧!

7.安装cpolar内网穿透工具

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

❤️以下是安装cpolar步骤:

官网在此:www.cpolar.com

使用一键脚本安装命令:

sudo curl https://get.cpolar.sh | sh

image-20250814101639846

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

sudo systemctl status cpolar

22e5adfaf290a17fc3384bb296055259

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

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

8a6698b1bf26d64ba3645827fbfb1c29

8.配置公网地址

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

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

image-20251205112010088

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

  • tcp 表示使用的协议类型

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

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

image-20251205112023894

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

./zkCli.sh -server 2.tcp.cpolar.top:10518

image-20251205143421041

image-20251205143433382

9.保留固定TCP公网地址

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

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

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

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

image-20251205153835094

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

image-20251205155525955

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

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

点击更新

image-20251205155549999

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

image-20251205155611969

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

./zkCli.sh -server 31.tcp.cpolar.top:11780

image-20251205155631474

image-20251205155644311

总结

单机ZooKeeper只适合学习和调试,真正的分布式协调服务必须运行在集群之上。通过本文的步骤,你可以快速搭建一个稳定、高可用的ZooKeeper集群,为你的 Kafka、Dubbo或自研分布式系统打下坚实基础。

别再“单机玩耍”了——是时候让ZooKeeper在集群中真正“活”起来!

感谢您对本篇文章的喜爱,有任何问题欢迎留言交流。cpolar官网-安全的内网穿透工具 | 无需公网ip | 远程访问 | 搭建网站