写入高可用是阿里云Elasticsearch团队为提升集群写入稳定性而引入的新特性。即通过异步写入高可用架构实现读写分离,以保证在高并发写入情况下集群的稳定性。同时写入高可用特性还加入了服务代理和消息队列等组件。本文介绍写入高可用特性的原理和使用方法。

背景信息

写入高可用特性具有如下功能:
  • 数据高可用:当集群宕机时,数据也能正常写入消息队列中,待集群恢复后回追数据来保证数据不丢失。
  • 数据缓冲:当数据流量峰值到来时,数据会写入消息队列中缓冲,避免大流量将集群压垮;数据缓冲后将进行批量发送,避免小批次数据频繁写入集群,从而提升了CPU使用率和写入性能。
  • 数据回放:当集群丢失部分数据时,可通过数据回放恢复丢失的数据。
  • 流量控制:限制数据流量,避免在异常情况下,过大的流量导致集群服务不可用。

前提条件

创建阿里云Elasticsearch实例,具体操作请参见创建阿里云Elasticsearch实例。创建的实例需同时满足以下条件:
  • 版本为6.7.0
  • 数据节点规格不低于2核4 GB

使用限制

写入高可用特性仅支持2021年11月之前在华北2(北京)、华东2(上海)、华东1(杭州)和华南1(深圳)地域创建的实例,不符合要求的实例建议使用Indexing Service特性,详细信息请参见基于Indexing Service实现数据流管理

异步写入和同步写入模式

  • 异步写入模式
    开启写入高可用的集群,采用异步写入模式。客户端请求经过代理层分发,将查询请求直接转发给Elasticsearch,获取查询结果返回;写入请求将经过异步数据处理组件(包含消息队列),再将数据实时写入Elasticsearch,来提高Elasticsearch的写入性能及稳定性。写入高可用异步模式
  • 同步写入模式
    未开启写入高可用的集群,默认采用同步写入模式。即查询和写入请求均直接由代理服务转发给Elasticsearch。当异步写入模式发生错误时,阿里云Elasticsearch支持临时将异步模式转换为同步模式,转换后,写入请求将直接由代理服务转发给Elasticsearch,而不会存储到消息队列中,以确保数据写入快速恢复。写入高可用同步模式

开启写入高可用

  1. 登录阿里云Elasticsearch控制台
  2. 在左侧导航栏,单击Elasticsearch实例
  3. 进入目标实例。
    1. 在顶部菜单栏处,选择资源组和地域。
    2. 在左侧导航栏,单击Elasticsearch实例,然后在Elasticsearch实例中单击目标实例ID。
  4. 基本信息页面的写入高可用区域,单击立即开启
  5. 写入高可用页面,单击开启,以开启写入高可用。
    开启写入高可用

    无主键时,自动生成文档哈希值主键:当您对数据的顺序有较高要求时,可以勾选该选项。它将根据文档内容,为无主键数据自动生成哈希值主键,内容完全相同的文档在写入Elasticsearch时将被覆盖,从而避免数据被重复写入。

    说明 开启或关闭写入高可用特性,均为集群架构的平滑变更,一般不会影响阿里云Elasticsearch集群的正常访问,但是建议在业务低峰期进行。
  6. 单击确认

查看异步写入日志

开启写入高可用后,您可以在写入高可用区域,单击查看异步写入日志,查看写入高可用特性在异步模式下生成的日志。

查看异步写入日志

临时开启同步写入

当异步模式发生错误时,您可以在写入高可用区域,打开临时开启同步写入开关,将异步模式临时转换为同步模式,快速恢复数据写入。临时开启同步写入

当异步模式恢复正常后,您可以关闭临时开启同步写入开关,快速恢复异步写入模式。

关闭写入高可用

注意 建议在业务低峰期关闭写入高可用。因为当集群中存在数据频繁更新的场景时,可能会发生数据乱序问题(概率较小)。
  1. 写入高可用区域,单击写入高可用右侧的设置
  2. 写入高可用页面,单击关闭,以关闭写入高可用。
    关闭写入高可用
  3. 单击确认