`
邢邢色色
  • 浏览: 229919 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

ZooKeeper学习之配置【7】ensemble配置

阅读更多

quorum这个概念深深嵌入了ZooKeeper的设计中,尤其是当处理请求和在replicate模式中进行选举leader时尤为相关。如果ZooKeeper的各个server的quorum起来(up)时,ensemble才能继续(make progress)。


Majority Rules

当一个ensemble有足够的Zookeeper server时,便能够开始处理请求,可以把这些server集合称为一个quorum。当然,永远不会想要两个不相交(disjoint)的server集合来处理请求,否则会发生脑裂(split brain)的情况。可通过要求所有的quorum至少拥有一个majority of servers来避免脑裂问题(注意:只有一半的server不能组成一个majority,必须拥有总数量一半以上的server才能获得一个majority)。

当我们使用多台server来建立ensemble时,默认使用了majority quorum。ZooKeeper自动进行检测到配置文件中存在多个server,那么决定应该运行replicate模式。

 

配置Quorums

如果一个quorum是dissolve的,并在这个ensemble又有另一个quorum,那么这两个quorum必须至少有一个server是相交的(intersect)。Majority quorum明显是满足这个相交(intersection)条件的。通常,quorum不一定是majority的,ZooKeeper允许更灵活的配置quorum。一种实践模式就是把server分成不相交的集合,并给这些server分配权重(weight)。为了在这种模式中组成一个quorum,我们需要获得各个group的大多数投票(a majority of votes),例如,比如我们有3个组,每个组有3台server,每个server的权重是1。为了组成一个quorum,我们需要4台server:从一个组选2台server,再从另一个组选2台,通常归结为如下数学公式。如果有G个组,我们需要一个server的子集G',满足|Gʹ | > |G|/2。另外,G'的每一个成员g,需要g的一个子集g',g'组成的server的权重和至少为g的权重和的一半,例如Wʹ > W/2。

 

下面的配置创建了一个组:
group.x=n[:n]

 

创建了一个层次化的quorum结构。x是一个组的id,右边的部分是对应的server id,以冒号分隔。注意各个组必须是不相交的,且组成ensemble的各个server必须出现在某一个组,只能出现1次。

 

下面是一个例子,9台server组成了3个不同的组:
group.1=1:2:3
group.2=4:5:6
group.3=7:8:9

 

在这个例子中,所有的server都有相同的权重,为了组成一个majority quorum,至少需要5台server来组成一个quorum。

 

当进行跨数据中心部署这样的配置有很多好处。例如,一个分组代表一个数据中心的所有节点,如果一个数据中心挂了,ZooKeeper不受影响。

 

一种部署方式可以避免在1个数据中心挂掉后,不影响整体服务,在两个数据中心分别部署3台server,另一个数据中心部署一台server。如果任何一个data center不可用,另外2个可以组成一个quorum。只要有任意4台server就可以组成quorum。但是存在2个缺点:

 

第一个缺点是server的数量在各个数据中心间不是均衡的。第二个是一旦一个数据中心不可用,之后如果再有其他数据中心的server挂掉就会影响整体可用性。如果只有2个数据中心可用,我们可以使用权重来表达优先级。如果我们给其中一个server赋予更高的权重,那么在一个数据中心挂掉的情况下可以保证整体服务可用。例如有2个数据中心,每个有3台server,分在一个组里:

group.1=1:2:3:4:5:6

 

因为所有的server默认有相同的权重,则quorum只要有4台机器服务就可以起来。这意味着如果一个数据中心挂掉,就无法组成quorum了。

使用如下配置来给server设置权限:
weight.x=n

 

这是跟分组设置配套使用的,当组成quorum时,分配权重n,这是用来投票的。ZooKeeper的一些行为需要进行投票,比如选举leader和atomic broadcast协议。默认权重为1。如果设置了分组但没有设置权重,那么所有的server的权重都为1。

 

我们有一个数据中心,称为D1,想要在即使另一个数据中心挂掉时也能正常工作。我们给D1的server更大的权重,这样可更容易的跟其他server组成quorum。

 

假设server 1,2,3在D1,下面给server 1更大的权重:
weight.1=2

 

这样,我们一共有7票,只需要4票就可以组成一个quorum了。所以如果D1还存活着,即使其他数据挂掉也没关系。

 

以上只是一部分例子,你可以更灵活的使用各种不同的权重和分组规划来构建自己拓扑。

分享到:
评论

相关推荐

    第8章 ZooKeeper组件安装配置.pptx

    - **ZooKeeper配置文件(zoo.cfg)**:这是ZooKeeper的主要配置文件,包含服务器角色、数据目录、日志目录、会话超时时间等关键设置。 - **集群配置**:在多服务器环境中,需要配置ensemble(集群)的成员列表,确保...

    zookeeper3八本

    5. **Zookeeper配置**:`zoo.cfg`是Zookeeper的主要配置文件,其中包含服务器模式(standalone或ensemble)、端口设置(如clientPort)、集群配置(server.1=ip:port:port)等关键参数。对于Windows,需要注意路径...

    zookeeper-windows-3.4.6

    此时,就需要对Zookeeper的集群配置有深入理解,包括ensemble(集群)的设置、quorum(多数派)的计算以及数据同步策略等。 总结,Zookeeper在Windows 3.4.6版本下为Dubbo开发提供了强大的支持,它的易用性和稳定性...

    hadoop+zookeeper+hbase集群搭建配置说明

    配置Zookeeper时,我们需要设定集群的ensemble(集群节点集合),并配置每个节点的客户端连接端口、选举端口和数据存储路径。 3. HBase:HBase是基于Hadoop的分布式列式数据库,能够提供实时读写访问,适用于大规模...

    zookeeper-3.4.11安装包

    ZooKeeper有两种运行模式——独立模式(standalone)和集群模式(ensemble)。在独立模式下,ZooKeeper仅由一个服务器提供服务;在集群模式下,多个ZooKeeper服务器共同协作,提供高可用性和容错性。 **客户端与...

    zookeeper压缩包

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它是集群的管理者,监视着集群中各个节点的状态根据节点提交的...因此,深入学习和实践Zookeeper对于提升分布式系统的稳定性和可扩展性具有很大的价值。

    zookeeper-3.4.14.zip

    为了开始使用 ZooKeeper,你需要在 `conf/zoo.cfg` 配置文件中设置数据目录(dataDir),并根据集群模式(standalone 或 ensemble)配置相应的服务器列表。然后,通过 `bin/zkServer.sh` 启动服务,使用 `bin/zkCli....

    apache-zookeeper-3.5.6-bin.tar

    安装 ZooKeeper 3.5.6 需要解压 `apache-zookeeper-3.5.6-bin.tar.gz`,然后配置 `conf/zoo.cfg` 文件,设置服务器节点的ID、ensemble的连接字符串(connectString)和其他配置参数。例如,`dataDir` 指定保存 ...

    zookeeper-3.4.6.rar

    Zookeeper采用主从复制的架构,由多个服务器节点(称为ZooKeeper Ensemble)组成。这些节点通过Paxos或ZAB(Zookeeper Atomic Broadcast)协议保证数据的一致性。每个Zookeeper实例既是客户端服务器,也是参与复制的...

    apache-zookeeper-3.6.2-bin

    - 优化Zookeeper配置,例如调整数据缓存大小、心跳间隔等,以适应不同的负载需求。 10. **应用案例**: - ZooKeeper广泛应用于分布式数据库、分布式计算框架Hadoop、消息中间件Kafka、分布式锁、服务发现等场景。...

    zookeeper windowms

    例如,设置集群模式(ensemble)时,需要配置`server.`条目来指定其他节点的IP和端口;对于高可用性,可以启用 Leader-Follower(ZAB协议)或Quorum模式。此外,`tickTime`定义了心跳间隔,`minSessionTimeout`和`...

    zookeeper完整学习笔记

    Zookeeper 提供多种服务,如命名服务、配置管理、集群管理、选举算法、锁定和同步服务等。它维护着一个高度可靠的分布式数据注册表,即使部分节点失效,也能保证数据的可用性。Zookeeper 的原子性和顺序性保证了数据...

    linux-ZooKeeper管理工具

    7. 高可用性:在生产环境中,通常会构建一个ZooKeeper ensemble,通过多台机器组成的集群来实现高可用性和容错性。当某台服务器出现故障时,其他服务器可以接管服务,保证系统的连续运行。 8. 故障恢复:如果遇到...

    zookeeper服务器管理手册-部署运维必备知识

    《Zookeeper服务器管理手册》是IT领域中针对分布式协调服务Zookeeper的一份详细指南,它涵盖了从基础到高级的各种操作和管理知识。...通过学习和实践,你可以更好地掌握Zookeeper的精髓,提升分布式系统的管理能力。

    apache-zookeeper-3.5.7-bin.tar.gz

    2. **配置**:修改conf/zoo.cfg配置文件,设置数据存储目录、集群模式(standalone或ensemble)、端口号等参数。 3. **命令行工具**:Zookeeper提供了一个名为`zkCli.sh`的命令行工具,可以用来操作Zookeeper,如...

    zookeeper-3.3.6.tar.gz

    3. **配置`conf/zoo.cfg`**: 这是Zookeeper的主要配置文件,需要设定数据目录(dataDir)、日志目录(dataLogDir)以及服务器模式(standalone或ensemble)等。 4. **初始化数据目录**: 创建`dataDir`中的myid文件...

    ZooKeeper 客户端的使用(二).

    本篇文章将深入探讨 ZooKeeper 客户端的使用,这是继上一篇文章后的第二部分,我们将继续学习如何与 ZooKeeper 交互以及利用其功能。 ZooKeeper 的客户端是连接到 ZooKeeper 服务器的接口,它提供了丰富的 API 供...

    zookeeper之分布式环境搭建.docx

    - **集群(Ensemble)**:ZooKeeper 通常运行在一个由多台服务器组成的集群中,这些服务器共同提供服务,以保证系统的高可用性和一致性。集群中的服务器数量通常是奇数,最常见的是 3、5 或 7 台服务器。 - **会话...

    zookeeper之节点基本操作.docx

    ### ZooKeeper之节点基本操作详解 #### 一、概述 ZooKeeper 是一款开源的分布式协调服务,由雅虎公司研发并开源,现已成为 Apache 软件基金会下的顶级项目。它主要解决分布式环境中常见的协调问题,如配置管理、...

Global site tag (gtag.js) - Google Analytics