Skip to content

GaussDB 主从架构

主从架构组件

主节点(Master Node)

  • 负责处理所有写操作和事务提交
  • 生成并维护事务日志(WAL)
  • 向从节点发送复制数据
  • 管理集群的全局状态

从节点(Slave Node)

  • 接收主节点的复制数据并应用
  • 提供只读服务,分担主节点的读负载
  • 作为主节点的备份,可在主节点故障时提升为主节点

复制管理器(Replication Manager)

  • 监控主从节点之间的复制状态
  • 管理复制连接和数据传输
  • 处理复制延迟和故障情况

故障检测与转移组件

  • 监控主节点的健康状态
  • 在主节点故障时自动或手动触发故障转移
  • 协调从节点的提升和集群重新配置

主从复制机制

WAL 日志复制

  • 主节点将事务操作记录到 WAL(Write-Ahead Logging)日志
  • 从节点通过流式复制协议从主节点获取 WAL 日志
  • 从节点按照顺序应用 WAL 日志,保持与主节点的数据一致性

复制模式

同步复制

  • 主节点在事务提交前,等待至少一个从节点确认已接收并写入 WAL 日志
  • 保证数据的强一致性,但会增加事务提交延迟
  • 适用于对数据一致性要求极高的场景
sql
-- 设置同步复制模式
ALTER SYSTEM SET synchronous_standby_names = 'slave1,slave2';

异步复制

  • 主节点在事务提交时,不等待从节点的确认
  • 从节点异步获取并应用 WAL 日志
  • 提供更高的写入性能,但可能存在数据丢失风险
  • 适用于对性能要求高,对数据一致性要求相对较低的场景
sql
-- 设置异步复制模式
ALTER SYSTEM SET synchronous_standby_names = '';

半同步复制

  • 主节点在事务提交前,等待至少一个从节点确认已接收 WAL 日志,但不要求写入磁盘
  • 平衡了数据一致性和性能
  • 是大多数生产环境的推荐配置

主从架构部署

部署步骤

  1. 准备主节点环境

    • 安装 GaussDB 数据库软件
    • 初始化主节点实例
    • 配置主节点的网络和安全参数
  2. 配置主节点的复制参数

    sql
    -- 启用 WAL 归档
    ALTER SYSTEM SET wal_level = 'replica';
    ALTER SYSTEM SET archive_mode = on;
    ALTER SYSTEM SET max_wal_senders = 10;
    ALTER SYSTEM SET wal_keep_size = '1GB';
  3. 准备从节点环境

    • 安装 GaussDB 数据库软件
    • 使用主节点的基础备份初始化从节点
  4. 配置从节点的复制参数

    sql
    -- 设置从节点角色
    ALTER SYSTEM SET hot_standby = on;
    ALTER SYSTEM SET max_standby_streaming_delay = '30s';
  5. 创建复制用户

    sql
    -- 在主节点上创建复制用户
    CREATE USER replicator REPLICATION LOGIN PASSWORD 'Replication@123';
  6. 启动从节点的复制进程

    bash
    gs_ctl start -D /data/gaussdb/slave --crash-recovery
  7. 验证主从复制状态

    sql
    -- 在主节点上查看复制状态
    SELECT * FROM pg_stat_replication;
    
    -- 在从节点上查看复制延迟
    SELECT * FROM pg_stat_wal_receiver;

主从架构的优势

高可用性

  • 主节点故障时,可快速将从节点提升为主节点
  • 减少数据库 downtime,提高业务连续性
  • 支持自动故障转移,降低人工干预成本

负载均衡

  • 从节点可处理只读请求,分担主节点的读负载
  • 提高整体系统的并发处理能力
  • 支持水平扩展读性能

数据安全

  • 数据在多个节点上有冗余副本,降低数据丢失风险
  • 支持跨机房部署,提高数据的容灾能力
  • 可在从节点上进行备份操作,不影响主节点性能

维护便利

  • 可在从节点上进行查询、报表生成等操作
  • 支持滚动升级,减少系统维护对业务的影响
  • 可在从节点上进行数据验证和测试

主从架构的挑战与解决方案

复制延迟

  • 问题:从节点可能会因为网络延迟、负载过高或硬件性能差异导致复制延迟
  • 解决方案
    • 优化网络连接,减少网络延迟
    • 确保从节点的硬件性能不低于主节点
    • 调整复制参数,如增加 WAL 发送和接收的缓冲区大小
    • 监控复制延迟,设置合理的告警阈值

脑裂问题

  • 问题:主从节点之间的网络连接中断,导致从节点认为主节点故障而提升为主节点,形成双主局面
  • 解决方案
    • 使用仲裁机制(如 Zookeeper 或 etcd)
    • 配置合理的故障检测时间
    • 实现 fencing 机制,防止故障节点继续提供服务

数据一致性

  • 问题:在异步复制模式下,主节点故障可能导致未复制到从节点的数据丢失
  • 解决方案
    • 根据业务需求选择合适的复制模式
    • 关键业务使用同步或半同步复制
    • 实现数据一致性校验机制

