1. 首页 > 国产数据库教程 > openGauss教程 > 正文

opengauss教程FG061-openGauss一主多备架构配置生产实战

本文档详细介绍openGauss数据库一主多备架构的配置方法,包括主库配置、多备库部署、复制关系建立等操作,风哥教程参考openGauss官方文档高可用架构指南、主备复制指南等内容,适合DBA人员进行一主多备环境部署时参考。

Part01-基础概念与理论知识

1.1 openGauss一主多备架构概念

openGauss一主多备架构特点:

  • 高可用性:多个备库提供冗余,单个备库故障不影响整体
  • 读写分离:读操作分散到多个备库,提升系统吞吐量
  • 负载均衡:多个备库分担查询压力
  • 灵活切换:主库故障时有多个备库可选

1.2 openGauss一主多备架构优势

一主多备架构相比一主一备的优势:

# 一主多备架构优势

1. 可用性提升
– 一主一备:备库故障后无冗余
– 一主多备:单个备库故障仍有其他备库

2. 性能提升
– 一主一备:读操作集中在单个备库
– 一主多备:读操作分散到多个备库

3. 容灾能力
– 一主一备:只能本地容灾
– 一主多备:支持异地多中心容灾

4. 维护便利
– 一主一备:维护备库时需要停止复制
– 一主多备:可以逐个维护备库不影响业务

架构对比:
一主一备:
主库 <-> 备库

一主三备:
+-> 备库1(同步复制)
主库 -+-> 备库2(异步复制)
+-> 备库3(异步复制,异地)

1.3 openGauss一主多备应用场景

一主多备架构适用场景:

  • 高并发读业务:电商平台、社交应用等读多写少场景
  • 核心业务系统:金融核心、支付系统等高可用要求场景
  • 异地容灾:需要多地域部署的企业
  • 大数据分析:备库用于数据分析,不影响主库业务

Part02-生产环境规划与建议

2.1 openGauss一主多备架构设计

一主多备架构设计要点:

# 一主三备架构设计示例

架构拓扑:
+——————+
| 主库 |
| fgedu-primary |
| 192.168.1.10 |
| (同城中心A) |
+——–+———+
|
+——————-+——————-+
| | |
+——–v———+ +——-v——–+ +——-v——–+
| 备库1 | | 备库2 | | 备库3 |
| fgedu-standby1 | | fgedu-standby2| | fgedu-standby3|
| 192.168.1.11 | | 192.168.1.12 | | 192.168.2.11 |
| (同城中心A) | | (同城中心B) | | (异地中心) |
| (同步复制) | | (异步复制) | | (异步复制) |
| (优先切换) | | (读分担) | | (灾备) |
+——————+ +—————-+ +—————-+

角色分工:
– 主库:处理所有写操作,部分读操作
– 备库1:同步复制,优先切换候选,部分读操作
– 备库2:异步复制,主要承担读操作
– 备库3:异地异步复制,灾备用途

复制模式选择:
– 备库1:同步复制(synchronous_commit = remote_write)
– 备库2:异步复制
– 备库3:异步复制

2.2 openGauss资源规划配置

资源规划配置:

# 资源规划

1. 服务器配置
– 主库:32核128GB内存 2TB SSD RAID10
– 备库1:32核128GB内存 2TB SSD RAID10
– 备库2:32核128GB内存 2TB SSD RAID10
– 备库3:16核64GB内存 2TB SATA RAID5(异地)

2. 网络配置
– 主库-备库1:万兆内网,延迟<1ms - 主库-备库2:万兆内网,延迟<1ms - 主库-备库3:专线20Mbps,延迟<50ms 3. 存储规划 - 数据目录:/opengauss/fgdata(SSD) - 日志目录:/opengauss/fglog(SSD) - 归档目录:/opengauss/archive(SATA) 4. 软件配置 - 操作系统:Oracle Linux 9.3 - 数据库版本:openGauss 5.0.0 - 复制槽数量:max_replication_slots = 10 - WAL发送进程:max_wal_senders = 10

