基于读写分离特性实现CSS集群跨云跨Region容灾
案例背景
互联网时代,搜索引擎成为人们生活工作的必备。进入大数据&云计算时代,云化的分布式搜索引擎,将帮助企业创造更大的价值。云搜索服务(Cloud Search Service,简称CSS),是华为云ELK生态的一系列软件集合,可以全方位提供托管的ELK生态云服务,兼容Elasticsearch、Kibana、Cerebro等软件。
但是,单一集群部署的Elasticsearch服务,有时会因为Region故障等原因出现异常,导致无法正常提供服务,从而引起业务上的异常。这对于一些要求较高可用性的业务是不可接受的。
本案例将会介绍一种基于华为云自研读写分离特性的跨云/跨Region容灾方案,从而满足更高可用性的需求。
原理介绍
华为云自研读写分离特性(下称自研特性)采用索引文件复制的方式进行主从集群间的数据同步。当前主流的两种数据同步/复制方案有双写和备份恢复两种。
结合自研特性的对比情况如下:
备份恢复 | 双写 | 自研特性 | |
---|---|---|---|
操作难度 | 较复杂,需要准备共享存储 | 复杂,需要业务适配双写逻辑 | 简单,业务无感知,通过配置自动同步,适应跨云/跨Region场景 |
性能 | 较差,需要两次复制过程 | 差,两侧集群写入压力一样 | 好,通过一次复制即可完成,且同步过程仅有文件复制,从集群压力很低 |
实时性 | 差,一次备份恢复仅能同步当时的数据 | 好,但需要双写逻辑保证 | 好,同步时延为秒级 |
由上表可以看出,自研特性在操作难度、性能和实时性方案超过了当前主流的数据同步/复制方案。接下来会具体说明下自研特性实际应用的操作步骤。
操作步骤
-
环境准备:
准备两个CSS集群,来模拟实际业务中的主从集群。其中主集群承担务正常情况下读写流量,从集群通过自研特性同步主集群数据。
首先进入CSS云搜索服务控制台,点击创建集群,根据业务需求选择相应配置并完成集群创建:注意:对于跨云/跨Region场景,两个集群需要通过专线/NAT的方式打通9300端口。
-
连接配置:
方案中,从集群会通过9300端口定时拉取主集群的增量数据。因此需要在从集群中配置主集群的连接。
打开CSS集群管理页面,点击从集群对应的Kibana页面:
进入Kibana后,点击左侧"Dev Tools"按钮进入:
在Console中执行以下命令:
PUT /_cluster/settings { "persistent" : { "cluster" : { "remote" : { "leader1" : { "seeds" : [ "10.0.0.1:9300" ] } } } } }
其中,leader1是主集群的名字,可以自由配置。seeds列表中填写主集群的所有IP加9300端口即可。
可以通过如下接口查看当前已配置连接的状态:
GET _remote/info
-
同步索引配置:
自研特性支持两种同步方式来满足业务的实际需要,分别为:基于单个索引的同步配置和基于索引匹配的同步配置。介绍如下:
-
基于单个索引的同步配置:
在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 同步索引的索引设置
-
-
同步状态查询:
业务根据具体情况完成以上配置后,主从集群的同步链路已经建立完成。可以通过如下接口查看同步状态:
GET {index_name}/sync_stats
该接口会返回分片级别数据的同步情况,包含同步次数、同步文件数、同步文件大小等信息。
当运用在容灾场景需要监控主从集群间的数据差异时,可以使用Elasticsearch原生文档查询接口进行文档数量查询:
GET {index_name}/_count
其他应用
自研特性除了能实现CSS集群的跨云跨Region容灾,还能应用于读写分离场景。
如上图所示,由于从集群的数据同步是基于文件复制的原理进行的,因此从集群的CPU负载较低,从而可以将读写流量进行分离。由主集群承载写请求,从集群承载读请求,实现读写分离,增加集群的稳定性。
- 点赞
- 收藏
- 关注作者
评论(0)