写入高可用是阿里云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,而不会存储到消息队列中,以确保数据写入快速恢复。
开启写入高可用
查看异步写入日志
开启写入高可用后,您可以在写入高可用区域,单击查看异步写入日志,查看写入高可用特性在异步模式下生成的日志。
临时开启同步写入
当异步模式发生错误时,您可以在写入高可用区域,打开临时开启同步写入开关,将异步模式临时转换为同步模式,快速恢复数据写入。
当异步模式恢复正常后,您可以关闭临时开启同步写入开关,快速恢复异步写入模式。
关闭写入高可用
注意 建议在业务低峰期关闭写入高可用。因为当集群中存在数据频繁更新的场景时,可能会发生数据乱序问题(概率较小)。