2.3 openGauss网络规划配置

网络规划配置:

风哥提示:
# 网络规划

1. IP地址规划
– 主库:192.168.1.10/24
– 备库1:192.168.1.11/24
– 备库2:192.168.1.12/24
– 备库3:192.168.2.11/24

2. 主机名规划
– 主库:fgedu-primary.fgedu.net.cn
– 备库1:fgedu-standby1.fgedu.net.cn
– 备库2:fgedu-standby2.fgedu.net.cn
– 备库3:fgedu-standby3.fgedu.net.cn

3. 防火墙配置
# 所有节点开放端口
firewall-cmd –permanent –add-port=5432/tcp
firewall-cmd –permanent –add-port=22/tcp
firewall-cmd –reload

4. 网络测试
# 主库测试到各备库连通性
ping -c 4 192.168.1.11
ping -c 4 192.168.1.12
ping -c 4 192.168.2.11

# 测试端口连通性
telnet 192.168.1.11 5432
telnet 192.168.1.12 5432
telnet 192.168.2.11 5432学习交流加群风哥微信: itpux-com

Part03-生产环境项目实施方案

3.1 openGauss主库部署配置

3.1.1 主库基础配置

# 主库配置

# 步骤1:配置postgresql.conf
$ cat > /opengauss/fgdata/postgresql.conf << EOF # 基本配置 listen_addresses = '*' port = 5432 max_connections = 2000 # 内存配置 shared_buffers = 64GB max_process_memory = 100GB work_mem = 128MB maintenance_work_mem = 4GB # WAL配置 wal_level = replica max_wal_senders = 10 wal_keep_size = 4GB max_replication_slots = 10 wal_sender_timeout = 60s # 归档配置 archive_mode = on archive_command = 'cp %p /opengauss/archive/%f' archive_timeout = 1800 # 复制配置 synchronous_commit = remote_write学习交流加群风哥QQ113257174 synchronous_standby_names = 'fgedu_standby1' # 热备配置 hot_standby = on max_standby_archive_delay = 30s max_standby_streaming_delay = 30s # 日志配置 logging_collector = on log_directory = '/opengauss/fglog' log_filename = 'postgresql-%Y-%m-%d.log' log_rotation_age = 1d log_rotation_size = 100MB EOF # 步骤2:配置pg_hba.conf $ cat >> /opengauss/fgdata/pg_hba.conf << EOF # 复制连接配置 host replication repl 192.168.1.11/32 md5 host replication repl 192.168.1.12/32 md5 host replication repl 192.168.2.11/32 md5 host all all 192.168.1.0/24 md5 host all all 192.168.2.0/24 md5 EOF # 步骤3:创建复制用户 $ gsql -d postgres -c "CREATE USER repl WITH REPLICATION PASSWORD 'repl_pass';

CREATE ROLE

# 步骤4:创建复制槽
$ gsql -d postgres -c “SELECT * FROM pg_create_physical_replication_slot(‘fgedu_standby1_slot’);

$ gsql -d postgres -c “SELECT * FROM pg_create_physical_replication_slot(‘fgedu_standby2_slot’);

$ gsql -d postgres -c “SELECT * FROM pg_create_physical_replication_slot(‘fgedu_standby3_slot’);

slot_name | lsn
——————–+—–
fgedu_standby1_slot| 0/0
fgedu_standby2_slot| 0/0更多视频教程www.fgedu.net.cn
fgedu_standby3_slot| 0/0
(3 rows)

# 步骤5:重启主库
$ gs_ctl restart -D /opengauss/fgdata

3.2 openGauss多备库部署配置

3.2.1 备库1部署配置(同步复制)

# 备库1配置

# 步骤1:从主库备份
$ gs_probackup backup -B /opengauss/backup –instance=fgedudb -b FULL –remote-host=192.168.1.10 –remote-user=opengauss

