问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Elasticsearch 双活部署:高可用性解决方案

创作时间:
作者:
@小白创作中心

Elasticsearch 双活部署:高可用性解决方案

引用
1
来源
1.
https://www.modb.pro/db/1875006922689101824

简介

背景和目的

通过Elasticsearch集群双活的部署方式,提高Elasticsearch集群的可用性和容错性,保证数据的一致性和可靠性,降低业务中断的风险,特制订本文档。

使用范围

本文档适用于所有高可用需求的Elasticsearch集群。

Elasticsearch 双活部署

主备架构

本方案采用CCR进行主备切换,CCR即跨集群复制,是一种能够实现数据迁移、数据备份、降低访问延迟的高可用解决方案。跨集群复制采用的是一个主备的架构模型。在主集群中创建一系列leader索引,在备集群中通过主动Pull方式复制数据到follower索引中,且follower索引为只读索引。

业务写入主集群中,同时索引进行CCR复制到备集群。

使用前提

  • 在follower集群设置远程集群信息指向leader集群。
  • Leader、follower 集群都启用白金license。
  • 主备Elasticsearch集群统一为6.5版本或者统一为7.17.9版本。
  • Elasticsearch 6.8.5版本中,leader index 必须开启 soft_deletes。
  • CCR同步机制是通过Lucene底层的soft_delete来实现的。因此需要确保leader索引是开启soft_delete属性的,7.0版本之后索引的soft_delete属性是默认开启的,7.0版本之前是默认关闭的。因此如果是使用如6.8.2等较早版本作为CCR的Leader集群,则需要在创建索引时手动开启soft_delete属性,或者在索引模版中进行开启。另外soft_delete属性为static setting,不支持通过index/_settings进行动态修改,如果需要对存量的索引开启soft_delete,则必须进行reindex操作

操作步骤

follower集群创建leader集群连接

follower集群需要与leader集群建立连接,并对follower索引进行初始化,follower索引只有在执行完初始化工作后才能接受查询和数据同步操作。follower的初始化可以理解为是leader索引的全量同步,即 “远程恢复过程”。该过程是通过全量拷贝leader索引主分片上的数据到follower集群上进行恢复。因此远程恢复是一个网络IO密集型的操作,主要工作就是将leader索引上的所有的Lucene的segment文件全量拷贝到follower集群上,然后进行恢复,有点类似于snapshot的恢复机制。默认情况下,一次Recovery请求会同时拉取5个1MB的segment文件块,且默认速度为40mb/s,可通过如下参数进行调整,详细信息可参考官方文档(https://www.elastic.co/guide/en/elasticsearch/reference/6.8/ccr-settings.html)

curl -u${username}:${password}-X PUT  "http://${follower_url}:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{
  "persistent": {
    "cluster": {
      "remote": {
        "leader_cluster": {
          "seeds": [
            "${leader_url}:9300"
          ]
        }
      }
    }
  }
}'

参数解释:

  • ${username}:follower集群用户
  • ${password}:follower集群密码
  • ${follower_url}:follower集群地址
  • ${leader_url}:leader集群地址
查看集群连接状态

用于观察主备集群连接是否正常

curl -X GET ${username}:${password}
"https://${follower_url}:9200/_remote/info?pretty"

参数解释:

  • ${username}:follower集群用户
  • ${password}:follower集群密码
  • ${follower_url}:follower集群地址
CCR 数据同步

CCR的数据同步是分片维度的。即当一个follower索引创建时,follower索引上的每个主分片会定期拉取leader索引分片的更新数据。也就是说,follower索引的主分片个数必须要和leader索引的主分片个数保持一致。这样能够保障在leader索引上的所有写操作都能够被复制到follower索引中,这些写操作包括create、update、delete文档等

采用两种模式进行索引同步:一对一模式和自动匹配模式(Auto-follow patterns)。

  • 通过一对一模式将leader集群现有索引进行同步。
curl -u${username}:${password}   
-X PUT "http://${follower_url}:9200/${follower_index}/_ccr/follow?pretty"
-H 'Content-Type: application/json' -d'
{
  "remote_cluster" : "leader_cluster",
  "leader_index" : "${leader_index}",
}'

参数解释:

  • ${username}:follower集群用户

  • ${password}:follower集群密码

  • ${follower_url}:follower集群地址

  • ${leader_index}: leader集群需要同步的索引

  • 通过自动匹配模式将leader集群日增索引进行同步。

curl -u${username}:${password}   
-X PUT "http://${follower_url}:9200/_ccr/auto_follow/${pattern_name}?pretty" -H 'Content-Type: application/json' -d'
{
  "remote_cluster" : "leader_cluster",
  "leader_index_patterns" : ["autoindex*","autotest*"],
   "follow_index_pattern" : "copy_{{leader_index}}",
}'

参数解释:

  • ${username}:follower集群用户
  • ${password}:follower集群密码
  • ${follower_url}:follower集群地址
  • ${pattern_name}: 创建规则名
  • leader_index_patterns: leader集群日增索引通配符名称匹配
  • follow_index_pattern:follower集群日增同步索引以copy_前缀创建
添加别名(6.8.5)

因6.8.5版本缺陷别名不会通过CCR同步,需批量给索引添加别名

curl -u${username}:${password}   
-X PUT "http://${follower_url}:9200/${follower_index}/_alias/${alias}

参数解释:

  • ${username}:follower集群用户
  • ${password}:follower集群密码
  • ${follower_url}:follower集群地址
  • ${follower_index}: follower索引
  • ${alias}: 需要添加的别名

Elasticsearch CCR 监控方案

CCR monitor

通过countAPI实时获取leader索引与follower索引的文档总数,再做文档一致性对比以监控CCR集群索引文档同步情况。

Elasticsearch 索引激活

架构说明

当主集群不可用时,通过将follower集群索引激活,保证业务正常写入备集群来实现Elasticsearch集群主备切换

删除 follower 集群自动匹配模式规则

curl -u${username}:${password}-X DELETE   
"http://${follower_url}:9200/_ccr/auto_follow/${pattern_name}"

参数解释:

  • ${username}:follower集群用户
  • ${password}:follower集群密码
  • ${follower_url}:follower集群地址
  • ${pattern_name}:需要删除的auto-pattern名字

将follower索引切换为普通索引

# 暂停follow
curl -u${username}:${password}-X POST   
"http://${follower_url}:9200/${follower_index}/_ccr/pause_follow"
# close索引
curl -u${username}:${password}-X POST  "http://${follower_url}:9200/
${follower_index}/_close"
# unfollow   
curl -u${username}:${password}-X POST  "http://${follower_url}:9200/
${follower_index}/_ccr/unfollow"
# open索引
curl -u${username}:${password}-X POST  "http://${follower_url}:9200/
${follower_index}/_open"

参数解释:

  • ${username}:follower集群用户
  • ${password}:follower集群密码
  • ${follower_url}:follower集群地址
  • ${follower_index}:需要操作的follower索引
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号