环境

系统平台:Linux x86-64 Red Hat Enterprise Linux 7,UOS(海光),UOS (飞腾),UOS(鲲鹏),银河麒麟svs(X86_64),银河麒麟(龙芯)svs,银河麒麟(飞腾)svs,银河麒麟 (X86_64),银河麒麟 (飞腾),银河麒麟 (鲲鹏),银河麒麟 (龙芯),银河麒麟 (海光),中科方德 (海光)
版本:9.0.5,9.0.4,9.0.3,6.0.4.1,6.0.4,9.0.1,9.0,6.0,4.5.11,4.5.10,4.5.8.9,4.5.8.5,4.5.8,4.5.7

文档用途

HGHAC 集群支持同步和异步两种流复制模式,并可根据配置自动切换。但当需要在特定运维场景下提前调整集群同步策略时,可参考本文手动修改参数进行切换。

详细信息

一、相关参数

参数作用取值
synchronous_mode是否开启同步复制true(同步) / false(异步)
synchronous_node_count同步备节点数量1 或 2(仅在 synchronous_mode=true 时有效)
synchronous_mode_strict强同步模式, 控制无同步备时的行为true(拒绝写入) / false(自动降级异步)

参数说明: synchronous_mode_strict 仅在 synchronous_mode=true 时生效. 当所有同步备节点均不可用时: false(默认): 集群自动降级为异步模式, 保证写入可用性. true: 主库拒绝所有写入请求(报错), 直到至少一个同步备恢复, 确保数据零丢失(RPO=0).

⭐ 建议synchronous_mode_strict配置为 false(默认值). 关闭状态下, 集群在同步备故障时能自动降级保证业务连续性;

二、示例场景配置

场景 1: 集群为一主一备架构

  • 同步模式: synchronous_mode: true, synchronous_node_count: 1
  • 异步模式: synchronous_mode: false

场景 2: 集群为一主两备架构(推荐: 一个同步备 + 一个异步备)

推荐配置: synchronous_mode: true, synchronous_node_count: 1

推荐原因:

  • 同步备保障数据不丢(RPO=0), 异步备作为备份节点, 避免两个备库都因同步等待而影响主库性能.
  • 当同步备故障时, 集群自动将异步备提升为新的同步备, 实现高可用.
  • 全部配置为同步备会增大主库事务提交的等待延迟; 全部配置为异步备则存在数据丢失风险. 一同步一异步是性能与数据安全的最佳平衡.

场景 3: 集群为一主两备架构(两个异步备)

  • synchronous_mode: false

场景 4: 集群为一主两备架构(两个同步备)

  • synchronous_mode: true, synchronous_node_count: 2

三、修改方式

方式一(推荐, 在线生效)

hghactl edit-config      #使用root用户执行命令进入修改界面(编辑方式与vi, vim相同)
# 修改 dcs 下的 synchronous_mode 和 synchronous_node_count, 若没有两参数可手动添加
check_timeline: true
failsafe_mode: true
loop_wait: 10
master_start_timeout: 300
maximum_lag_on_failover: 1048576
postgresql:
  parameters:
    archive_mode: 'on'
    hot_standby: 'on'
    logging_collector: 'on'
    max_connections: 1000
    max_prepared_transactions: 1000
    max_wal_senders: 10
    wal_keep_segments: 100
    wal_keep_size: 5000
    wal_level: logical
    wal_log_hints: 'on'
  use_pg_rewind: true
  use_slots: true
retry_timeout: 10
synchronous_mode: true             #注意每个参数冒号后面都有个空格
synchronous_node_count: 1          
ttl: 30
type: physical

# 保存退出, 自动生效
#建议使用方式一修改完成后再使用方式二同步更新hghac.yml文件中的配置, 以防止特殊情况导致参数失效

方式二(直接改文件, 需重启服务)

vim hghac.yml

hghac.yml 集群配置文件路径查询

systemctl cat hghac | grep -oP 'ExecStart=\K.*' | awk '{print $NF}'

或

grep '^ExecStart=' /usr/lib/systemd/system/hghac.service | awk '{print $NF}'

或

grep '^ExecStart=' /etc/systemd/system/hghac.service | awk '{print $NF}'

修改 dcs 部分

bootstrap:
  dcs:
    ttl: 30
    loop_wait: 10
    retry_timeout: 10
    maximum_lag_on_failover: 1048576
    maximum_lag_on_syncnode: -1
    primary_start_timeout: 300
    synchronous_mode: true
    synchronous_mode_strict: false
    synchronous_node_count: 1
    failsafe_mode: true
    postgresql:
      use_pg_rewind: true
      parameters:
        wal_level: replica
        hot_standby: "on"
        max_connections: 100
        max_prepared_transactions: 100

重启服务生效

systemctl restart hghac   #重启服务

四、检查配置是否生效

1、通过集群参数查询

hghactl show-config                # 看参数是否已改
psql -c "SHOW synchronous_standby_names;"  # 看当前同步备列表

2、通过 hghactl list 查看同步异步状态
hghactl list 命令可以直接显示同步状态, 通过 Role 列进行区分:

+----------+-------------------+--------------+-----------+----+-----+
| Member   | Host              | Role         | State     | TL | Lag |
+----------+-------------------+--------------+-----------+----+-----+
| hghac_01 | 192.168.2.74:5866 | Sync Standby | streaming | 31 |   0 |
| hghac_02 | 192.168.2.75:5866 | Leader       | running   | 31 |     |
| hghac_03 | 192.168.2.76:5866 | Replica      | streaming | 31 |   0 |
+----------+-------------------+--------------+-----------+----+-----+

Role 列含义:

Role含义
Leader主库
Sync Standby同步备库(当前被选中的同步备节点)
Replica异步备库(普通备节点)

上例中, hghac_01 为同步备库, hghac_03 为异步备库, 符合"一主一同步备 + 一异步备"的推荐配置.

五、同步备节点异常时的自动处理机制

当 Sync Standby 节点出现故障(宕机, 网络分区或复制延迟超阈值)时, HGHAC 集群会自动执行以下处理:

  • 自动降级为异步: hghactl 检测到同步备不可用后, 立即关闭同步复制, 将集群降级为异步模式, 确保主库写入可用性不受影响.
  • 自动提升新同步备: 如果集群中还有其他健康备库(如 Replica 节点), hghac 会自动将其提升为新的同步备库, 集群恢复"一主一同步备"状态.
  • 故障节点恢复后角色变更: 原故障节点重新加入集群后, 其角色变为普通的异步备库(Replica).

整个过程完全自动, 无需人工干预.

六、注意事项

  • 从同步切异步后, 性能提升, 但故障可能丢少量数据.
  • 如果通过 edit-config 改的, 建议同步改一下 hghac.yml 文件, 防止重启丢失配置.
  • 修改配置后可通过 hghactl show-config 验证参数是否生效.

相关文档

Logo

鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。

更多推荐