# 步骤2:恢复备份
$ gs_probackup restore -B /opengauss/backup –instance=fgedudb -D /opengauss/fgdata

# 步骤3:配置standby.signal
$ cat > /opengauss/fgdata/standby.signal << EOF primary_conninfo = 'host=192.168.1.10 port=5432 user=repl password=repl_pass application_name=fgedu_standby1' primary_slot_name = 'fgedu_standby1_slot' recovery_target_timeline = 'latest' EOF # 步骤4:配置postgresql.conf $ cat >> /opengauss/fgdata/postgresql.conf << EOF hot_standby = on max_standby_archive_delay = 30s max_standby_streaming_delay = 30s EOF # 步骤5:启动备库 $ gs_ctl start -D /opengauss/fgdata

3.2.2 备库2部署配置(异步复制)

# 备库2配置更多学习教程公众号风哥教程itpux_com

# 步骤1-2:与备库1相同(备份和恢复)

# 步骤3:配置standby.signal
$ cat > /opengauss/fgdata/standby.signal << EOF primary_conninfo = 'host=192.168.1.10 port=5432 user=repl password=repl_pass application_name=fgedu_standby2' primary_slot_name = 'fgedu_standby2_slot' recovery_target_timeline = 'latest' EOF # 步骤4-5:与备库1相同

3.2.3 备库3部署配置(异地异步复制)

# 备库3配置

# 步骤1:从主库备份(可能需要更长时间)
$ gs_probackup backup -B /opengauss/backup –instance=fgedudb -b FULL –remote-host=192.168.1.10 –remote-user=opengauss

# 步骤2:恢复备份
$ gs_probackup restore -B /opengauss/backup –instance=fgedudb -D /opengauss/fgdata

# 步骤3:配置standby.signal(增加压缩和超时配置)
$ cat > /opengauss/fgdata/standby.signal << EOF primary_conninfo = 'host=192.168.1.10 port=5432 user=repl password=repl_pass application_name=fgedu_standby3' primary_slot_name = 'fgedu_standby3_slot' recovery_target_timeline = 'latest' EOF # 步骤4:配置postgresql.conf(针对异地优化)from DB视频:www.itpux.com $ cat >> /opengauss/fgdata/postgresql.conf << EOF hot_standby = on wal_receiver_status_interval = 10s wal_receiver_timeout = 120s wal_retrieve_retry_interval = 10s EOF # 步骤5:启动备库 $ gs_ctl start -D /opengauss/fgdata

3.3 openGauss复制关系配置

3.3.1 验证复制状态

# 验证复制状态

# 步骤1:在主库查看所有备库状态
$ gsql -h 192.168.1.10 -d postgres -c “SELECT client_addr, application_name, state, sync_state, sent_lsn, replay_lsn FROM pg_stat_replication;

client_addr | application_name | state | sync_state | sent_lsn | replay_lsn
————–+——————+———–+————+———–+————
192.168.1.11 | fgedu_standby1 | streaming | sync | 0/5000100 | 0/5000100
192.168.1.12 | fgedu_standby2 | streaming | async | 0/5000100 | 0/50000F0
192.168.2.11 | fgedu_standby3 | streaming | async | 0/5000100 | 0/50000A0
(3 rows)

# 步骤2:检查各备库延迟
$ gsql -h 192.168.1.11 -d postgres -c “SELECT EXTRACT(EPOCH FROM (now() – pg_last_xact_replay_timestamp())) AS delay_seconds;

delay_seconds
—————
0.01

$ gsql -h 192.168.1.12 -d postgres -c “SELECT EXTRACT(EPOCH FROM (now() – pg_last_xact_replay_timestamp())) AS delay_seconds;

delay_seconds
—————
0.05

$ gsql -h 192.168.2.11 -d postgres -c “SELECT EXTRACT(EPOCH FROM (now() – pg_last_xact_replay_timestamp())) AS delay_seconds;

