基于读写分离特性实现CSS集群跨云跨Region容灾

举报
tinyfan 发表于 2022/06/25 16:51:10 2022/06/25
【摘要】 案例背景互联网时代,搜索引擎成为人们生活工作的必备。进入大数据&云计算时代,云化的分布式搜索引擎,将帮助企业创造更大的价值。云搜索服务(Cloud Search Service,简称CSS),是华为云ELK生态的一系列软件集合,可以全方位提供托管的ELK生态云服务,兼容Elasticsearch、Kibana、Cerebro等软件。但是,单一集群部署的Elasticsearch服务,会因为...

案例背景

互联网时代,搜索引擎成为人们生活工作的必备。进入大数据&云计算时代,云化的分布式搜索引擎,将帮助企业创造更大的价值。云搜索服务(Cloud Search Service,简称CSS),是华为云ELK生态的一系列软件集合,可以全方位提供托管的ELK生态云服务,兼容Elasticsearch、Kibana、Cerebro等软件。

但是,单一集群部署的Elasticsearch服务,有时会因为Region故障等原因出现异常,导致无法正常提供服务,从而引起业务上的异常。这对于一些要求较高可用性的业务是不可接受的。

本案例将会介绍一种基于华为云自研读写分离特性的跨云/跨Region容灾方案,从而满足更高可用性的需求。
image.png

原理介绍

华为云自研读写分离特性(下称自研特性)采用索引文件复制的方式进行主从集群间的数据同步。当前主流的两种数据同步/复制方案有双写和备份恢复两种。
image.png

结合自研特性的对比情况如下:

备份恢复 双写 自研特性
操作难度 较复杂,需要准备共享存储 复杂,需要业务适配双写逻辑 简单,业务无感知,通过配置自动同步,适应跨云/跨Region场景
性能 较差,需要两次复制过程 差,两侧集群写入压力一样 好,通过一次复制即可完成,且同步过程仅有文件复制,从集群压力很低
实时性 差,一次备份恢复仅能同步当时的数据 好,但需要双写逻辑保证 好,同步时延为秒级

由上表可以看出,自研特性在操作难度、性能和实时性方案超过了当前主流的数据同步/复制方案。接下来会具体说明下自研特性实际应用的操作步骤。

操作步骤

  1. 环境准备:

    准备两个CSS集群,来模拟实际业务中的主从集群。其中主集群承担务正常情况下读写流量,从集群通过自研特性同步主集群数据。
    首先进入CSS云搜索服务控制台,点击创建集群,根据业务需求选择相应配置并完成集群创建:

    注意:对于跨云/跨Region场景,两个集群需要通过专线/NAT的方式打通9300端口。

  2. 连接配置:

    方案中,从集群会通过9300端口定时拉取主集群的增量数据。因此需要在从集群中配置主集群的连接。

    打开CSS集群管理页面,点击从集群对应的Kibana页面:
    image.png

    进入Kibana后,点击左侧"Dev Tools"按钮进入:
    image.png

    在Console中执行以下命令:

    PUT /_cluster/settings
    {
      "persistent" : {
        "cluster" : {
          "remote" : {
            "leader1" : {
              "seeds" : [
                "10.0.0.1:9300" 
              ]
            }
          }
        }
      }
    }
    

    其中,leader1是主集群的名字,可以自由配置。seeds列表中填写主集群的所有IP加9300端口即可。

    可以通过如下接口查看当前已配置连接的状态:

    GET _remote/info
    
  3. 同步索引配置:

    自研特性支持两种同步方式来满足业务的实际需要,分别为:基于单个索引的同步配置和基于索引匹配的同步配置。介绍如下:

    • 基于单个索引的同步配置:

      在Kibana中执行以下命令:

      PUT start_remote_sync
      {
        "remote_cluster": "leader1",
        "remote_index": "data1_leader",
        "local_index": "data1_follower"
      }
      

      参数说明如下:

      数名 说明
      remote_cluster 主集群名称,通过“配置主集群信息”设置,具体值如上文的leader1
      remote_index 主集群待同步索引名称
      local_index 从集群同步索引名称
      settings 同步索引的索引设置
    • 基于索引匹配的同步配置:

      在Kibana中执行以下命令:

      PUT auto_sync/pattern/pattern1
      {
       "remote_cluster": "leader1",
       "remote_index_patterns": "log*",
       "local_index_pattern": "{{remote_index}}-sync",
       "apply_exist_index": true
      }
      

      参数说明如下:

      数名 说明
      remote_cluster 主集群名称,通过“配置主集群信息”设置,具体值如上文的leader1
      remote_index_patterns 主集群待同步索引模式,支持通配符*
      local_index_pattern 从集群同步索引模式,支持模板替换。如为{{remote_index}}-sync,待同步索引为log1,同步过来的索引为log1-sync
      apply_exist_index 是否同步主集群上已存在的索引,默认为true
      settings 同步索引的索引设置
  4. 同步状态查询:

    业务根据具体情况完成以上配置后,主从集群的同步链路已经建立完成。可以通过如下接口查看同步状态:

    GET {index_name}/sync_stats
    

    该接口会返回分片级别数据的同步情况,包含同步次数、同步文件数、同步文件大小等信息。

    当运用在容灾场景需要监控主从集群间的数据差异时,可以使用Elasticsearch原生文档查询接口进行文档数量查询:

    GET {index_name}/_count
    

其他应用

自研特性除了能实现CSS集群的跨云跨Region容灾,还能应用于读写分离场景。
image.png

如上图所示,由于从集群的数据同步是基于文件复制的原理进行的,因此从集群的CPU负载较低,从而可以将读写流量进行分离。由主集群承载写请求,从集群承载读请求,实现读写分离,增加集群的稳定性。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。