Docker启动Zookeeper服务
Docker启动Zookeeper服务
一、什么是ZooKeeper
ZooKeeper:分布式应用程序的分布式协调服务
ZooKeeper 是一个针对分布式应用程序的分布式开源协调服务。它公开了一组简单的原语,分布式应用程序可以在这些原语的基础上构建更高级别的同步、配置维护、组和命名服务。它被设计为易于编程,并使用按照熟悉的文件系统目录树结构设计的数据模型。它在 Java 中运行,并具有 Java 和 C 的绑定。
众所周知,协调服务很难做好。它们特别容易出现竞争条件和死锁等错误。ZooKeeper 背后的动机是减轻分布式应用程序从头开始实现协调服务的责任。
设计目标
ZooKeeper 很简单。 ZooKeeper 允许分布式进程通过共享的分层命名空间相互协调,该命名空间的组织方式与标准文件系统类似。命名空间由数据寄存器(用 ZooKeeper 的说法称为 znode)组成,它们类似于文件和目录。与专为存储而设计的典型文件系统不同,ZooKeeper 数据保存在内存中,这意味着 ZooKeeper 可以实现高吞吐量和低延迟数。
ZooKeeper 的实现非常注重高性能、高可用性、严格有序的访问。ZooKeeper 的性能方面意味着它可以在大型分布式系统中使用。可靠性方面使其不会成为单点故障。严格的排序意味着可以在客户端实现复杂的同步原语。
ZooKeeper 被复制。 与它协调的分布式进程一样,ZooKeeper 本身旨在通过一组称为集合的主机进行复制。
组成 ZooKeeper 服务的服务器必须相互了解。它们在内存中维护状态映像,以及持久存储中的事务日志和快照。只要大多数服务器可用,ZooKeeper 服务就可用。
客户端连接到单个 ZooKeeper 服务器。客户端维护一个 TCP 连接,通过该连接发送请求、获取响应、获取监视事件并发送心跳。如果与服务器的 TCP 连接中断,客户端将连接到另一台服务器。
ZooKeeper 已订购。 ZooKeeper 用反映所有 ZooKeeper 事务顺序的数字标记每个更新。后续操作可以使用该顺序来实现更高级别的抽象,例如同步原语。
ZooKeeper 速度很快。 它在“读取为主”的工作负载中尤其快。ZooKeeper 应用程序在数千台计算机上运行,并且在读取比写入更常见的情况下性能最佳(比率约为 10:1)。
二、使用Docker启动Zookeeper
2.1 启动Zookeeper
docker-compose -f zookeeper.yaml -p zookeeper up
version: '3.1' services: zoo1: image: zookeeper hostname: zoo1 ports: - 2181:2181 environment: ZOO_MY_ID: 1 ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181 zoo2: image: zookeeper hostname: zoo2 ports: - 2182:2181 environment: ZOO_MY_ID: 2 ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181 zoo3: image: zookeeper hostname: zoo3 ports: - 2183:2181 environment: ZOO_MY_ID: 3 ZOO_SERVERS: server.1=zoo1:2888:3888;2181 server.2=zoo2:2888:3888;2181 server.3=zoo3:2888:3888;2181
2.2 验证
上述yaml文件启动了3个zk服务,下面验证数据同步
(1)打开“zookeeper-zoo1-1”命令窗口
#连接zk服务 /bin/zkCli.sh -server 127.0.0.1:2181 #创建测试数据 [zk: 127.0.0.1:2181(CONNECTED) 1] create /zk_test Created /zk_test #设置数据 [zk: 127.0.0.1:2181(CONNECTED) 3] set /zk_test 123456 #获取数据 [zk: 127.0.0.1:2181(CONNECTED) 4] get /zk_test 123456
(2)打开“zookeeper-zoo2-1”命令窗口
#连接zk服务 /bin/zkCli.sh -server 127.0.0.1:2181 #获取数据 [zk: 127.0.0.1:2181(CONNECTED) 0] get /zk_test 123456 #修改数据-测试修改 [zk: 127.0.0.1:2181(CONNECTED) 1] set /zk_test 111222
(3)打开“zookeeper-zoo1-1”命令窗口
#获取修改后的数据 [zk: 127.0.0.1:2181(CONNECTED) 5] get /zk_test 111222
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!