delay_seconds
—————
2.50

# 步骤3:测试数据同步
# 在主库插入数据
$ gsql -h 192.168.1.10 -d fgedudb -c “INSERT INTO fgedu.test_replication VALUES (1, ‘test’, now());

# 在各备库查询
$ gsql -h 192.168.1.11 -d fgedudb -c “SELECT * FROM fgedu.test_replication;

$ gsql -h 192.168.1.12 -d fgedudb -c “SELECT * FROM fgedu.test_replication;

$ gsql -h 192.168.2.11 -d fgedudb -c “SELECT * FROM fgedu.test_replication;

Part04-生产案例与实战讲解

4.1 openGauss一主三备部署案例

4.1.1 案例背景

某电商平台部署一主三备架构,满足高可用和读写分离需求。

4.1.2 部署配置

# 一主三备部署实战

# 环境信息
主库:fgedu-primary 192.168.1.10 32核128GB
备库1:fgedu-standby1 192.168.1.11 32核128GB 同步复制
备库2:fgedu-standby2 192.168.1.12 32核128GB 异步复制
备库3:fgedu-standby3 192.168.2.11 16核64GB 异步复制(异地)

# 主库关键配置
wal_level = replica
max_wal_senders = 10
wal_keep_size = 4GB
max_replication_slots = 10
synchronous_commit = remote_write
synchronous_standby_names = ‘fgedu_standby1’

# 部署验证脚本
#!/bin/bash
# check_multi_standby.sh
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: `http://www.fgedu.net.cn`

MASTER_IP=”192.168.1.10″

echo “=== 一主三备复制状态检查 ===”
echo “检查时间: $(date)”
echo “”

# 检查主库复制状态
echo “— 主库复制状态 —”
gsql -h $MASTER_IP -d postgres -c ”
SELECT
application_name,
client_addr,
state,
sync_state,
pg_size_pretty(pg_wal_lsn_diff(sent_lsn, replay_lsn)) as delay_size
FROM pg_stat_replication
ORDER BY sync_state, application_name;

# 检查复制槽状态
echo “”
echo “— 复制槽状态 —”
gsql -h $MASTER_IP -d postgres -c ”
SELECT
slot_name,
active,
restart_lsn,
pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) as retained_wal
FROM pg_replication_slots;

echo “”
echo “=== 检查完成 ===”

# 执行结果
=== 一主三备复制状态检查 ===
检查时间: Thu Apr 9 14:30:00 CST 2026

— 主库复制状态 —
application_name | client_addr | state | sync_state | delay_size
——————+—————+———–+————+————
fgedu_standby1 | 192.168.1.11 | streaming | sync | 0 bytes
fgedu_standby2 | 192.168.1.12 | streaming | async | 16 kB
fgedu_standby3 | 192.168.2.11 | streaming | async | 256 kB
(3 rows)

— 复制槽状态 —
slot_name | active | restart_lsn | retained_wal
——————–+——–+————-+————–
fgedu_standby1_slot| t | 0/5000100 | 0 bytes
fgedu_standby2_slot| t | 0/50000F0 | 16 kB
fgedu_standby3_slot| t | 0/50000A0 | 256 kB
(3 rows)

=== 检查完成 ===

4.2 openGauss一主五备部署案例

4.2.1 案例背景

某金融系统部署一主五备架构,满足最高可用性要求。

4.2.2 部署配置

# 一主五备部署实战

# 环境信息
主库:fgedu-primary 192.168.1.10 64核256GB
备库1:fgedu-standby1 192.168.1.11 64核256GB 同步复制(同城A)
备库2:fgedu-standby2 192.168.1.12 64核256GB 同步复制(同城A)
备库3:fgedu-standby3 192.168.1.13 32核128GB 异步复制(同城B)
备库4:fgedu-standby4 192.168.2.11 32核128GB 异步复制(异地)
备库5:fgedu-standby5 192.168.2.12 32核128GB 异步复制(异地)

