本文将为您介绍在Hologres中Shard级别的Replication使用。

功能概述

从Hologres V1.1版本开始,支持通过设置Table Group副本数的方式来提高某个Table Group查询并发能力和可用性。您可以在创建Table Group的时候通过显示指定的replica count或者修改已有的replica count来打开Replication的功能。新增的副本属于内存级别的运行时副本,不会增加额外存储成本。

关于replica count的说明具体如下:
  • 数据是按Shard分布的,不同Shard管理不同的数据,不同Shard之间的数据没有重复,所有的Shard在一起是一份完整的数据。
  • 默认情况下每一个Shard只有一个副本,即replica count = 1,其对应的属性为leader。您可以通过调整replica count的值,使相同的数据有多个副本,其他副本的属性为follower。
  • 写请求由leader shard负责,读请求会均衡由多个follower shard(也包含leader shard)共同服务。当使用follower shard查询时,数据可能会出现10~20ms级别延迟。
  • replica count默认值是1,表示不启用Replication。大于1表示开启Replication,建议设置为2,replica count数字越大,对资源的消耗也越大,最多可以有3个Replication,即replica count数为4。由于Replica布局具有反亲和特性,即多个replica不可以布局在同一个计算节点上,因此replica count参数应小于等于计算节点数。有关不同规格拥有的计算节点数,参考实例规格概述
  • 考虑到计算节点计算力的均衡性,在增加Replication时,应该同步缩小shard_count,保持shard_count * replica count = 默认实例推荐shard数时,具备最好的性能。

使用限制

在Hologres中使用Shard级别的Replication时,仅Hologres V1.1及以上版本支持,请在Hologres管控台的实例详情页查看当前实例版本,如果您的实例是V0.10以下版本,请您提交工单升级实例。

语法说明

  • 查询当前DB的Table Group
    您可以使用如下语法查看当前DB有哪些Table Group。
    select * from hologres.hg_table_group_properties ;
  • 查询已有Table Group的replica count
    • 语法示例
      select property_value from hologres.hg_table_group_properties where tablegroup_name = 'table_group_name' and property_key = 'replica_count';
    • 参数说明
      参数 说明
      table_group_name 请输入您需要查询的Table Group名称。
      replica_count 此处为固定参数名称,无需修改。
  • 开启Replication
    通过以下命令开启Replication功能,开启是数据库或者session级别的操作,开启完成后,还需要通过指定replica count为Table Group开启Replication功能。请务必先完成replica_count的调整,再开启读Replication功能,否则在副本复制的过程中,系统开销高,可能引起读操作的超时。建议新建空Table Group的方式,开启Replication,减少对已有业务的调整。用户查询端无需修改。
    -- 为Table Group 开启replication
    call hg_set_table_group_property ('table_group_name', 'replica_count', '2');
    
    -- 为database开启read replica功能
    alter database <database_name> set hg_experimental_enable_read_replica = on;
    参数说明如下。
    参数 说明
    database_name 数据库名称。
    hg_experimental_enable_read_replica 是否开启read replica功能,每个DB执行一次即可。
    • on:开启read replica功能。
    • off:关闭read replica功能。
    hg_set_table_group_property 修改Table Group的replica_count。
    • table_group_name:请输入您需要修改的Table Group名称。
    • replica_count:设置目标Table Group的副本数量,replica_count应小于计算节点数,一般是2。
    • 设置是否开启Replication:1为默认值,表示不启用Replication功能。大于1的数值表示启用Replication功能。
  • 关闭Replication
    • 语法示例
      -- 修改replica_count,关闭replication
      call hg_set_table_group_property ('table_group_name', 'replica_count', '1');
    • 参数说明
      参数 说明
      hg_set_table_group_property 修改Table Group的replica_count。
      • table_group_name:请输入您需要修改的Table Group名称。
      • replica_count:设置目标Table Group的副本数量。
      • 设置是否开启Replication:1为默认值,表示不启用read replica功能。大于1的数值表示启用read replica功能。