文档

通过CCR跨集群复制解决跨集群容灾场景

如果您的Elasticsearch(简称ES)集群出现灾难性事件,例如,硬件故障、软件错误、数据中心故障、自然灾害或其他导致服务中断的情况,您可以通过跨集群复制CCR(Cross Cluster Replication)功能将容灾集群丢失数据恢复。

背景信息

CCR是开源ES在platinum版本中发布的一个商业特性。购买阿里云ES实例后,您无需额外付费,只需要简单配置,即可使用CCR功能。

CCR用于容灾恢复场景,对于分布在同VPC下不同可用区的ES集群,可以通过CCR进行数据备份。当其中一个集群(如远程集群)发生故障时,通过访问其他集群(本地集群)来获取故障集群的数据进行恢复,保证数据不丢失。

使用CCR功能,需要准备两种类型的集群。一个是远程集群,即提供源数据(Leader index)的集群;一个是本地集群,即订阅数据(Follower index)的集群。该功能为被动复制,即所有复制任务都是由本地集群执行。同时支持批量实时迁移数据,更多详情请参见Cross-cluster replication

使用限制

  • 新网络架构下的实例不支持与旧网络架构下的实例进行跨集群reindex、跨集群搜索、跨集群复制等实例互通操作。如果需要进行互通,请确保实例创建在同一网络架构下。

    说明
    • 2020年10月,阿里云Elasticsearch对网络架构进行了调整。2020年10月之前为旧网络架构,2020年10月及之后为新网络架构。

    • 对于华北3(张家口)和海外地域,由于网络架构调整时间不确定,因此需要提交工单,联系阿里云Elasticsearch技术支持,校验网络是否可以互通。

  • 在旧网络架构下,仅6.7.0及以上版本的单可用区的阿里云Elasticsearch实例支持跨集群复制功能。新网络架构下,只有版本限制(6.7.0及以上版本),没有可用区限制(单可用区和多可用区都支持)。

  • 阿里云Elasticsearch不支持与自建Elasticsearch进行跨集群复制。

操作流程

  1. 准备工作

    准备远程和本地集群,以及待迁移的索引。

  2. 步骤一:配置实例网络互通

    连通远程和本地集群的网络。

  3. 步骤二:添加远程集群

    在本地集群的Kibana控制台中,添加远程集群。

  4. 步骤三:配置跨集群复制

    在本地集群的Kibana控制台中,配置待迁移和迁移后的索引。

  5. 步骤四:验证数据备份结果

    在远程集群中插入数据,在本地集群中,验证数据是否备份成功。

准备工作

  1. 准备远程和本地Elasticsearch集群。

    具体操作,请参见创建阿里云Elasticsearch实例。要求两个实例为相同版本(6.7.0及以上),且在同一专有网络和虚拟交换机下。

    重要

    如果远程集群上已经上传了同义词文件,本地集群中也需要上传一致的同义词文件。

  2. 登录远程集群的Kibana控制台,在左侧导航栏,单击Dev Tools

    登录Kibana控制台的具体操作,请参见登录Kibana控制台

    说明

    本文以阿里云Elasticsearch 6.7.0版本为例,其他版本操作可能略有差别,请以实际界面为准。

  3. Console中执行如下命令,创建待迁移的索引。

    重要
    • 对于7.0及以下版本的Elasticsearch实例,在创建索引时,需要开启soft_deletes属性,否则会报错。您可以通过GET /<yourIndexName>/_settings?pretty命令,查看是否开启了soft_deletes属性。开启时,您可以在返回结果中看到soft_deletes属性的配置。

    • 如果您需要迁移已创建的索引,需要通过重建索引来开启soft_deletes属性。

    PUT myindex
    {
      "settings": {
        "index.soft_deletes.retention.operations": 1024,
        "index.soft_deletes.enabled": true
      }
    }
  4. 关闭待迁移的索引的物理复制功能。

    对于6.7.0版本的阿里云Elasticsearch实例,系统会默认为新建索引开启物理复制功能。使用CCR功能时,需要先关闭物理复制功能。

    1. 关闭索引。

      POST myindex/_close
    2. 更新索引settings,关闭物理复制功能。

      PUT myindex/_settings
      {
      "index.replication.type" : null
      }
    3. 打开索引。

      POST myindex/_open