# 主库关键配置
wal_level = replica
max_wal_senders = 15
wal_keep_size = 8GB
max_replication_slots = 15
synchronous_commit = remote_apply
synchronous_standby_names = ‘fgedu_standby1,fgedu_standby2’

# 同步复制配置说明
# 需要两个同步备库都确认后才提交
# 提供最高级别的数据保护

4.3 openGauss读写分离配置案例

4.3.1 案例背景

基于一主三备架构配置读写分离,提升系统读性能。

4.3.2 配置方案

# 读写分离配置

# 架构
写操作 -> 主库 192.168.1.10
读操作 -> 备库2 192.168.1.12 或 备库3 192.168.2.11

# 应用层读写分离配置(Java)
# application.yml
spring:
datasource:
master:
url: jdbc:opengauss://192.168.1.10:5432/fgedudb
username: fgedu
password: fgedu_pass
slave:
url: jdbc:opengauss://192.168.1.12:5432/fgedudb
username: fgedu
password: fgedu_pass

# 使用中间件实现读写分离(ShardingSphere)
# 配置读写分离规则
spring:
shardingsphere:
datasource:
names: master,slave0,slave1
master:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: org.opengauss.Driver
jdbc-url: jdbc:opengauss://192.168.1.10:5432/fgedudb
slave0:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: org.opengauss.Driver
jdbc-url: jdbc:opengauss://192.168.1.12:5432/fgedudb
slave1:
type: com.zaxxer.hikari.HikariDataSource
driver-class-name: org.opengauss.Driver
jdbc-url: jdbc:opengauss://192.168.2.11:5432/fgedudb
masterslave:
name: ms_ds
master-data-source-name: master
slave-data-source-names: slave0,slave1
load-balance-algorithm-type: round_robin

# 监控读写分离效果
# 查看各备库的查询负载
$ gsql -h 192.168.1.12 -d postgres -c “SELECT count(*) FROM pg_stat_activity WHERE state=’active’ AND query LIKE ‘SELECT%’;

$ gsql -h 192.168.2.11 -d postgres -c “SELECT count(*) FROM pg_stat_activity WHERE state=’active’ AND query LIKE ‘SELECT%’;

Part05-风哥经验总结与分享

5.1 openGauss一主多备最佳实践

一主多备架构最佳实践总结:

  • 合理选择备库数量:根据业务需求和成本预算选择,通常3-5个备库
  • 区分备库角色:明确各备库的用途(同步、异步、灾备、读分担)
  • 监控复制延迟:建立完善的复制延迟监控和告警
  • 定期演练:定期进行故障切换演练,验证各备库的可用性
  • 负载均衡:合理分配读请求到各备库,避免单点压力过大

5.2 openGauss部署检查清单

# 一主多备部署检查清单

# 部署前检查
□ 服务器硬件配置一致
□ 网络带宽和延迟满足要求
□ 防火墙端口开放
□ 操作系统参数配置

# 部署中检查
□ 主库配置正确
□ 各备库备份恢复成功
□ 复制槽创建成功
□ 复制关系建立成功

# 部署后检查
□ 所有备库复制状态正常
□ 复制延迟在可接受范围
□ 数据同步测试通过
□ 故障切换测试通过
□ 读写分离配置正确
□ 监控告警配置完成

5.3 openGauss常见问题处理

一主多备架构常见问题及解决方案:

  • 主库压力过大:增加WAL发送进程,优化网络,考虑级联复制
  • 复制延迟过高:检查网络带宽,优化备库性能,调整复制参数
  • 复制槽满:检查备库状态,清理异常复制槽,调整WAL保留策略
  • 备库不一致:重建备库,检查数据完整性,重新建立复制
  • 切换失败:检查备库状态,确认复制延迟,检查应用连接

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息