导语 | 为了进一步满足腾讯云 Elasticsearch 客户对服务稳定性、集群高可用性等容灾能力的要求。腾讯云 ES 产品提供了跨可用区部署的解决方案,本文将为大家介绍实现原理与实践案例。文章作者:吴荣,腾讯云 Elasticsearch 研发工程师。

引言

目前腾讯云 ES 集群可以支持双可用区及三可用区的集群部署,且支持单可用区平滑升级到多可用区集群。当一个可用区出现故障时,剩余可用区依然能够保障集群的稳定性、服务的可用性和数据的完整性。

一、数据节点

当客户选择了跨多可用区的集群架构部署时,集群的数据节点必须是多可用区的倍数,如客户选择的是三可用区部署,则数据节点个数应为 3,6,9,12 等,以此类推。

图1 腾讯云ES控制台购买三可用区集群

如上图 1 所示,我们在上海地域选择了三可用区集群的部署,数据节点数量选择 6 个。ES 会自动将 6 个数据节点均衡得分布在三个可用区中,并对每个节点标记上可用区属性,从而可以通过可用区感知功能将索引的分片自动分布在多可用区中,集群中节点的具体分布情况如图 2 所示。

图2 三可用区集群架构

从图 2 中我们可以看到,腾讯云 ES 提供了 VPC 内的负载均衡功能,客户可以直接通过 VIP 连接集群,由于 VIP 下绑定了集群内部的所有数据节点,因此客户所有的读写请求会均衡的分布到各个数据节点上。

另外该 VIP 还自带健康检查功能,如一个周期内多次检测到某节点未响应,健康检查功能则会暂时从该 VIP 的路由列表中摘除该异常节点,直到节点恢复正常。这样就保障了当一个节点宕机或者某一个可用区不可用的情况下,客户端依然能够无感知的请求集群。

二、专用主节点

为了保障集群的稳定性和高可用性,当选择多可用区集群架构部署时,需强制设置三个专用主节点。其中专用主节点的分布机制如下:

  • 当选择三可用区部署时,会在每个可用区部署一个专用主节点,从而保障任何一个可用区不可用时,依然能够选出 Master 节点;

  • 当选择双可用区部署时,为了避免出现一个可用区上分布两个专用主节点且出现“该可用区不可用”导致选不出 Master 节点的情况,腾讯云 ES 会选择一个隐藏可用区用来专门部署专用主节点,如下图 3 所示。

图3  双可用区集群专用主节点分布原理

三、索引副本分片

为了保障在一个可用区不可用的情况下,依然能够保证数据的完整性和服务的可用性,索引分片至少设置 1 副本。如果选择三可用区部署,当两个可用区不可用时,希望剩下的可用区依然能够完整提供服务,则索引的副本个数至少为 2 个。

四、ES多可用区架构部署实现机制

腾讯云 ES 多可用区集群部署依赖于 ES 提供的节点属性感知 awareness [1] 功能。通过对每个节点进行属性标记,即对节点进行可用区的属性标记:"node.attr.zone_id:shanghai-3"。

该属性配置在 elasticsearch.yml 文件中(也可以选择在启动节点时进行参数指定:"./bin/elasticsearch -Enode.attr.zone_id=shanghai-3"),设置完节点属性后,腾讯云 ES 集群通过设置如下参数:"cluster.routing.allocation.awareness.attributes=zone_id" 来让集群在分片分配中使用节点属性执行分配策略。

这样 ES 就可以通过可用区 zone_id 属性将节点进行分类。且将索引的主副本分片分布到属性 zone_id 不同的节点上。

例如,我们创建了一个具有 4 个数据节点的双可用区的集群,分别部署在上海 3 区和上海 4 区。那么上海 3 区的节点属性为: "node.attr.zone_id:shanghai-3",上海 4 区的节点属性为: "node.attr.zone_id:shanghai-4"。

当我们创建一个索引,该索引有 5 个主分片和 1 个副本分片,那么所有的主分片和对应的副本分片都会均衡的分布在上海 3 区和 4 区上,而不会出现主分片和副本分片同时分布在上海 3 区或者上海 4 区的情况。

需要注意的是:这时候如果有一个可用区挂掉,如上海 3 区整体不可用,ES 会将上海 3 区的主副本分片在上海 4 区进行重建。即这时候会出现主副本分片同时分配在同一个可用区的情况。

为了防止某一个可用区不可用,导致另一个可用区磁盘容量被重建的分片大量耗尽的情况,腾讯云 ES 启用了分片强制感知 (force awareness) 的功能。

腾讯云 ES 通知设置如下参数:cluster.routing.allocation.awareness.force.zone_id.values=shanghai-3,shanghai-4,从而保证了在一个可用区不可用时,不会使得剩余的可用区磁盘资源不足的情况。

五、单可用区平滑升级多可用区

前文图 1 演示了在腾讯云 ES 控制台购买多可用区集群的操作步骤。对于存量的单可用区集群,腾讯云 ES 同样支持平滑升级到多可用区的部署架构。具体操作如下图 4 所示:

