暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

包拯断案 | 数据库连接突然中断?别慌@还故障一个真相

万里数据库 2024-04-30
257

提问:作为DBA运维的你,是否有过这些烦恼


1、项目开发时,突然发现数据库高可用集群无法连接?
2、虽然数据库整体服务正常,但是应用连接的节点不可用,导致服务中断,不知是什么原因?


心中有章,遇事不慌


作为DBA的你,遇到问题无从下手,除了在问题面前徘徊,还能如何选择?如果你一次或多次遇到该问题还是无法解决,又很懊恼,该如何排忧呢?关注公众号,关注《包拯断案》专栏,让小编为你排忧解难~




#包拯秘籍#

秘籍不能少,一整套故障排错及应对策略送给你,让你像包拯一样断案如神:


#首先

遇到此类问题后,我们要做到心中有章(章程),遇事不慌。一定要冷静,仔细了解故障现象(与研发/用户仔细沟通其反馈的问题,了解故障现象、操作流程、数据库架构等信息)


#其次

我们要根据故障现象进行初步分析。心中要想:是什么情况导致数据库连接突然中断?例如:是节点连接出现错误,还是高可用集群有了故障?


#然后

针对上述思考,我们需要逐步验证并排除,确定问题排查方向。


#接着

确定了问题方向,进行具体分析。通过现象得出部分结论,通过部分结论继续排查并论证。


#最后

针对问题有了具体分析后,再进行线下复现,最终梳理故障报告。




真刀实战,我们能赢


说了这么多理论,想必实战更让你心动。那我们就拿一个真实项目案例进行分析---某运营商客户业务系统测试环境下,项目开发人员某日早上发现GreatDB数据库高可用集群无法连接,该如何快速分析处理:


1、故障发生场景

在项目现场兢兢业业进行项目开发的你,正在为某个客户部署安全数据库GreatDB数据库集群,却在应用测试阶段,发现GreatDB高可用集群无法连接,对现场情况和原因不太清楚。


2、故障排查

通过SSH工具远程登录shell,查看数据库集群所有服务状态,如下:

序号

主机IP

进程

端口

状态

备注

 

1

 

192.*.*.1

zookeeper

13317

正常


GreatDBRouter

3307

异常

进程不在,端口无法访问

GreatDB

3306

正常


 

2

 

192.*.*.2

zookeeper

13317

正常


GreatDBRouter

3307

正常


GreatDB

3306

正常


 

3

 

192.*.*.3

zookeeper

13317

正常


GreatDBRouter

3307

正常


GreatDB

3306

正常



项目开发人员连接192.*.*.1节点3307端口,该端口对应的router进程异常,导致该IP无法提供数据库服务。虽然数据库整体服务正常,但是应用连接的节点不可用,导致服务中断


3、故障分析0

1)获取错误日志

从主机192.*.*.1的/greatdb/routerdata/logs获取router日志

2)分析错误日志

查看错误日志,发现router服务每5分钟重启一次


3)查询router服务重启原因

主机192.*.*.1节点的dbscale_daemon.py程序,调用GreatDB命令检测router状态,代码如下:


查看dbscale_daemon.py脚本内容


脚本中直接调用GreatDB命令,而GreatDB命令不在PATH环境变量中,无法直接执行


由于GreatDB命令无法直接执行,192.*.*.1节点的dbscale_daemon.py程序返回状态错误,误认为router不在线,因此自动执行重启router。


4)查看其他两个节点的router状态

由于192.*.*.1节点与其他节点启动router的方式不一样,导致进程也不一致。



4、故障处理

遇到这类故障,小编给大家提供2种解决思路:一种是遇到故障后的紧急处理方案,可以让节点实现快速连接,解决当下燃眉之急但从长远看,大家更需要常规处理方案,从根源上解决故障问题发生。


1)紧急处理方案

操作:使用dbscale-service.sh脚本重启router进程,优先恢复router服务。

问题分析:在诊断192.*.*.1节点router进程异常的情况下,我们发现问题的根源在于节点的启动方法不统一。其中一个是由【dbscale_daemon.py】启动的,而其他节点则使用【dbscale-service.sh】启动。

在这种情况下,由于缺乏对GreatDB客户端的正确安装,导致了dbscale_daemon.py每5分钟执行一次的GreatDB命令失败,从而误判了router进程的状态。结果是,router服务一直在不断重启。


方法总结:


1) 首先,我们需要在生产环境中,在部署数据库集群之前,进行系统环境和参数设置的检查。只有当所有的检查项都符合要求时,才能继续进行集群的部署。这个故障的发生属于手动部署操作失误的范畴。

2) 其次,为了避免类似问题的再次发生,在生产环境中,我们建议使用数据库运维管理平台GreatADM来部署数据库集群。通过使用GreatADM进行集群部署,我们可以遵循正式的流程,并在部署后进行必要的检查和验证,确保集群的正常运行。


2)常规处理方案及改进措施

常规处理方案:

1、192.*.*.1节点使用dbscale-service.sh脚本启动router服务

su - greatdb
cd greatdb/routerdata/
./dbscale-service.sh start

2、安装GreatDB数据库客户端

3、添加主机PATH环境变量等


改进措施:


1、使用GreatADM数据库运维管理平台部署集群过程中,有依赖关系组件或其他功能模块的,务必检查上一步骤是否成功,确认成功后方可进行下一步操作;
2、数据库部署完成后,需经过可用性检查,再暴露数据库服务端口给应用开发商;
3、故障修复后,应及时记录故障原因并更新相关文档。



复盘总


遇到这种数据库连接中断的线上故障,紧急处理方案可以帮助大家暂时解决问题,只有常规处理方案才能从根源上解决故障问题发生。




紧急处理方案



更换启动router服务方式,采取通用dbscale-service.sh启动。


常规处理方案


1、安装GreatDB数据库客户端;

2、添加主机PATH环境变量;

3、建议使用数据库运维管理工具GreatADM进行数据库集群部署管理,避免手动操作的失误隐患。

、、


包拯断案 | 集群备份为什么多次失败@还故障一个真相
包拯断案 | 程序连接频繁出现超时怎么破@还故障一个真相
包拯断案 | collation带来的影响剖析@还故障一个真相
关于万里数据库


北京万里开源软件有限公司(简称“万里数据库”)成立于2000年,是专注于国产自主可控数据库产品研发的国家高新技术企业、国家级专精特新“小巨人”企业,拥有发明专利、软件著作权百余项。


万里数据库的技术底蕴源自对底层核心代码的掌控,产品始终坚持以“极致稳定、极致性能、极致易用”为目标,经过20余年的研发经验积累,产品在功能、性能、稳定、易用等方面均处于行业领先水平,广泛应用于金融、运营商、能源、政府、交通等行业重要业务系统中的超1000个业务场景,得到了用户和市场的认可与肯定。


2021年,公司创立GreatSQL开源社区,通过对MySQL技术的优化,目前已成长为国内活跃的自主开源数据库社区


极致稳定  极致性能  极致易用



“在看”点一下,万里早知道

文章转载自万里数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论