ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

openGauss主备集群架构部署与优化实战

openGauss主备集群架构部署与优化实战

1. 为什么选择openGauss主备集群架构

在企业级数据库应用中,高可用性从来都不是可选项而是必选项。去年我们金融系统的核心数据库遭遇过一次长达6小时的宕机,直接导致数百万交易延迟——这个惨痛教训让我彻底明白了主备集群的价值。openGauss作为华为开源的企业级关系型数据库,其6.0.2版本在主备同步机制上做了重大优化,同步延迟可控制在毫秒级,这比我们之前用的某商业数据库表现还要出色。

主备部署最直观的价值在于故障自动切换。当主节点发生硬件故障时,备节点能在30秒内完成角色提升(实测平均22秒),这个过程中应用只需要重试连接而无需人工干预。更关键的是,openGauss的同步备节点支持读操作分流,这意味着我们可以把报表查询这类只读请求定向到备节点,主节点专心处理交易请求。在我们支付系统的压力测试中,这种读写分离设计让整体吞吐量提升了40%。

2. 环境准备与系统配置

2.1 硬件规格建议

生产环境的主备节点建议采用对等配置。我们给某省医保平台部署时使用的配置是:

  • 计算节点:16核Intel Xeon Gold 6248R
  • 内存:128GB DDR4 ECC
  • 存储:2块1.6TB NVMe SSD做RAID1
  • 网络:双万兆网卡绑定(bond模式4)

特别要注意的是存储IOPS指标。当主节点写入峰值时,备节点需要同步写入redo日志,我们遇到过某客户使用SATA SSD导致同步延迟飙升的情况。建议用fio测试随机写性能,4k块大小队列深度32时,至少需要5万IOPS才能保证稳定。

2.2 操作系统调优

在CentOS 7.9上需要重点调整以下参数:

# 内存分配策略 echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf # 减少swap使用倾向 echo "vm.swappiness = 10" >> /etc/sysctl.conf # 增加文件句柄数 echo "* soft nofile 1000000" >> /etc/security/limits.conf # 禁用透明大页 echo "never" > /sys/kernel/mm/transparent_hugepage/enabled

这些调整直接影响WAL日志写入性能。某次部署中忘记禁用透明大页,导致批量导入数据时出现周期性卡顿,后来用perf工具排查发现是THP拆分导致的。

3. 安装部署全流程

3.1 软件包安装

从官网下载openGauss 6.0.2企业版安装包后,需要先创建专用用户:

groupadd dbgrp useradd -g dbgrp omm echo "omm@123" | passwd --stdin omm

解压安装包时要注意权限问题。遇到过因为umask设置不当导致脚本执行失败的案例:

umask 022 tar -zxvf openGauss-6.0.2-CentOS-64bit.tar.gz -C /opt cd /opt/openGauss ./install.sh --mode cluster --primary-host 192.168.1.101 --standby-host 192.168.1.102

安装脚本会交互式询问密码,建议主备节点使用相同密码。曾经有DBA为"安全"设置不同密码,结果导致备节点同步失败,错误日志里却只报模糊的认证错误,排查了整整一天。

3.2 集群初始化配置

主节点postgresql.conf关键配置:

listen_addresses = '0.0.0.0' port = 5432 max_connections = 2000 shared_buffers = 32GB wal_level = logical synchronous_commit = on synchronous_standby_names = '*'

备节点需要额外配置:

hot_standby = on primary_conninfo = 'host=192.168.1.101 port=5432 user=repl password=Repl@123'

这里有个隐藏坑点:synchronous_standby_names默认值为空,如果不显式设置为'*',主节点会采用异步复制模式,这就失去了主备部署的核心价值。某次审计时发现这个配置错误,惊出一身冷汗。

4. 故障转移与监控方案

4.1 自动切换测试

使用gs_ctl工具模拟主节点故障:

# 在主节点执行 gs_ctl stop -D /var/lib/opengauss/data # 在备节点检查状态 gs_ctl query -D /var/lib/opengauss/data # 预期看到"Standby promoting"状态变化 # 提升备节点为主 gs_ctl promote -D /var/lib/opengauss/data

测试时一定要观察业务连接的表现。我们开发了一个模拟器持续发送SQL请求,发现JDBC连接池需要配置以下参数才能快速感知故障:

testOnBorrow=true validationQuery=SELECT 1 timeBetweenEvictionRunsMillis=30000

4.2 监控指标体系建设

推荐使用Prometheus+Grafana监控这些核心指标:

  1. 主备延迟(byte):pg_stat_replication视图的flush_lag
  2. 备机回放速度:pg_stat_wal_receiver的last_msg_send_time
  3. 连接池利用率:pg_stat_activity的count by state

这是我们使用的告警规则示例:

groups: - name: opengauss-alert rules: - alert: HighReplicationLag expr: pg_replication_flush_lag{role="standby"} > 1048576 # 1MB for: 5m labels: severity: critical annotations: summary: "备库同步延迟超过1MB"

5. 性能优化实战技巧

5.1 批量写入优化

主备架构下大批量导入数据需要特殊处理。我们处理医保历史数据迁移时,发现直接使用COPY命令会导致备库延迟数小时。后来改用以下方案:

-- 主库执行 SET synchronous_commit TO off; COPY patients FROM '/data/patients.csv' WITH CSV; SET synchronous_commit TO on; -- 等待备库追上 SELECT pg_wal_replay_pause(); SELECT pg_wal_replay_resume();

这个技巧将10GB数据的导入时间从6小时缩短到40分钟,但要注意两点:

  1. 操作期间如果主库宕机,可能丢失部分数据
  2. 恢复同步后需要检查备库数据一致性

5.2 连接池最佳实践

主备环境下连接池需要特殊配置。以Druid为例:

// 读写分离配置 @Bean public DataSource dataSource() { DruidDataSource ds = new DruidDataSource(); ds.setUrl("jdbc:postgresql://192.168.1.101:5432,192.168.1.102:5432/mydb"); ds.setLoadBalanceHosts(true); ds.setTargetDataSourceType("primary,standby"); ds.setReadOnlyMethod("SET TRANSACTION READ ONLY"); return ds; }

实际使用中发现HikariCP在某些版本存在备节点路由bug,表现为只读查询仍发往主节点。解决方法是在连接字符串显式指定readOnly节点:

jdbc:postgresql://192.168.1.102:5432/mydb?readOnly=true

6. 灾备演练checklist

根据金融行业要求,我们制定了季度灾备演练流程:

  1. 预检查阶段

    • 验证备节点磁盘空间充足(至少比主库多20%)
    • 检查网络延迟(ping时间<1ms)
    • 确认监控系统正常工作
  2. 切换操作阶段

    • 记录主库最后LSN位置
    • 停止应用连接
    • 执行gs_ctl promote
    • 修改DNS或负载均衡配置
  3. 回切验证阶段

    • 原主库重建为备库
    • 确保数据同步完成
    • 测试应用连接

特别注意:切换后原主库的pg_hba.conf需要更新,否则重建备库时会因IP变化导致认证失败。我们编写了自动处理脚本:

sed -i "s/192.168.1.101/192.168.1.102/g" /var/lib/opengauss/data/pg_hba.conf

每次演练后要生成详细报告,包括各阶段耗时、数据差异量等指标。这些记录在监管检查时都是关键证据。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进