图4 腾讯云ES控制台升级多可用区

这里需要注意以下几点:

  • 当选择了升级到多可用区时,只能设置新的可用区信息,不可更改节点配置和磁盘容量;

  • 当升级到双可用区时,数据节点数量自动翻倍;当升级到三可用区时,数据节点数量自动乘三倍;当从双可用区升级到三可用区时,数据节点数量自动乘 1.5 倍;

  • 如果原集群未设置专用主节点,则会强制选择设置 3 个专用主节点;如果原集群设置了专用主节点,则节点数量不变,腾讯云 ES 会自动完成专用主节点在各可用区之间的调度和分布。

单可用区升级到多可用区的变配流程最大的难点和挑战在于专用主节点的协调上。下面重点介绍腾讯云 ES 在处理可用区升级方案中专用主节点的实现机制:

为了下图说明方便,我们先对各类型节点使用不同颜色进行标记:

普通节点

普通节点:包含 master、data、ingest 等所有属性,节点上存储索引数据,使用蓝色标记。

专用主节点

专用主节点:只包含 master 属性,在集群中属于专用主节点,不存储索引数据,只负责管理集群和存储集群的元数据信息,使用粉红色标记。

数据节点

数据节点:只包含 data、ingest 属性,一般用于具有专用主节点的场景,该节点上存储索引数据,通常也被称为专有数据节点,使用绿色标记。

单可用区升级到多可用区场景分析:

(1)原单可用区集群没有专用主节点:

如果原单可用区集群没有设置专用主节点,这种情况下无论是升级到双可用区还是三可用区都是比较简单的。

图5 原单可⽤区⽆专⽤主节点升级到多可⽤区流程示意图

升级变配流程如上图 5 所示:

  • 在新增的可用区中申请创建并加入普通节点以及在每个可用区中各加入一个专用主节点(如果是升级到双可用区,则会在隐藏可用区加入一个专用主节点);

  • 修改各可用区中普通节点的属性为专有数据节点,即上图中将蓝色变更为绿色。

在流程的第 2 步修改节点属性时,每重启一个节点,min_master_node 都会重新计算并设定,避免在中间状态发生脑裂。

(2)原单可用区集群已设置专用主节点:

如果原单可用区集群中已经设置了 3 个专用主节点,那么按照最终的状态来看,应该是每个可用区都会均衡分布一个专用主节点。

自然想到的流程是先在新增的可用区中各加入一个专用主节点,然后再将原可用区中的多余两个专用主节点下线即可。如下图 6 所示:

图6 原单可用区由专用主节点升级到多可用区流程示意图

具体流程步骤如下:

  • 在新增的可用区中加入数据节点及一个专用主节点(如果是升级到双可用区,则只需要在隐藏可用区申请加入一个专用主节点即可);

  • 将原单可用区中多出的两个专用主节点下线。

但是这种升级变配流程存在一个隐藏的集群不可用风险。如图 7 所示:

图7 原单可用区整体不可用示意图

从图 6 的第一个流程上我们再结合图 7 可以看到,如果在中间状态原单可用区突然发生不可用,那便会出现剩余的可用区中只剩下 2 个专用主节点,这时候从 5 个专主变成了 2 个专用主节点,便会出现选不出 Master 节点的情况,从而使得集群整体不可用,违背了跨可用区的容灾初衷。

为了规避上面分析的这种异常风险,我们对图 6 的第 1 个流程的中间状态做了优化,如下图 8 所示:

具体流程如下:

  • 在新增的可用区中加入数据节点及两个专用主节点(如果是升级到双可用区,则只需要在隐藏可用区申请加入两个专用主节点即可);

  • 将原单可用区中多出的两个专用主节点和新增的可用区中多出的一个专用主节点下线。

这样便可保证即使在流程一的中间状态下任何一个可用区不可用,依然不影响剩余专用主节点选出 Master 节点。从而保障了集群的高可用性。

六、结语

本篇文章我们详细介绍和分析了腾讯云 ES 集群多可用区容灾的实现原理和操作实践。并重点介绍了单可用区集群升级到多可用区的几种场景及具体流程细节,希望能够帮助到腾讯云 ES 的客户朋友们。

参考资料:

[1] 节点属性感知awareness功能:

https://www.elastic.co/guide/en/elasticsearch/reference/master/modules-cluster.html#shard-allocation-awareness

大会预告

12月20日15:30-17:20,由腾讯主办的 2020 Techo Park 大会大数据分论坛《开源开放,下一代云端数据仓库》相约 751D·PARK 北京时尚设计广场。

与您深入探索数据仓库的起源、演进与未来,期待与您共同探讨数据仓库的多元数据本质,点击 “阅读原文” 或扫描下方海报二维码即可预约报名~

