Hologres 从V1.1版本开始,针对线上生产环境高可用的场景,提供了共享存储的主从多实例部署方式,在该模式下支持故障隔离,负载隔离,有效支撑了高可用场景。本文介绍高可用方案的一些基本原理以及如何配置共享存储的主从多实例。

单实例自动恢复的高可用方案

Hologres计算节点均为容器调度(即下图中的Worker Node),资源管理器(Resource Manager)负责周期性健康检查。当出现1分钟容器响应超时(可能是内存溢出、硬件故障、软件Bug等原因导致),Resource Manager会自动拉起新的计算节点,并迁移Shard职责到新的节点上(例如Worker Node3响应超时,Resource Manager拉起Worker Node4取代Worker Node3),实现系统状态的快速恢复。数据状态保存在盘古分布式存储系统中,无需从计算节点迁移,计算节点轻量无状态,系统可以快速从故障中恢复。该方案为当前每个实例内部默认启用,当系统发生故障时,无需手工运维介入,系统可以自动恢复。在恢复期间,如果查询算子需要访问恢复中的节点,则查询会立即失败。Hologres从V1.1版本开始,采用全新恢复机制,节点恢复速度在一分钟左右,比早期版本提速5~10倍。单可用方案

共享存储的多实例高可用方案

技术原理

在单实例方案中,采用的是故障实时监测、节点替换的方案,在节点恢复时存在一定的服务不可用周期,对于关键业务场景,需要更高级别的高可用方案,支持故障隔离、负载隔离。Hologres在 V1.1版本,支持采用共享存储的多实例部署方案。在该方案中,主实例具备完整能力,数据可读可写,权限、系统参数可配置,而只读从实例处于只读状态,所有的变更都通过主实例完成,如下图所示。共享存储多实例主从实例之间计算资源不共享,负载隔离,故障隔离。所有实例共享同一份数据和访问控制,仅有一份存储费用。

实例之间内存状态自动实时同步,同一个Region毫秒级同步,同步以实例为单位。当主实例写入时,系统会自动将主实例的数据同步给从实例,因此从实例的在不使用的情况下,CPU和内存也有一定的开销(约为主实例的1/8),同时也建议主从实例的规格配置差异不要太过明显。更多技术原理请参见高可用技术揭秘

使用说明

  • 当前最多可以配置九个只读从实例,各实例之间的资源配置可以不同,但不应该有明显差异,所有实例之间Shard数相同。
  • 不同只读从实例具备独立的访问Endpoint,在使用上,通过Endpoint隔离不同的业务场景。
  • 从Hologres V1.3.27版本开始,主从实例的延迟阈值从20分钟调整为60分钟,超过60分钟后,若从实例的资源使用率长期达到100%,从实例会自动重启,以此来缓解同步延迟。建议从实例资源使用率长期达到100%时,对从实例的查询适当进行性能调优或者扩容实例。
  • 只读从实例绑定主实例的过程中主实例可以正常使用,绑定过程中不影响主实例。
  • 只读从实例绑定主实例大概需要3~5分钟,绑定完成后,方可使用只读从实例。
  • 无法连接未绑定主实例的只读从实例。

应用场景建议

  • 通用类场景:

    建议将主实例作为数据写入和数据加工实例,只读从实例作为数据分析实例,保障读写分离。

  • 多场景:
    • 对于在线服务类的查询业务,由于对于查询的P99稳定性要求较高,建议单独使用一个只读从实例,有效保障线上服务高可用。
    • 对于OLAP查询类,可与在线服务从实例分开,单独使用一个数据分析从实例,保证两种读分离,避免大Query对线上服务查询的影响。

配置共享存储的主从实例

共享存储多实例使用限制如下。
  • 仅Hologres V1.1及以上版本支持作为主实例,如果您的实例是V1.1以下版本,请您使用自助升级或加入实时数仓Hologres交流群申请升级实例,详情请参见如何获取更多的在线支持?
  • 只读从实例未绑定主实例时,无法连接只读从实例。
  • 主实例的版本和只读从实例版本必须一致。
  • 主实例和只读从实例必须处于同一个Region。

绑定和解绑操作的权限说明

您需要为RAM用户授予AliyunHologresFullAccess权限策略,方可进行绑定和解绑只读从实例操作。更多关于RAM角色权限的介绍请参见授予RAM用户权限

配置共享存储多实例的高可用操作步骤如下。

  1. 购买新的Hologres实例
    重要 只读从实例需要与主实例处在同一个Region中。

    购买新实例时,实例类型选择为只读从实例只读从实例的主实例ID选择该可用区下需要绑定的主实例,其他参数说明请参见购买Hologres

  2. 绑定只读从实例
    完成购买后,只读从实例会直接绑定到您在售卖页面上选择的主实例,待只读从实例达到运行正常状态时,您即可使用只读从实例。
  3. 使用实例
    使用共享存储多实例的过程中,需要注意如下事项。
    • 配置完成后,可以用只读从实例的Endpoint提供线上服务。
    • 所有的操作,包括建表、用户授权等都在主实例内完成,只读从实例只能读取数据。
    • 只读从实例会自动拥有主实例内的所有对象,包括用户、表等,在权限控制层,不能为只读从实例单独创建用户。