在谈论ZooKeeper之前,让我们解释一下分布式系统以及对ZooKeeper的需求。
当由通过计算机网络链接在一起的独立计算实体组成的软件系统及其组件相互通信和协调以实现共同目标时,这称为分布式系统。 (例如:多人在线游戏,例如《部落冲突》)
这些系统中的过程需要某种类型的协议才能正确有效地运行。这种协议也称为分布式协调。
我们可以建立自己的协调系统,但是,这将需要大量的工作,而且并不是一件容易的事。 问题在于实施正确的容错解决方案。
那么,有什么可以替代的选择吗?
我们可以使用诸如ZooKeeper之类的强大协调服务。
ZooKeeper是一项集中式服务,用于维护配置信息,命名,提供分布式同步和提供组服务。 ZooKeeper简单,分布式,可靠且快速。
ZooKeeper可以在复制模式和独立模式下工作。
在复制模式下,涉及多个服务器。 选择其中一台服务器作为领导者,其他服务器作为跟随者。 如果领导者失败,则跟随者之一将被选为大师。
群集中的服务器必须彼此了解。 它们在持久存储中维护内存中的状态图像以及事务日志和快照。 只要大多数服务器可用,ZooKeeper服务将可用。
客户端可以连接到单个ZooKeeper服务器。 但是,当客户端启动时,会为它们提供服务器列表,因此当与已连接服务器的连接失败时,客户端可以连接到群集中的任何其他服务器。
读取操作可以从群集中的任何服务器执行读取操作,但是写入操作必须经过领导者。
ZooKeeper也可以独立运行。 在这种模式下,所有客户端都连接到单个Zookeeper服务器。
在这种模式下,我们将失去复制和高可用性的优势。
ZooKeeper具有层次结构的名称空间。 名称空间可以具有与其关联的数据以及子级。 到节点的路径始终表示为规范的,绝对的,斜杠分隔的路径。 没有相对参考。 这些名称空间的组织方式非常类似于Linux中的文件系统。
ZooKeeper树中的每个节点都称为znode。 Znodes维护一个统计信息结构,其中包括用于数据更改,acl(访问控制列表)更改的版本号。 数据存储在znode中。
version: ‘3.1‘
services:
zoo1:
image: zookeeper:latest
restart: always
hostname: zoo1
ports:
- 2181:2181
- 2888:2888
- 3888:3888
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOO_MY_ID: 1
ZOO_SERVERS: server.1=0.0.0.0:2888:3888 server.2=server2IP:2888:3888 server.3=server3IP:2888:3888-
查看要点上的代码。
运行给定的yml server1 docker-compose -f zoo1.yml up -d
version: ‘3.1‘
services:
zoo2:
image: zookeeper:latest
restart: always
hostname: zoo2
ports:
- 2181:2181
- 2888:2888
- 3888:3888
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOO_MY_ID: 2
ZOO_SERVERS: server.1=server1IP:2888:3888 server.2=0.0.0.0:2888:3888 server.3=server3IP:2888:3888
查看要点上的代码.
运行给定的yml server2 docker-compose -f zoo2.yml up -d
version: ‘3.1‘
services:
zoo2:
image: zookeeper:latest
restart: always
hostname: zoo2
ports:
- 2181:2181
- 2888:2888
- 3888:3888
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOO_MY_ID: 3
ZOO_SERVERS: server.1=server1IP:2888:3888 server.2=server2IP:2888:3888 server.3=0.0.0.0:2888:3888
查看要点上的代码.
在server3中运行给定的yml docker-compose -f zoo3.yml up -d
root@host:~# nc localhost 2181
stats
你可以在所有服务器上尝试给定的命令,然后在输出中检查模式,以查找领导者和跟随者。
*注意:将所有yml中的server1IP,server2IP和server3IP替换为其各自的值。
> 喜欢这篇文章的可以点个赞,欢迎大家留言评论,记得关注我,每天持续更新技术干货、职场趣事、海量面试资料等等
> 如果你对java技术很感兴趣也可以交流学习,共同学习进步。
> 不要再用"没有时间“来掩饰自己思想上的懒惰!趁年轻,使劲拼,给未来的自己一个交代
文章写道这里,欢迎完善交流。最后奉上近期整理出来的一套完整的java架构思维导图,分享给大家对照知识点参考学习。有更多JVM、Mysql、Tomcat、Spring Boot、Spring Cloud、Zookeeper、Kafka、RabbitMQ、RockerMQ、Redis、ELK、Git等Java干货
原文:https://www.cnblogs.com/youruike1/p/12557158.html