From bc339afb2af61d9f40b7416275038cea7aae9052 Mon Sep 17 00:00:00 2001 From: "ruyu.li" Date: Tue, 27 Jul 2021 08:53:20 +0800 Subject: [PATCH] fix --- Middleware.md | 43 ++++++++++++++---- images/Middleware/Zookeeper中的角色.jpg | Bin 0 -> 15038 bytes .../Middleware/Zookeeper的数据模型.jpg | Bin 0 -> 19860 bytes 3 files changed, 34 insertions(+), 9 deletions(-) create mode 100644 images/Middleware/Zookeeper中的角色.jpg create mode 100644 images/Middleware/Zookeeper的数据模型.jpg diff --git a/Middleware.md b/Middleware.md index a88e508..a115c77 100644 --- a/Middleware.md +++ b/Middleware.md @@ -997,18 +997,18 @@ Zookeeper主要靠其 **分布式数据一致性** 为集群提供 **分布式 - **LEADING:**当前Server即为选举出来的Leader - **FOLLOWING:**Leader已经选举出来,当前Server与之同步 - +![Zookeeper中的角色](images/Middleware/Zookeeper中的角色.jpg) Zookeeper集群中,有Leader、Follower和Observer三种角色 -- **Leader** +- **领导者(Leader)**:负责进行投票的发起和决议,更新系统状态 Leader服务器是整个ZooKeeper集群工作机制中的核心,其主要工作: - 事务请求的唯一调度和处理者,保证集群事务处理的顺序性 - 集群内部各服务的调度者 -- **Follower** +- **跟随者(Follower)**:用于接收客户端请求并给客户端返回结果,在选主过程中进行投票 Follower服务器是ZooKeeper集群状态的跟随者,其主要工作: @@ -1016,7 +1016,7 @@ Zookeeper集群中,有Leader、Follower和Observer三种角色 - 参与事务请求Proposal的投票 - 参与Leader选举投票 -- **Observer** +- **观察者(Observer)**:可以接受客户端连接,将写请求转发给 leader,但是observer 不参加投票的过程,只是为了扩展系统,提高读取的速度 Observer是3.3.0 版本开始引入的一个服务器角色,它充当一个观察者角色——观察ZooKeeper集群的最新状态变化并将这些状态变更同步过来。其工作: @@ -1025,14 +1025,39 @@ Zookeeper集群中,有Leader、Follower和Observer三种角色 -## Zookeeper下Server工作状态 +## 数据模型 + +Zookeeper 的数据模型: + +- 层次化的目录结构,命名符合常规文件系统规范,类似于Linux +- 每个节点在zookeeper中叫做znode,并且其有一个唯一的路径标识 +- 节点Znode可以包含数据和子节点,但是EPHEMERAL类型的节点不能有子节点 +- Znode中的数据可以有多个版本,比如某一个路径下存有多个数据版本,那么查询这个路径下的数据就需要带上版本 +- 客户端应用可以在节点上设置监视器 +- 节点不支持部分读写,而是一次性完整读写 + +![Zookeeper的数据模型](images/Middleware/Zookeeper的数据模型.jpg) + + + +## Server工作状态 服务器具有四种状态,分别是 LOOKING、FOLLOWING、LEADING、OBSERVING。 -- 1.LOOKING:寻找Leader状态。当服务器处于该状态时,它会认为当前集群中没有 Leader,因此需要进入 Leader 选举状态 -- 2.FOLLOWING:跟随者状态。表明当前服务器角色是Follower -- 3.LEADING:领导者状态。表明当前服务器角色是Leader -- 4.OBSERVING:观察者状态。表明当前服务器角色是Observer +- LOOKING:寻找Leader状态。当服务器处于该状态时,它会认为当前集群中没有 Leader,因此需要进入 Leader 选举状态 +- FOLLOWING:跟随者状态。表明当前服务器角色是Follower +- LEADING:领导者状态。表明当前服务器角色是Leader +- OBSERVING:观察者状态。表明当前服务器角色是Observer + + + +## 运行模式 + +Zookeeper 有三种运行模式:单机模式、伪集群模式和集群模式。 + +- **单机模式**:这种模式一般适用于开发测试环境,一方面我们没有那么多机器资源,另外就是平时的开发调试并不需要极好的稳定性。 +- **集群模式**:一个 ZooKeeper 集群通常由一组机器组成,一般 3 台以上就可以组成一个可用的 ZooKeeper 集群了。组成 ZooKeeper 集群的每台机器都会在内存中维护当前的服务器状态,并且每台机器之间都会互相保持通信。 +- **伪集群模式**:这是一种特殊的集群模式,即集群的所有服务器都部署在一台机器上。当你手头上有一台比较好的机器,如果作为单机模式进行部署,就会浪费资源,这种情况下,ZooKeeper 允许你在一台机器上通过启动不同的端口来启动多个 ZooKeeper 服务实例,以此来以集群的特性来对外服务。 diff --git a/images/Middleware/Zookeeper中的角色.jpg b/images/Middleware/Zookeeper中的角色.jpg new file mode 100644 index 0000000000000000000000000000000000000000..50ede629bb853183edb9f32c98665f12b07c15f7 GIT binary patch literal 15038 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 U2IcYQy8oCOvGm(gm%>*703{7eB>(^b literal 0 HcmV?d00001 diff --git a/images/Middleware/Zookeeper的数据模型.jpg b/images/Middleware/Zookeeper的数据模型.jpg new file mode 100644 index 0000000000000000000000000000000000000000..511fdf99b7492da5d4c2955140e52f1d1561157b GIT binary patch literal 19860 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 wMn(%E&83uULFG}_ztGz84LR)t<+)8TF