外观
GaussDB 高可用相关参数
主从复制参数
synchronous_commit
参数说明:控制事务提交时的同步方式
默认值:on
可选值:
- off:事务提交时不等待WAL写入磁盘
- local:事务提交时等待WAL写入本地磁盘
- remote_write:事务提交时等待WAL发送到远程服务器
- remote_apply:事务提交时等待WAL在远程服务器应用
- on:等同于remote_write
配置建议:
- 高可用性要求高的场景:设置为remote_apply
- 性能要求高的场景:设置为remote_write或local
- 测试环境:可以设置为off
bash# 设置参数 gs_guc set -D /data/gaussdb -c "synchronous_commit=remote_apply"
wal_sender_timeout
参数说明:主库发送WAL数据到从库的超时时间(毫秒)
默认值:60000
取值范围:1000~2147483647
配置建议:
- 网络稳定的环境:保持默认值
- 网络不稳定的环境:适当增大值
bash# 设置参数 gs_guc set -D /data/gaussdb -c "wal_sender_timeout=120000"
wal_receiver_timeout
参数说明:从库接收WAL数据的超时时间(毫秒)
默认值:60000
取值范围:1000~2147483647
配置建议:
- 与wal_sender_timeout保持一致
bash# 设置参数 gs_guc set -D /data/gaussdb -c "wal_receiver_timeout=120000"
故障切换参数
hot_standby_feedback
参数说明:控制从库是否向主库反馈热点备库的状态
默认值:off
可选值:on, off
配置建议:
- 启用后可以避免主库清理从库仍在使用的WAL文件
- 建议在有大量长查询的从库上启用
bash# 设置参数 gs_guc set -D /data/gaussdb -c "hot_standby_feedback=on"
max_wal_senders
参数说明:允许的最大WAL发送进程数
默认值:10
取值范围:0~100
配置建议:
- 根据从库数量适当调整
- 建议设置为从库数量+2
bash# 设置参数 gs_guc set -D /data/gaussdb -c "max_wal_senders=15"
max_replication_slots
参数说明:允许的最大复制槽数量
默认值:10
取值范围:0~100
配置建议:
- 与max_wal_senders保持一致或略大
- 建议设置为从库数量+2
bash# 设置参数 gs_guc set -D /data/gaussdb -c "max_replication_slots=15"
数据一致性参数
wal_level
参数说明:控制WAL日志的详细程度
默认值:replica
可选值:
- minimal:只记录最基本的WAL信息
- replica:记录足够的信息用于WAL归档和复制
- logical:记录足够的信息用于逻辑复制
配置建议:
- 主从复制场景:设置为replica
- 逻辑复制场景:设置为logical
bash# 设置参数 gs_guc set -D /data/gaussdb -c "wal_level=replica"
checkpoint_timeout
参数说明:检查点超时时间
默认值:30min
取值范围:30s~1d
配置建议:
- 高可用性要求高的场景:适当减小值,如15min
- 性能要求高的场景:适当增大值,如1h
bash# 设置参数 gs_guc set -D /data/gaussdb -c "checkpoint_timeout=15min"
synchronous_standby_names
参数说明:指定同步复制的从库名称
默认值:''
配置格式:[FIRST] [num_sync] ( standby_name [, ...] )
配置建议:
- 单从库同步:设置为从库名称
- 多从库同步:设置为FIRST 1 (slave1, slave2)
bash# 设置参数 gs_guc set -D /data/gaussdb -c "synchronous_standby_names='FIRST 1 (slave1, slave2)'"
高可用监控参数
track_commit_timestamp
参数说明:控制是否跟踪事务提交时间戳
默认值:off
可选值:on, off
配置建议:
- 启用后可以使用pg_xact_commit_timestamp()函数获取事务提交时间
- 建议在需要精确跟踪事务提交时间的场景启用
bash# 设置参数 gs_guc set -D /data/gaussdb -c "track_commit_timestamp=on"
log_replication_commands
参数说明:控制是否记录复制相关命令
默认值:off
可选值:on, off
配置建议:
- 调试复制问题时:设置为on
- 生产环境:设置为off以减少日志量
bash# 设置参数 gs_guc set -D /data/gaussdb -c "log_replication_commands=on"
log_statement
参数说明:控制记录哪些SQL语句
默认值:none
可选值:
- none:不记录任何语句
- ddl:记录DDL语句
- mod:记录DDL和DML语句
- all:记录所有语句
配置建议:
- 生产环境:建议设置为ddl
- 调试环境:可以设置为mod或all
bash# 设置参数 gs_guc set -D /data/gaussdb -c "log_statement=ddl"
参数配置最佳实践
1. 根据业务需求调整
高可用性优先:
- synchronous_commit=remote_apply
- synchronous_standby_names设置为同步从库
- wal_level=replica
- checkpoint_timeout适当减小
性能优先:
- synchronous_commit=remote_write或local
- wal_level=replica
- checkpoint_timeout适当增大
- 可以考虑关闭hot_standby_feedback
2. 保持主从参数一致性
主从库的大部分参数应该保持一致
特别是与WAL相关的参数
可以使用gs_ssh工具批量配置参数
bash# 批量设置参数 gs_ssh -c "gs_guc set -D /data/gaussdb -c 'synchronous_commit=remote_apply'"
3. 定期监控参数效果
- 使用gs_check工具检查集群状态
- 监控复制延迟
- 分析数据库日志
- 根据监控结果调整参数
4. 测试参数变更影响
- 在测试环境验证参数变更
- 评估性能影响
- 评估可用性影响
- 制定回滚计划
常见问题(FAQ)
Q1: 如何选择合适的synchronous_commit值?
A1: 选择synchronous_commit值应根据业务对可用性和性能的要求:
- 高可用性要求高:remote_apply
- 性能要求高:remote_write或local
- 测试环境:off
Q2: 如何配置多从库同步?
A2: 可以使用synchronous_standby_names参数配置多从库同步,例如:
synchronous_standby_names='FIRST 2 (slave1, slave2, slave3)'表示前2个从库为同步从库,第3个从库为异步从库。
Q3: 如何监控复制延迟?
A3: 可以使用以下方法监控复制延迟:
- 查询pg_stat_replication视图
- 使用gs_om工具检查集群状态
- 配置监控系统,设置复制延迟告警
Q4: 主从复制中断后如何恢复?
A4: 主从复制中断后的恢复步骤:
- 检查中断原因(网络问题、参数配置问题等)
- 修复问题
- 重新建立复制连接
- 验证复制状态
Q5: 如何优化主从复制性能?
A5: 优化主从复制性能的方法:
- 调整synchronous_commit参数
- 增大wal_buffers参数
- 优化网络配置,提高带宽
- 合理设置checkpoint相关参数
- 考虑使用并行复制
