Skip to content

GaussDB 同步模式

同步复制

工作原理

  1. 主节点接收事务请求
  2. 主节点执行事务,写入 WAL(Write-Ahead Logging)
  3. 主节点等待所有备节点确认已接收并写入 WAL
  4. 所有备节点确认后,主节点提交事务
  5. 返回结果给客户端

配置方法

# postgresql.conf 配置
replconninfo1 = 'localhost=127.0.0.1 localport=10001 remotehost=127.0.0.1 remoteport=10002 localservice=10003 remoteservice=10004 trustlevel=3'

优缺点

优点

  • 数据一致性最高
  • 无数据丢失风险
  • 适合对数据一致性要求高的场景

缺点

  • 性能影响较大
  • 事务提交延迟高
  • 对网络要求严格
  • 备节点故障会影响主节点

适用场景

  • 金融交易系统
  • 核心业务系统
  • 对数据一致性要求极高的场景

半同步复制

工作原理

  1. 主节点接收事务请求
  2. 主节点执行事务,写入 WAL
  3. 主节点等待至少一个备节点确认已接收并写入 WAL
  4. 收到确认后,主节点提交事务
  5. 返回结果给客户端

配置方法

# postgresql.conf 配置
replconninfo1 = 'localhost=127.0.0.1 localport=10001 remotehost=127.0.0.1 remoteport=10002 localservice=10003 remoteservice=10004 trustlevel=2'

优缺点

优点

  • 数据一致性较高
  • 性能影响适中
  • 对网络要求相对较低
  • 单个备节点故障不影响主节点

缺点

  • 仍有一定的性能影响
  • 在极端情况下可能丢失数据

适用场景

  • 大多数企业级应用
  • 对数据一致性有较高要求的场景
  • 对性能有一定要求的场景

异步复制

工作原理

  1. 主节点接收事务请求
  2. 主节点执行事务,写入 WAL
  3. 主节点立即提交事务,无需等待备节点确认
  4. 返回结果给客户端
  5. 主节点异步将 WAL 发送给备节点

配置方法

# postgresql.conf 配置
replconninfo1 = 'localhost=127.0.0.1 localport=10001 remotehost=127.0.0.1 remoteport=10002 localservice=10003 remoteservice=10004 trustlevel=1'

优缺点

优点

  • 性能最佳
  • 事务提交延迟最低
  • 对网络要求最低
  • 备节点故障不影响主节点

缺点

  • 数据一致性最低
  • 有数据丢失风险
  • 主节点故障可能导致数据丢失

适用场景

  • 非核心业务系统
  • 对性能要求极高的场景
  • 数据可以接受一定程度丢失的场景
  • 读写分离架构中的只读节点

同步模式切换

在线切换方法

bash
# 使用 gs_guc 工具在线修改同步模式
gs_guc reload -Z datanode -N all -I all -c "replconninfo1 = 'localhost=127.0.0.1 localport=10001 remotehost=127.0.0.1 remoteport=10002 localservice=10003 remoteservice=10004 trustlevel=2'"

切换注意事项

  • 切换前需评估对系统性能的影响
  • 切换过程中可能出现短暂的性能波动
  • 切换后需验证复制状态
  • 建议在低峰期进行切换

同步模式监控

复制状态监控

sql
-- 查看复制状态
SELECT * FROM pg_stat_replication;

-- 查看同步状态
SELECT * FROM pg_stat_replication WHERE sync_state IN ('sync', 'quorum');

-- 查看复制延迟
SELECT application_name, state, sync_state, 
       pg_wal_lsn_diff(sent_lsn, replay_lsn) AS lsn_diff,
       now() - replay_timestamp AS replay_delay
FROM pg_stat_replication;

性能监控

  • 监控事务提交延迟
  • 监控 WAL 发送延迟
  • 监控备节点回放延迟
  • 监控系统吞吐量变化

最佳实践

同步模式选择建议

  • 金融核心系统:建议使用同步复制
  • 企业级应用:建议使用半同步复制
  • 互联网应用:建议使用异步复制
  • 读写分离架构:主备之间使用半同步,只读节点使用异步

网络要求

  • 同步复制:网络延迟 < 1ms
  • 半同步复制:网络延迟 < 5ms
  • 异步复制:网络延迟 < 50ms

节点配置建议

  • 同步复制:建议配置 2-3 个备节点
  • 半同步复制:建议配置至少 2 个备节点
  • 异步复制:根据需求配置多个备节点

故障处理

  • 同步复制:备节点故障时,可临时切换到半同步或异步模式
  • 半同步复制:单个备节点故障不影响,可继续使用
  • 异步复制:备节点故障不影响主节点

常见问题(FAQ)

Q1: 如何查看当前的同步模式?

A1: 可以通过以下方法查看:

  1. 查看配置文件:
    bash
    grep replconninfo /opt/huawei/install/data/dn/postgresql.conf
  2. 使用 SQL 查询:
    sql
    SHOW replconninfo1;

Q2: 同步模式切换会影响业务吗?

A2: 同步模式切换可能会对业务产生一定影响:

  • 从异步切换到同步/半同步:事务提交延迟会增加,可能影响系统吞吐量
  • 从同步/半同步切换到异步:事务提交延迟会减少,系统吞吐量可能提高
  • 建议在低峰期进行切换,并提前做好性能评估

Q3: 备节点故障对主节点有什么影响?

A3: 不同同步模式下影响不同:

  • 同步复制:备节点故障会导致主节点事务无法提交,影响整个系统
  • 半同步复制:单个备节点故障不影响主节点,主节点会自动降级为异步模式
  • 异步复制:备节点故障不影响主节点

Q4: 如何选择合适的同步模式?

A4: 选择同步模式时需要考虑以下因素:

  1. 数据一致性要求
  2. 系统性能要求
  3. 网络延迟情况
  4. 业务场景需求
  5. 高可用性要求

Q5: 同步复制一定不会丢失数据吗?

A5: 同步复制在大多数情况下不会丢失数据,但在以下极端情况下仍可能丢失数据:

  • 主节点和所有备节点同时故障
  • 网络分区导致脑裂
  • 硬件故障导致数据损坏

因此,即使使用同步复制,也需要定期进行备份和恢复测试。