瀚高数据库 HGHAC 集群同步转异步操作方法
环境
系统平台: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 验证参数是否生效.
相关文档
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐


所有评论(0)