外观
GaussDB 集群故障处理
节点故障处理
主节点故障
故障表现
- 主节点进程崩溃
- 无法连接到主节点
- 集群自动触发故障转移
处理流程
确认故障:
bash# 检查主节点状态 gs_ctl status -D /opt/huawei/install/data/dn # 检查集群状态 gs_om -t status查看故障日志:
bash# 查看主节点日志 tail -n 100 /opt/huawei/install/data/dn/pg_log/postgresql-$(date +%Y-%m-%d).log等待自动故障转移:
- 检查备节点是否成功提升为主节点
- 验证新主节点状态
恢复原主节点:
bash# 修复原主节点故障 # 启动原主节点(将作为备节点加入集群) gs_ctl start -D /opt/huawei/install/data/dn # 检查复制状态 gsql -d postgres -c "SELECT * FROM pg_stat_replication;"验证集群状态:
bashgs_om -t status
备节点故障
故障表现
- 备节点进程崩溃
- 主备复制中断
- 备节点状态异常
处理流程
确认故障:
sql-- 查看复制状态 SELECT * FROM pg_stat_replication;查看故障日志:
bashtail -n 100 /opt/huawei/install/data/dn/pg_log/postgresql-$(date +%Y-%m-%d).log恢复备节点:
bash# 修复备节点故障 # 启动备节点 gs_ctl start -D /opt/huawei/install/data/dn # 检查复制状态 gsql -d postgres -c "SELECT * FROM pg_stat_replication;"验证复制状态:
sqlSELECT application_name, state, sync_state, pg_wal_lsn_diff(sent_lsn, replay_lsn) AS lsn_diff FROM pg_stat_replication;
网络故障处理
网络分区
故障表现
- 集群被分割为多个子网
- 节点间无法通信
- 可能出现脑裂现象
处理流程
确认网络分区:
bash# 检查节点间通信 ping node2 # 检查集群状态 gs_om -t status隔离少数派节点:
- 确定多数派和少数派节点
- 隔离少数派节点,避免脑裂
修复网络问题:
- 联系网络管理员修复网络
- 验证网络恢复
恢复集群:
bash# 重启少数派节点 gs_ctl restart -D /opt/huawei/install/data/dn # 检查集群状态 gs_om -t status
网络延迟
故障表现
- 主备复制延迟增加
- 事务提交延迟增加
- 集群性能下降
处理流程
确认网络延迟:
bash# 测试节点间网络延迟 ping -c 10 node2调整复制模式:
sql-- 临时调整为异步复制 ALTER SYSTEM SET synchronous_commit = off; -- 或调整同步备节点数量 ALTER SYSTEM SET synchronous_standby_names = 'ANY 1 (standby1, standby2)';监控复制延迟:
sqlSELECT application_name, pg_wal_lsn_diff(sent_lsn, replay_lsn) AS lsn_diff, now() - replay_timestamp AS replay_delay FROM pg_stat_replication;修复网络问题:
- 优化网络配置
- 增加网络带宽
- 调整网络拓扑
存储故障处理
磁盘损坏
故障表现
- 节点无法启动
- 磁盘 I/O 错误
- 存储相关进程崩溃
处理流程
确认磁盘故障:
bash# 检查磁盘状态 fdisk -l # 检查文件系统 df -h隔离故障节点:
bash# 停止故障节点 gs_ctl stop -D /opt/huawei/install/data/dn -m fast更换故障磁盘:
- 联系硬件维护人员更换磁盘
- 重新格式化和挂载磁盘
恢复数据:
bash# 使用备份恢复数据 gs_restore -D /opt/huawei/install/data/dn -F t /backup/backup_file.tar # 启动节点 gs_ctl start -D /opt/huawei/install/data/dn验证节点状态:
bashgs_ctl status -D /opt/huawei/install/data/dn
存储空间不足
故障表现
- 数据库写入失败
- 磁盘空间告警
- 日志写入失败
处理流程
确认存储空间不足:
bash# 检查磁盘空间 df -h # 查看大文件 du -sh /opt/huawei/install/data/dn/* | sort -rh | head -10临时清理空间:
bash# 清理旧日志文件 rm /opt/huawei/install/data/dn/pg_log/postgresql-2023*.log # 清理临时文件 rm -rf /opt/huawei/install/data/dn/base/pgsql_tmp/*永久解决方案:
- 增加磁盘容量
- 调整 WAL 保留策略
# 调整 WAL 保留时间 wal_keep_segments = 1024- 优化备份策略
- 归档历史数据
验证空间释放:
bashdf -h
软件故障处理
数据库进程崩溃
故障表现
- 无法连接到数据库
- 数据库进程不存在
- 集群状态异常
处理流程
确认进程崩溃:
bash# 检查数据库进程 ps -ef | grep postgres # 检查进程状态 gs_ctl status -D /opt/huawei/install/data/dn查看崩溃日志:
bash# 查看核心转储文件 ls -la /opt/huawei/install/data/dn/core.* # 查看错误日志 tail -n 200 /opt/huawei/install/data/dn/pg_log/postgresql-$(date +%Y-%m-%d).log重启数据库:
bash# 重启数据库 gs_ctl restart -D /opt/huawei/install/data/dn -m fast # 检查状态 gs_ctl status -D /opt/huawei/install/data/dn分析崩溃原因:
- 检查最近的操作记录
- 分析 SQL 语句
- 检查参数配置
修复根本原因:
- 调整参数配置
- 优化 SQL 查询
- 应用补丁或升级版本
配置错误
故障表现
- 数据库无法启动
- 服务异常
- 日志中出现配置错误信息
处理流程
查看错误日志:
bashtail -n 100 /opt/huawei/install/data/dn/pg_log/postgresql-$(date +%Y-%m-%d).log恢复正确配置:
bash# 使用备份的配置文件 cp /backup/postgresql.conf /opt/huawei/install/data/dn/ cp /backup/pg_hba.conf /opt/huawei/install/data/dn/重启数据库:
bashgs_ctl restart -D /opt/huawei/install/data/dn -m fast验证配置:
sql-- 查看参数配置 SHOW parameter_name;
数据故障处理
数据损坏
故障表现
- 数据库启动失败
- 查询特定表时出错
- 日志中出现数据损坏信息
处理流程
确认数据损坏:
bash# 执行数据一致性检查 gs_checkdata -D /opt/huawei/install/data/dn隔离故障节点:
bashgs_ctl stop -D /opt/huawei/install/data/dn -m fast恢复数据:
bash# 使用最新备份恢复 gs_restore -D /opt/huawei/install/data/dn -F t /backup/latest_backup.tar # 应用 WAL 日志恢复到故障前状态 gs_ctl promote -D /opt/huawei/install/data/dn验证数据完整性:
sql-- 执行数据库完整性检查 VACUUM ANALYZE VERBOSE; -- 检查表数据 SELECT count(*) FROM critical_table;
数据一致性问题
故障表现
- 主备数据不一致
- 复制延迟持续增加
- 数据校验失败
处理流程
确认数据不一致:
sql-- 查看复制状态 SELECT application_name, pg_wal_lsn_diff(sent_lsn, replay_lsn) AS lsn_diff FROM pg_stat_replication;重新同步数据:
bash# 停止备节点 gs_ctl stop -D /opt/huawei/install/data/dn_slave # 清空备节点数据目录 rm -rf /opt/huawei/install/data/dn_slave/* # 使用主节点基础备份重建备节点 gs_basebackup -D /opt/huawei/install/data/dn_slave -F p -X stream -h master_host -p 5432 -U repl_user # 启动备节点 gs_ctl start -D /opt/huawei/install/data/dn_slave验证数据一致性:
sql-- 检查复制状态 SELECT * FROM pg_stat_replication; -- 对比主备数据 -- 在主节点执行 SELECT md5(CAST((SELECT * FROM critical_table ORDER BY id) AS text)); -- 在备节点执行相同查询,对比结果
人为故障处理
误删除数据
故障表现
- 数据丢失
- 用户报告数据不存在
- 误操作日志记录
处理流程
确认误操作:
bash# 查看操作日志 tail -n 100 /opt/huawei/install/data/dn/pg_log/postgresql-$(date +%Y-%m-%d).log立即停止写入:
bash# 禁止新的写入操作(如果可能) gs_ctl stop -D /opt/huawei/install/data/dn -m smart使用备份恢复:
bash# 使用时间点恢复到误操作前 gs_restore -d postgres -F t -P "2023-01-01 12:00:00" /backup/backup_file.tar验证数据恢复:
sql-- 检查恢复的数据 SELECT * FROM critical_table WHERE id = deleted_id;
误修改配置
故障表现
- 数据库性能下降
- 服务异常
- 配置与预期不符
处理流程
查看当前配置:
sqlSHOW parameter_name;恢复正确配置:
sql-- 恢复参数到默认值 ALTER SYSTEM RESET parameter_name; -- 或恢复到特定值 ALTER SYSTEM SET parameter_name = 'correct_value'; -- 重新加载配置 SELECT pg_reload_conf();验证配置效果:
- 监控数据库性能
- 检查服务状态
- 验证业务功能
集群故障预防措施
定期备份
bash
# 制定定期备份策略
# 全量备份
0 2 * * * gs_basebackup -D /backup/$(date +%Y%m%d) -F t -X stream -v
# 增量备份
0 */6 * * * gs_basebackup -D /backup/incremental/$(date +%Y%m%d_%H%M) -F t -X stream -c fast -v监控与告警
- 配置关键指标监控
- 设置合理的告警阈值
- 实时监控集群状态
- 定期检查日志
高可用配置
- 配置多副本
- 实现自动故障转移
- 部署跨可用区架构
- 配置负载均衡
定期演练
- 定期进行故障演练
- 测试故障转移流程
- 验证恢复时间
- 完善故障处理文档
权限管理
- 严格控制数据库权限
- 实施操作审计
- 多人复核重要操作
- 限制敏感操作
故障处理工具
内置工具
- gs_ctl:节点管理工具
- gs_om:集群管理工具
- gs_checkperf:性能检查工具
- gs_checkdata:数据一致性检查工具
- gs_basebackup:基础备份工具
- gs_restore:恢复工具
第三方工具
- Prometheus + Grafana:监控与可视化
- Zabbix:系统监控
- ELK Stack:日志分析
故障处理案例分析
案例一:主节点硬件故障
故障描述
- 主节点服务器突然断电
- 导致主节点无法启动
- 集群自动触发故障转移
处理过程
确认故障:
bashgs_om -t status验证新主节点:
bashgs_ctl status -D /opt/huawei/install/data/dn_slave修复原主节点:
- 更换故障硬件
- 重新安装操作系统
- 恢复数据库软件
重建复制:
bashgs_basebackup -D /opt/huawei/install/data/dn -F p -X stream -h new_master_host -p 5432 -U repl_user gs_ctl start -D /opt/huawei/install/data/dn验证集群状态:
bashgs_om -t status
经验教训
- 定期检查硬件状态
- 配置完善的监控和告警
- 定期进行故障演练
案例二:网络分区故障
故障描述
- 数据中心网络分区
- 集群被分为两个子网
- 出现双主节点情况
处理过程
确认网络分区:
bashping node2识别多数派:
- 确认每个子网的节点数量
- 识别多数派节点
隔离少数派:
- 关闭少数派节点
- 避免数据不一致
修复网络:
- 联系网络管理员修复网络
- 验证网络恢复
恢复集群:
bashgs_ctl restart -D /opt/huawei/install/data/dn
经验教训
- 配置网络分区检测
- 实现自动隔离机制
- 优化网络拓扑
常见问题(FAQ)
Q1: 如何快速定位集群故障?
A1: 快速定位集群故障的方法:
- 检查集群状态:
gs_om -t status - 检查节点状态:
gs_ctl status -D /path/to/data - 查看日志文件:
tail -n 200 /path/to/data/pg_log/postgresql.log - 检查硬件状态:磁盘、内存、CPU 等
- 检查网络连接:
ping、telnet等命令
Q2: 集群自动故障转移失败怎么办?
A2: 集群自动故障转移失败的处理方法:
- 手动执行故障转移:
gs_ctl promote -D /path/to/slave/data - 检查故障转移日志,分析失败原因
- 修复故障转移配置
- 测试故障转移功能
Q3: 如何避免集群脑裂?
A3: 避免集群脑裂的方法:
- 配置多数派机制
- 实现网络分区检测
- 部署共享存储锁定
- 配置 fencing 机制
- 定期检查集群状态
Q4: 如何恢复损坏的数据?
A4: 恢复损坏数据的方法:
- 使用最新备份恢复
- 应用 WAL 日志进行时间点恢复
- 对于单表损坏,可使用从其他节点导出的数据恢复
- 严重损坏时可能需要重建节点
Q5: 如何预防人为故障?
A5: 预防人为故障的方法:
- 严格的权限管理
- 操作审计和日志记录
- 多人复核重要操作
- 定期培训和演练
- 自动化操作脚本,减少手动操作
Q6: 如何测试集群的高可用性?
A6: 测试集群高可用性的方法:
- 模拟节点故障:关闭主节点,检查故障转移
- 模拟网络故障:断开节点间网络连接
- 模拟存储故障:填满磁盘空间
- 定期进行故障演练
- 测试恢复时间目标(RTO)和恢复点目标(RPO)
