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

一、简介

1.1 背景和目的

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

1.2使用范围

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

二、es双活部署

2.1 主备架构

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

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

2.2  使用前提

  1. 在follower集群设置远程集群信息指向leader集群。
  2. Leader、follower 集群都启用白金license。
  3. 主备Elasticsearch集群统一为6..5版本或者统一为7.17.9版本。
  4. Elasticsearch 6.8.5版本中,leader index 必须开启 soft_deletes。
  5. CCR同步机制是通过Lucene底层的sofe_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操作

2.3 操作步骤

2.3.1 follower集群创建leader集群连接

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

CCR可动态调整的参数

参数说明

ccr.indices.recovery.max_bytes_per_sec

限制每个节点的出入流量,默认40mb/s

ccr.indices.recovery.max_concurrent_file_chunks

控制follower索引初始化恢复可并行发送的文件块请求数,默认是5,最大为10

ccr.indices.recovery.chunk_size

控制follower索引文件传输的块大小,默认1mb

ccr.indices.recovery.recovery_activity_timeout

控制leader集群打开内存资源接收follower集群恢复请求的超时时间,默认60s

ccr.indices.recovery.internal_action_timeout

控制ccr远程恢复过程中单个网络请求的超时时间,默认60s

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集群地址

2.3.2 查看集群连接状态

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

curl -X GET ${username}:${password}

"https://${follower_url}:9200/_remote/info?pretty"

参数解释:

${username}:follower集群用户

${password}:follower集群密码

${

follower_url}:follower集群地址

2.3.3 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_前缀创建

2.3.4 添加别名(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}: 需要添加的别名

三、es ccr监控方案

3.1 CCR monitor

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

四、 es索引激活

4.1 架构说明

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

4.1 删除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名字

 4.2 将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索引

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值