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

2023-11-10 16:18

本文主要是介绍ZooKeeper学习之配置【7】ensemble配置,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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

[b]Majority Rules[/b]
当一个ensemble有足够的Zookeeper server时,便能够开始处理请求,可以把这些server集合称为一个quorum。当然,永远不会想要两个不相交(disjoint)的server集合来处理请求,否则会发生脑裂(split brain)的情况。可通过要求所有的quorum至少拥有一个majority of servers来避免脑裂问题(注意:只有一半的server不能组成一个majority,必须拥有总数量一半以上的server才能获得一个majority)。
当我们使用多台server来建立ensemble时,默认使用了majority quorum。ZooKeeper自动进行检测到配置文件中存在多个server,那么决定应该运行replicate模式。

[b]配置Quorums[/b]
如果一个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还存活着,即使其他数据挂掉也没关系。

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

这篇关于ZooKeeper学习之配置【7】ensemble配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/383814

相关文章

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤

《SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤》本文主要介绍了SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤,文中通过示例代码介绍的非常详... 目录 目标 步骤 1:确保 ProxySQL 和 mysql 主从同步已正确配置ProxySQL 的

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

VScode连接远程Linux服务器环境配置图文教程

《VScode连接远程Linux服务器环境配置图文教程》:本文主要介绍如何安装和配置VSCode,包括安装步骤、环境配置(如汉化包、远程SSH连接)、语言包安装(如C/C++插件)等,文中给出了详... 目录一、安装vscode二、环境配置1.中文汉化包2.安装remote-ssh,用于远程连接2.1安装2

Redis多种内存淘汰策略及配置技巧分享

《Redis多种内存淘汰策略及配置技巧分享》本文介绍了Redis内存满时的淘汰机制,包括内存淘汰机制的概念,Redis提供的8种淘汰策略(如noeviction、volatile-lru等)及其适用场... 目录前言一、什么是 Redis 的内存淘汰机制?二、Redis 内存淘汰策略1. pythonnoe

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

windos server2022里的DFS配置的实现

《windosserver2022里的DFS配置的实现》DFS是WindowsServer操作系统提供的一种功能,用于在多台服务器上集中管理共享文件夹和文件的分布式存储解决方案,本文就来介绍一下wi... 目录什么是DFS?优势:应用场景:DFS配置步骤什么是DFS?DFS指的是分布式文件系统(Distr

关于Maven中pom.xml文件配置详解

《关于Maven中pom.xml文件配置详解》pom.xml是Maven项目的核心配置文件,它描述了项目的结构、依赖关系、构建配置等信息,通过合理配置pom.xml,可以提高项目的可维护性和构建效率... 目录1. POM文件的基本结构1.1 项目基本信息2. 项目属性2.1 引用属性3. 项目依赖4. 构

龙蜥操作系统Anolis OS-23.x安装配置图解教程(保姆级)

《龙蜥操作系统AnolisOS-23.x安装配置图解教程(保姆级)》:本文主要介绍了安装和配置AnolisOS23.2系统,包括分区、软件选择、设置root密码、网络配置、主机名设置和禁用SELinux的步骤,详细内容请阅读本文,希望能对你有所帮助... ‌AnolisOS‌是由阿里云推出的开源操作系统,旨