Zookeeper搭建集群及协同
Zookeeper搭建集群及协同
协同的实现
首先启动一个zkCli客户端(zkCLi-1),创建一个workers节点。
create /workers
使用ls监控当前节点。
ls -w /workers
[]
当前/workers中没有子节点。
新开一个zkCli客户端(zkCli-2),在/workers中创建一个新节点。
create -e /workers/w1 "w1:2220"
此时zkCli-1中收到通知。
WATCHER::
WatchedEvent state:SyncConnected type:NodeChildrenChanged path:/workers
使用ls在zkCli-1中查看节点信息。
ls -w /workers
返回
[w1]
此时在zkCli-2中执行quit退出。
zkCli-1中再次用ls查看。
[]
这样一个简单的协同服务就已经实现了。
集群搭建
在我们上一篇说的什么是挖矿?
一文中,最后留下了一个问题,DPoS算法,这个类似于选举的算法。
Zookeeper集群中,也是使用了一种类似的选举算法,感兴趣的可以去了解一下Paxos算法的论文。
http://lamport.azurewebsites.net/pubs/paxos-simple.pdf
在Zookeeper集群中被选举出来的节点叫做leader,其他节点叫做follow。
为了方便演示,我将我本地的Zookeeper拷贝为了三份,不过记得修改它们三份中的配置文件。
需要修改的是dataDir的路径以及端口号。
服务器0中zoo.cfg
//修改部分
dataDir=/tmp/zookeeper/data0
clientPort=2190
//新增部分(三份cfg均相同)
server.0=127.0.0.1:3333:3334
server.1=127.0.0.1:4444:4445
server.2=127.0.0.1:5555:5556
服务器1中zoo.cfg
//修改部分
dataDir=/tmp/zookeeper/data1
clientPort=2191
//新增部分(三份cfg均相同)
server.0=127.0.0.1:3333:3334
server.1=127.0.0.1:4444:4445
server.2=127.0.0.1:5555:5556
服务器2中zoo.cfg
//修改部分
dataDir=/tmp/zookeeper/data2
clientPort=2192
//新增部分(三份cfg均相同)
server.0=127.0.0.1:3333:3334
server.1=127.0.0.1:4444:4445
server.2=127.0.0.1:5555:5556
分别启动三个Zookeeper服务端。
可以看到已经自动选出了一个Leader节点。
此时我们启动一个zkCli来使用这个三节点集群。
./zkCli.sh -server 127.0.0.1:2190,127.0.0.1:2191,127.0.0.1:2192
可以看到zkCli已经连接到port为2191的节点,也就是服务器1(一个Follower节点)。
现在我们关闭服务器1。
作者: AntzUhl
首发地址博客园:http://www.cnblogs.com/LexMoon/
代码均可在Github上找到(求Star) : Github
个人博客 : http://antzuhl.cn/
公众号 |
![]() |
赞助
支付宝 |
微信 |
![]() |
![]() |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】凌霞软件回馈社区,携手博客园推出1Panel与Halo联合会员
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从零实现富文本编辑器#3-基于Delta的线性数据结构模型
· 记一次 .NET某旅行社酒店管理系统 卡死分析
· 长文讲解 MCP 和案例实战
· Hangfire Redis 实现秒级定时任务,使用 CQRS 实现动态执行代码
· Android编译时动态插入代码原理与实践
· 使用TypeScript开发微信小程序(云开发)-入门篇
· 没几个人需要了解的JDK知识,我却花了3天时间研究
· C#高性能开发之类型系统:从 C# 7.0 到 C# 14 的类型系统演进全景
· 管理100个小程序-很难吗
· 在SqlSugar的开发框架中增加对低代码EAV模型(实体-属性-值)的WebAPI实现支持