暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

新智锦绣 2025-01-03
590

点击蓝字关注我们


1

 简介


1.1 背景和目的


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


1.2 使用范围


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


2

 es 双活部署


2.1  主备架构


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



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



2.2  使用前提


  • 在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操作


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,可通过如下参数进行调整,详细信息可参考官方文档(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集群地址


    2.3.2 查看集群连接状态

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

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

      参数解释:

      ${username}:follower集群用户

      ${password}:follower集群密码

      ${follower_url}: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}: 需要添加的别名


            3

             es ccr 监控方案


            CCR monitor

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



            4

             es 索引激活


            4.1 架构说明


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


            4.2 删除 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.3 将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索引


                关于公司

                感谢您关注新智锦绣科技(北京)有限公司!作为 Elastic 的 Elite 合作伙伴及 EnterpriseDB 在国内的唯一代理和服务合作伙伴,我们始终致力于技术创新和优质服务,帮助企业客户实现数据平台的高效构建与智能化管理。无论您是关注 Elastic 生态系统,还是需要 EnterpriseDB 的支持,我们都将为您提供专业的技术支持和量身定制的解决方案。


                欢迎关注我们,获取更多技术资讯和数字化转型方案,共创美好未来!

                Elastic 微信群

                EDB 微信群


                发现“分享”“赞”了吗,戳我看看吧



                文章转载自新智锦绣,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                评论