主从架构的最佳实践

节点配置建议

  • 主从节点使用相同或相似的硬件配置
  • 确保从节点的存储性能不低于主节点
  • 主从节点之间使用高速网络连接

复制模式选择

  • 对数据一致性要求极高的场景:使用同步复制
  • 对性能要求高,可容忍少量数据丢失的场景:使用异步复制
  • 大多数生产场景:使用半同步复制

监控与告警

  • 监控主从节点的健康状态
  • 监控复制延迟,设置合理的告警阈值(如超过 30 秒)
  • 监控 WAL 日志的生成和应用情况
  • 监控复制连接的稳定性

备份策略

  • 在主节点或从节点上定期执行全量备份
  • 配置 WAL 日志归档,确保可进行时间点恢复
  • 定期测试从节点的恢复能力

故障转移演练

  • 定期进行主从切换演练,验证故障转移机制的有效性
  • 制定详细的故障转移流程和操作手册
  • 确保相关人员熟悉故障转移操作

常见问题(FAQ)

Q1: 主从架构中,从节点可以处理写操作吗?

A1: 不可以。在标准的主从架构中,从节点只能处理只读请求。所有写操作必须发送到主节点,然后通过复制机制同步到从节点。如果需要从节点支持写操作,应考虑使用集群架构或分布式架构。

Q2: 如何监控主从复制延迟?

A2: 可以通过以下方式监控主从复制延迟:

  • 在主节点上查看 pg_stat_replication 视图的 write_lagflush_lagreplay_lag 字段
  • 在从节点上查看 pg_stat_wal_receiver 视图的 replay_lsn 与主节点的 current_lsn 之差
  • 使用 GaussDB 提供的监控工具,如 GS Monitor 或第三方监控系统

Q3: 主节点故障后,如何手动将从节点提升为主节点?

A3: 手动提升从节点为主节点的步骤:

  1. 确认主节点确实故障,无法恢复
  2. 在从节点上执行提升操作:gs_ctl promote -D /data/gaussdb/slave
  3. 更新应用程序的数据库连接字符串,指向新的主节点
  4. 重新配置其他从节点连接到新的主节点
  5. 修复原主节点的故障,然后将其配置为新主节点的从节点

Q4: 主从架构支持多少个从节点?

A4: GaussDB 主从架构支持多个从节点,具体数量取决于:

  • 主节点的性能和网络带宽
  • 复制模式(同步复制会影响主节点的并发能力)
  • 从节点的硬件配置和负载情况

一般来说,一个主节点可以支持 5-10 个从节点,但建议根据实际测试结果调整。

Q5: 如何优化主从复制性能?

A5: 优化主从复制性能的方法:

  • 使用高速网络连接主从节点
  • 调整 wal_buffersmax_wal_senders 等参数
  • 确保从节点的硬件性能不低于主节点
  • 考虑使用增量备份或并行复制
  • 优化主节点的写操作,减少大事务

Q6: 主从架构与集群架构有什么区别?

A6: 主从架构与集群架构的主要区别:

  • 主从架构:只有一个主节点处理写操作,从节点提供只读服务和备份
  • 集群架构:多个节点都可以处理写操作,数据分布在多个节点上
  • 主从架构更适合读多写少的场景,集群架构适合大规模分布式场景
  • 主从架构部署和维护相对简单,集群架构复杂度较高

Q7: 从节点可以同时作为其他节点的主节点吗?

A7: 可以,这种架构称为级联复制(Cascading Replication)。级联复制允许从节点将数据复制给其他从节点,减轻主节点的复制压力。但需要注意级联复制会增加复制延迟,因为数据需要经过中间节点转发。

Q8: 如何处理主从复制中断的情况?

A8: 处理主从复制中断的步骤:

  1. 查看复制中断的原因(网络问题、主节点故障、从节点故障等)
  2. 修复导致中断的问题
  3. 重新建立主从复制连接:
    • 如果中断时间较短,可以使用 gs_ctl restart -D /data/gaussdb/slave --crash-recovery 重新启动从节点
    • 如果中断时间较长,可能需要使用主节点的基础备份重新初始化从节点
  4. 验证复制状态恢复正常

Q9: 主从架构支持跨机房部署吗?

A9: 支持。主从架构可以部署在不同的机房,实现跨机房容灾。但需要注意:

  • 跨机房部署会增加网络延迟,影响复制性能
  • 建议使用异步或半同步复制模式
  • 确保机房之间的网络连接稳定可靠
  • 考虑使用专线连接,提高网络带宽和稳定性

Q10: 如何升级主从架构的 GaussDB 版本?

A10: 升级主从架构的 GaussDB 版本建议采用滚动升级方式:

  1. 先升级所有从节点
  2. 执行主从切换,将其中一个从节点提升为主节点
  3. 升级原主节点
  4. 将原主节点配置为新主节点的从节点

这种方式可以减少数据库的 downtime,提高升级过程的安全性。