步骤一:配置实例网络互通

参见通过配置实例网络互通使用跨集群搜索功能,在远程集群中添加需要进行网络互通的本地集群。最终配置如下。配置实例互通

步骤二:添加远程集群

  1. 登录本地集群的Kibana控制台。

  2. 在左侧导航栏,单击Management

  3. Elasticsearch区域中,单击Remote Clusters

  4. 单击Add a remote cluster

  5. Add remote cluster页面中,输入远程集群信息。

    Add remote cluster

    • Name:远程集群的名称,不可重复。

    • Seed nodes:需要配置为远程集群的节点的IP地址:9300。远程集群的节点的IP地址,可在远程集群的Kibana控制台中,使用GET /_cat/nodes?v命令获取。所配置的节点中必须包含主节点,建议您配置多个子节点,确保当主节点不可用时,可以继续使用跨集群复制功能。获取主节点IP地址

      说明

      由于CCR功能是Kibana通过数据节点之间的TCP端口(9300)访问数据节点IP的形式来进行网络互通,因此不支持HTTP端口(9200)访问。

  6. 单击Save

    保存后,系统会自动连接远程集群。连接成功后,显示Connected连接成功

步骤三:配置跨集群复制

  1. 在本地集群Kibana控制台的Management页面,单击Elasticsearch区域中的Cross Cluster Replication

  2. 单击Create a follower index

  3. Add follower index页面,配置跨集群复制信息。

    配置跨集群复制

    参数

    说明

    Remote cluster

    选择您在步骤二:添加远程集群中添加的集群。

    Leader index

    待迁移的索引。本文使用准备工作中创建的myindex索引。

    Follower index

    迁移数据生成的索引。索引名称不可重复。

  4. 单击Create

    创建成功后,索引状态显示为Active索引状态

步骤四:验证数据备份结果

  1. 在远程集群的Kibana控制台,执行如下命令,在远程集群中插入数据。

    POST myindex/_doc/
    {
      "name":"Jack",
      "age":40
    }
  2. 在本地集群的Kibana控制台,执行如下命令,验证数据是否迁移成功。

    GET myindex_follow/_search

    迁移成功后,返回如下结果。数据同步结果

    从以上结果可以看到,远程集群的Leader索引(myindex)中的数据,已通过CCR功能复制到了本地集群的Follower索引(myindex_follow)中。

    说明

    Follower索引为只读状态,如果需要和普通索引一样写入数据,需要先转换成普通索引。详细信息,请参见使用Elasticsearch跨集群复制进行跨数据中心复制

  3. 在远程集群中,重新插入一条数据,随即在本地集群中进行查看,验证增量数据是否实时同步。

    POST myindex/_doc/
    {
      "name":"Pony",
      "age":50
    }

    数据插入后,立即在本地集群中进行查看,结果如下。验证数据同步的实时性

    从以上结果可以看到,通过CCR可以实现增量数据的实时同步。

    说明

    您也可以通过CCR功能的API,进行跨集群复制相关操作。详细信息,请参见Cross-cluster replication APIs

常见问题

  • Q:为什么在添加远程集群时,可以使用9300端口。但是通过域名访问Elasticsearch集群时,只能使用9200端口?

    A:9300端口实际上是开放的。因为涉及到产品的安全策略,在SLB端口校验过程中,外网访问Elasticsearch域名的时候,只开放了9200端口。

  • Q:如何查看CCR同步状态?

    A:在Kibana中执行命令GET /_ccr/stats,查看failed分片数量,即number_of_failed_follow_indices的值。

    • 如果failed分片数量为0,则同步是正常的。

    • 如果failed分片数量不是0,可在follow集群执行以下命令恢复同步:

      POST /<follower_index>/_ccr/pause_follow
      POST /<follower_index>/_ccr/resume_follow
  • 本页导读 (1)
文档反馈