原文链接:https://www.gbase.cn/community/post/5492
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。
南大通用GBase 8c采用shared-nothing架构,在实际运维中可能遇到宕机的情况,本文针对数据节点故障,从五个典型现象进行分析,并提供解决方法。
1、备机处于Need Repair(WAL)状态
此类问题通常原因是由于操作不当或清理服务器时,造成备机WAL文件缺失、损坏,导致同步中断无法完成主备数据一致性恢复,此时备机进入需要修复的状态。常见于网络中断、主备切换异常或归档配置错误等场景。
影响程度:不影响业务正常运行,影响主备数据一致性
解决步骤:
(1)查看集群状态,执行命令:
su - gbase
gha_ctl monitor all -c实例名 -l http://dcs_url
此时备机状态为Need repair。
(2)判断是否出现网络故障、磁盘爆满等原因,根据服务器情况命令略有不同,以centos为例:
su - gbase
#判断是否能够连接
ping ip
#判断端口是否畅通
netstat -nalp| dn_端口
#判断数据磁盘是否已满
df -Th
(3)在排除原因2后,手动同步缺失日志。但若日志严重缺失,建议全量重建备机,执行命令:
gha_ctl build 备机名称 -b full -c gbase -l http://dcs_url
(4)服务验证,查看集群状态,备机状态是否为running:
su - gbase
gha_ctl monitor all -c实例名 -l http://dcs_url
2、备机处于Crashed状态
此类问题可能是由于备机硬件故障(如内存或磁盘损坏)、资源耗尽(如内存溢出)或软件错误(如进程异常终止)等原因,而导致崩溃。
影响程度:不影响业务正常运行,影响主备数据一致性
解决步骤:
(1)查看集群状态,执行命令:
su - gbase
gha_ctl monitor all -c实例名 -l http://dcs_url
此时备机状态为 crashed。
(2)检查崩溃日志
检查错误日志定位具体原因,可能如内存不足、文件权限错误等。
(3)硬件检查。判断是否出现网络故障、磁盘满等原因判断 data 路径是否正常。
su - gbase
#判断是否能够连接
ping ip
#判断端口是否畅通
netstat -nalp| dn_端口
#判断数据磁盘是否已满
df -Th
(4)尝试重启备机服务
gha_ctl start 备机名称 -c gbase -l http://dcs_url
若持续崩溃则通过备份恢复或重建备机恢复。
(5)重建备机
gha_ctl build 备机名称 -b full -c gbase -l http://dcs_url
(6)服务验证,查看集群状态,备机状态是否为running:
su - gbase
gha_ctl monitor all -c实例名 -l http://dcs_url
3、内存不足问题
此类问题是在客户端或日志里出现错误memory usage reach the max_dynamic_memory,且业务使用中也会出现报错。可能是由于SQL执行占用过高内存或配置参数不合理导致。
影响程度:影响业务正常运行,紧急度高
解决方法:
(1)监控内存使用。通过`MEMORY_NODE_DETAIL`视图观察内存分配,结合`pg_stat_activity`定位高内存消耗的SQL。优化复杂查询SQL语句。
(2)若SQL语句并不非常复杂,检查配置参数,避免超出系统可用内存限制。
su- gbase
gsql -d database名称 -p 端口
dataname=# show max_process_memory;
修改参数:
gs_guc reload -Z datanode -N all -I all -c "max_process_memory='**GB'"
重启数据库生效:
gha_ctl stop all -c gbase -l http://dcs_url
gha_ctl start all -c gbase -l http://dcs_url
(3)如还未能解决,必要时需要扩容硬件资源,增加物理内存。
4、DN节点服务启动失败
服务启动失败的原因主要有以下场景:
- 配置参数不合理,数据库因系统资源不足,或者配置参数不满足内部约束,启动失败。
- 目录权限不够。例如对/tmp 目录、数据目录的权限不足。
- 配置的端口已经被占用。
- 开启了系统防火墙导致数据库启动失败。
- 组成数据库的各台机器之间需要正确建立互信关系,在互信关系出现异常的情况下,数据库将无法启动。
- 数据库控制文件损坏。
影响程度:影响数据库使用,紧急度高
解决方法:
(1)首先确认是否由于参数配置不合理导致系统资源不足或不满足内部约束启动失败,在日志下查看是否已修改参数。适当调整。
(2)确认是否由于实例状态不正常,导致数据库启动失败。 通过 gha_ctl monitor 工具,查询当前数据库各主备机实例的状态。
如果发现某一实例状态为 Unknown 、 Down等异常状态,则以数据库用户登录到状态不正常的实例所在节点,查看该实例的日志检查状态异常的原因。
(3)目录权限不够处理办法。例如,对/tmp 目录、数据库数据目录的权限不足,执行命令:
su - gbase
chmod 777 /tmp
(4)确认是否由于配置的端口已经被占用,导致数据库启动失败
sysctl -a
查看 net.ipv4.ip_local_port_range,如果该实例配置的端口在系统随机占用端口号的范围内,则可以修改系统随机占用端口号的范围,确保GBase 8c部署配置文件中所有实例端口号均不在这个范围内。
检查某个端口是否被占用的命令如下:
netstat -anop | grep 端口号
(5)确认是否是由于开启了系统防火墙导致数据库确认是否是由于开启了系统防火墙导致数据库启动失败。
systemctl status firewalld
(6)确认是否由于互信关系出现异常,导致数据库无法启动
(7)确认是否由于数据库控制文件损坏或文件被清空,导致数据库无法启动
若主机控制文件损坏 , 可 触 发 备 机 failover,然后通过重建恢复原主机;若备机控制文件损坏,可直接通过重建方式恢复备机。
5、磁盘空间不足
在数据库使用过程中出现Error:No space left on device,此类问题为磁盘空间不足导致的。
影响程度:影响数据落盘
解决方法:
(1)查看数据磁盘信息
du --max-depth=1 -h 数据目录
df -h
(2)清理磁盘空间或磁盘扩容
删除无用数据,例如存放数据库各进程的运行日志,建议保留一个月。
对于无法清理出足够的空间,请对磁盘空间进行扩容。
以上故障的排查需结合日志分析、系统监控和配置等多种手段调整,例如日志分析和系统监控能够快速识别内存或磁盘瓶颈,参数优化和权限管理则是预防问题的关键。此外,建议定期进行备份和验证恢复的运维操作,以应对突发故障。
原文链接:https://www.gbase.cn/community/post/5492
更多精彩内容尽在南大通用GBase技术社区,南大通用致力于成为用户最信赖的数据库产品供应商。