腾讯云Elasticsearch集群多可用区容灾实现原理及最佳实践相关推荐

  1. 玩转ECS第6讲 | 弹性计算Region化部署和跨可用区容灾介绍

    简介:本次分享由阿里云弹性计算架构负责人李钟(谢顿)为大家介绍阿里云region化部署和跨可用区容灾的实践经验,说明多Region部署场景中使用阿里云弹性计算的最佳实践,并结合弹性计算的实践经验探讨如 ...

  2. 玩转ECS第6讲 | 弹性计算 Region 化部署和跨可用区容灾介绍

    本次分享主要围绕以下三个方面: 一.Region和可用区介绍 二.Endpoints和资源作用域 三.多可用区容灾和Region化部署 弹性计算Region化部署和跨可用区容灾本身是非常复杂的课题,本 ...

  3. 自动化脚本腾讯云配置集群(三)批量修改host

    在搭建hadoop或者spark集群之前,可能需要对集群中节点的别名重新命名,方便集群的管理.例如hosts文件中,将节点的IP对应成master和slave1等.如下 # hosts 127.0.0 ...

  4. Karmada 千级容器集群:工商银行业务容灾管理设计利器

    文章目录 前言 一.工行业务背景 1.1.工行云计算架构组成 1.2.工行云平台技术栈 1.3.工行金融云成效 1.3.1.入云规模同业最大 1.3.2.业务如云场景广 1.4.容灾及高可用保障 1. ...

  5. 腾讯云AI应用产品总监王磊:AI 在传统产业的最佳实践

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 背景:5月23-24日,以"焕启"为主题的腾讯"云+未来"峰会在广州召开,广东省各级政府机构领导.海 ...

  6. 阿里云崩“出圈”了!保护业务还得加一道同云跨可用区容灾!

    2022年12月18日,上午10点47分,阿里云的香港部分服务出现故障,导致多个香港及澳门站点受到影响. 随后阿里云方面发布公告表示,阿里云官网 12 月 18 日下午更新处理进展称,经排查,阿里云香 ...

  7. 腾讯云AI应用产品总监王磊:AI 在传统产业的最佳实践 1

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 背景:5月23-24日,以"焕启"为主题的腾讯"云+未来"峰会在广州召开,广东省各级政府机构领导.海 ...

  8. 让数据库无惧灾难,华为云GaussDB同城双集群高可用方案正式发布!

    摘要:在华为全联接2021期间,华为云GaussDB(for openGauss)正式推出重大内核新特性--同城双集群高可用方案,提供金融级高可用服务,支持RPO=0 .RTO<60s的同城双集 ...

  9. 实战 es6_腾讯云 Elasticsearch 实战篇(二十二) ES6.8权限使用配置

    前言| 在前面的章节中我们讲了开源架构ELK.腾讯云Elasticsearch产品系列.我们也知道了,在构建腾讯云ES集群的时候,我们选择的6.8.2白金版具备充分的安全的机制来保证数据和访问的安全. ...

最新文章

  1. Intellij IDEA 高效使用教程
  2. Git 、CVS、SVN比较
  3. 2016 Multi-University Training Contest 4 Bubble Sort(树状数组模板)
  4. 数据结构第二版之(课后题)BF算法病毒感染检测
  5. 区块链学堂(7):Geth 搭建私有网络-实战
  6. java方法criterion_java – JPA Criteria谓词条件
  7. palapaweb怎样开启服务_为什么说微服务,要从前后端分离开始?一文带你揭秘深入微服务...
  8. 35载再忆华罗庚精神:我们应培养怎样的数学大师?​
  9. 第十六章:springboot 整合logback日志
  10. [Android Memory] Android系统中查看某个应用当前流量的方法
  11. jetty9配置指南及jetty9部署jenkins
  12. python反编译学习之字节码详解
  13. CAD图纸、影像地形、倾斜摄影、矢量数据统统搬入图新地球,一键浏览分析
  14. PageHelper.startPage()动态排序问题
  15. 基于wakeup_source的linux内核睡眠机制
  16. 哥伦比亚大学 自然语言处理 公开课 授课讲稿 翻译(四)
  17. Nvme驱动补丁 解决Usb3.0/3.1驱动和磁盘控制器WIN7蓝屏方案
  18. AT8637S(PHS/EN输入接口单通道0.8A低压H桥IC)
  19. ArcGIS教程:ArcGIS中的图表是什么
  20. button按钮居中

热门文章

  1. 仰望银河,深蓝瑶光,极星揽月,武林至尊
  2. 电脑怎么录屏幕视频带声音?电脑录屏教程介绍
  3. proftpd mysql_使用MySQL认证ProFTPD用户
  4. 广西行政村数据shp_全国 shp 矢量数据汇总(四):全国行政区划基础矢量数据(精确到乡镇级别)...
  5. Linux Ubuntu 鼠标变为十字架锁死解决办法
  6. iOS使用CoreLocation实现指南针
  7. keypair java_Java KeyPairGenerator generateKeyPair()用法及代码示例
  8. python 横坐标只显示部分数据_解决echarts中横坐标值显示不全(自动隐藏)问题
  9. python pdf提取数据_python从PDF中提取数据的示例
  10. cassandra随机获取数据_国内哪些互联网公司使用了 Cassandra 数据库?