数据库常见故障诊断与处理

常见故障诊断与处理

硬件故障

编号名称症状处理
H01Primary节点宕机pg_up = 0 持续1-3分钟无需立即介入。
事后补充实例
从接入域名摘除
执行 Case 8:集群角色调整
H02Replica节点宕机pg_up = 0 持续1-3分钟无需立即介入。
事后补充实例,
从接入域名摘除
执行 Case 8:集群角色调整
H03Primary节点网络分区失去 主实例所有监控数据,网路不可达确认Failover情况
必要时强制Fencing旧主库
H04Replica节点网络分区失去 从实例所有监控数据,网路不可达通常无影响,等待恢复
联系运维与网络工程师处理
H05TCP重传率过高TCP Retrans长时间居高不下,大量Conn Reset,大量查询请求失败找运维与网络工程师处理
H06节点内存错误EDAC计数器增长,系统错误日志确认从库内存无错后
执行Case 10:集群主从切换
H07磁盘坏块,数据腐坏查询结果与日志出现 can’t read block 等错误信息执行Case 10:集群主从切换
使用数据恢复工具,人工恢复数据
R01CPU使用率高CPU / Load / Pressure指标高top确认大CPU占比程序并清理
如为雪崩,执行杀查询止损。
R02出现OOM出现进程Failure,OOM消息,内存使用高,开始使用SWAP确认内存,确认SWAP
top确认大内存占用程序并清理
重新拉起被杀进程
紧急添加SWAP分区
R03磁盘满磁盘写满
数据库Crash
大量shell命令无法执行
移除 /pg/dummy 释放应急空间
检查并处理WAL堆积
检查并处理大量Log文件
确认业务是否有可清理数据
R06磁盘/网卡IO过高磁盘/网卡 BandWidth过大
磁盘 > 2GB/s
网络 > 1 GB/s
检查使用网络/磁盘的应用程序,如备份,添加限速。

软件故障

编号名称症状处理
SP1数据库进程中止ps aux 找不到postgres进程检查Postgres,Patroni状态
确认Failover结果,或手工执行Failover
SP2连接池进程中止systemctl status pgbouncer Failure重启服务组件重置服务组件
SP3Primary Patroni进程中止systemctl status patroni Failure同上,进入维护模式,重启或重置 Patroni
SP4Primary Consul进程中止systemctl status consul Failure同上,进入维护模式,重启或重置 Consul
S05HAProxy进程中止systemctl status haproxy Failure同上,重启或重置 Haproxy
S06连接池污染出现类似于 Cannot execute xxx on readonly transactions 的报错重启Pgbouncer连接池
或配置 server_reset_query
S07连接池无法连接至数据库pgbouncer can not connect to server检查用户、密码、HBA配置是否正确
执行 Case 4:集群业务用户创建 刷新用户
S08连接池达到QPS瓶颈PGbouncer QPS 达到 3~4W,CPU使用率达到100%使用多个Pgbouncer(不推荐)
使用Default服务绕开Pgbouncer
通知业务方限速
S09DCS Server不可用自动切换模式下,所有主库将在TTL后进入不可写状态立即将所有集群设置为维护模式
S10DCS Agent不可用若为从库无影响,若为主库,会降级为从库,集群不可写入立即将该集群设置为维护模式
S11XID Wraparound年龄剩余1000w时,进入保护模式。应通过监控提前避免此问题
定位年龄过大的数据库与表,执行紧急清理
迅速定位阻塞Vacuum的原因并解决
进入单用户模式下恢复
S12WAL堆积WAL大小持续增长多次执行CHECKPOINT
确认WAL归档状态
确认从库上是否有未结束超长事务
确认是否有复制槽阻止WAL回收

人为问题

编号名称症状处理
M01误删数据库集群数据库集群没了使用冷备恢复集群
准备跑路
M02误将某实例提升为主库脑裂自动模式下无需处理,否则脑裂
M03误删数据数据没了停止VACUUM,使用 pg_dirtyread提取。
从延迟备库中提取
从冷备份中提取并恢复
M04误删表表没了从延迟备库中提取
从冷备份中提取并恢复
M05整型序列号溢出Sequence超出INTMAX参考整型主键在线升级手册处理
M06插入数据因主键序列号重复而冲突violate constratint …增长序列号值(如+100000)
M07慢查询堆积/雪崩大量慢查询日志使用 pg_terminate_backend 周期性清理慢查询(如每1秒)
M08死锁堆积/雪崩锁堆积使用 pg_terminate_backend 周期性清理查询(如每1秒)
M09HBA拒绝访问no hba entry for xxxCase 6:集群HBA规则调整
M10用户密码错误password auth failure for xxxCase 4:集群业务用户创建
M11访问权限不足permission denied for x检查用户是否使用正确的管理员创建对象
参考 Default Privilege 手工修正对象权限

最后修改 2022-05-27: init commit (1e3e284)