外观
GaussDB 同步模式
同步复制
工作原理
- 主节点接收事务请求
- 主节点执行事务,写入 WAL(Write-Ahead Logging)
- 主节点等待所有备节点确认已接收并写入 WAL
- 所有备节点确认后,主节点提交事务
- 返回结果给客户端
配置方法
# postgresql.conf 配置
replconninfo1 = 'localhost=127.0.0.1 localport=10001 remotehost=127.0.0.1 remoteport=10002 localservice=10003 remoteservice=10004 trustlevel=3'优缺点
优点
- 数据一致性最高
- 无数据丢失风险
- 适合对数据一致性要求高的场景
缺点
- 性能影响较大
- 事务提交延迟高
- 对网络要求严格
- 备节点故障会影响主节点
适用场景
- 金融交易系统
- 核心业务系统
- 对数据一致性要求极高的场景
半同步复制
工作原理
- 主节点接收事务请求
- 主节点执行事务,写入 WAL
- 主节点等待至少一个备节点确认已接收并写入 WAL
- 收到确认后,主节点提交事务
- 返回结果给客户端
配置方法
# postgresql.conf 配置
replconninfo1 = 'localhost=127.0.0.1 localport=10001 remotehost=127.0.0.1 remoteport=10002 localservice=10003 remoteservice=10004 trustlevel=2'优缺点
优点
- 数据一致性较高
- 性能影响适中
- 对网络要求相对较低
- 单个备节点故障不影响主节点
缺点
- 仍有一定的性能影响
- 在极端情况下可能丢失数据
适用场景
- 大多数企业级应用
- 对数据一致性有较高要求的场景
- 对性能有一定要求的场景
异步复制
工作原理
- 主节点接收事务请求
- 主节点执行事务,写入 WAL
- 主节点立即提交事务,无需等待备节点确认
- 返回结果给客户端
- 主节点异步将 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: 可以通过以下方法查看:
- 查看配置文件:bash
grep replconninfo /opt/huawei/install/data/dn/postgresql.conf - 使用 SQL 查询:sql
SHOW replconninfo1;
Q2: 同步模式切换会影响业务吗?
A2: 同步模式切换可能会对业务产生一定影响:
- 从异步切换到同步/半同步:事务提交延迟会增加,可能影响系统吞吐量
- 从同步/半同步切换到异步:事务提交延迟会减少,系统吞吐量可能提高
- 建议在低峰期进行切换,并提前做好性能评估
Q3: 备节点故障对主节点有什么影响?
A3: 不同同步模式下影响不同:
- 同步复制:备节点故障会导致主节点事务无法提交,影响整个系统
- 半同步复制:单个备节点故障不影响主节点,主节点会自动降级为异步模式
- 异步复制:备节点故障不影响主节点
Q4: 如何选择合适的同步模式?
A4: 选择同步模式时需要考虑以下因素:
- 数据一致性要求
- 系统性能要求
- 网络延迟情况
- 业务场景需求
- 高可用性要求
Q5: 同步复制一定不会丢失数据吗?
A5: 同步复制在大多数情况下不会丢失数据,但在以下极端情况下仍可能丢失数据:
- 主节点和所有备节点同时故障
- 网络分区导致脑裂
- 硬件故障导致数据损坏
因此,即使使用同步复制,也需要定期进行备份和恢复测试。
