文章 > TDSQL > TDSQL新增子set报错,DB资源异常告警解决实战

TDSQL新增子set报错,DB资源异常告警解决实战

我在听风想你 · 2021-08-10 1248 TDSQL
分享 收藏

大家好这次给大家带来一个新的问题解决实战废话不多说直接上干货

现象新创建分布式实例后分布式实例新增实例子set失败报错与Hang住)。

这个问题我们是这么发现的需要创建一个新的分布式实例新版本创建分布式实例默认会创建两个set此版本TDSQL为10.3.14.1.0,此版本创建实例时会默认新增一个set如需添加其他set需进入实例后手动新增于是我们进入到实例内手动新增set

image.png

如图为新增子set配置分片这里不需要指定会根据创建实例的设置自动从以创建的子set中分出一半。(不一定都是一半要看具体子set数量

于是我们进行创建

image.png

我们认为可能是配置的时候误操作导致找不到可用资源于是随后又试着创建了一遍这一次发现创建子set未报错但是一直Hang在50%这个进度不动

image.png

进入到分布式实例中发现子set竟然创建出来了这就很奇怪之后细看有一点很不正常

image.png

    我们可以发现数据分片数并没有分过来每台机器的延迟都超高而且我们这个实例是最新创建的一共也没几个实例按道理说主机的端口是会按照顺序去排列的不会是之前4005,一下子蹦到4011。(不适用之间有创建其他实例或在其他实例中添加子set的情况

排查过程与问题解决

    通过报错我们可以发现是获取资源失败没有有效的主机。(由于场景无法再复现我便复述一遍。)首先我们要知道创建实例的流程,赤免运营平台以jason格式通过http传参给OSS API,OSS调用创建实例的函数,然后在zookeeper创建job,通知manager创建实例,manager在创建实例前要检查资源是否够,并且lock 资源后再创建资源。

    那么问题应该是出在这个流程中的某一环节我们先进到scheduler和manager的日志中查看是否会有更多的报错信息经过排查下发的流程都是没有问题的已经到zookeeperzookeeper也不是找不到可用的主机而是无法lock住资源指出DB资源异常于是我们查看一下DB的监控

image.png

    我们发现DB设备存在告警。(但是这个告警并没有在赤兔告警页面显示出来通过告警我们可以知道是DB机器存在隔离或故障的端口这也证明了上文中说到的新增set的端口跳跃问题于是我们去清除一下故障端口。登录到scheduler机器上的bin下/data/application/scheduler/bin/。查看所有资源的端口状态(看看有没有故障端口)

./resource_tool status_res all |grep port

端口的状态有如下:

used:成功运行的set的节点的端口状态

disabled:初始化set中,本节点运行失败,端口状态处于disabled(故障端口)

isolated:初始化set中,本节点运行成功,该set下其它节点运行失败,本节点的端口状态被置为isolated(隔离端口)

我们发现确实存在isolated端口和disabled端口

清除故障端口(其中最后一个参数ip填的是资源组里available状态的ip 赤兔前台可以看到)

./resource_tool recover_res ip(master_ip)

如:./resource_tool recover_res 10.1.2.17

之后我们再次查看有没有故障端口,以及在chitu前台观察资源有没有被释放

后台./resource_tool status_res all |grep port

赤兔前台

image.png

    之后我们再次验证创建便没有问题了超高延迟和数据分片未成功的问题我们将会在以后找机会复现之后根据这两个问题的维度再给出解决办法文章未尽之处欢迎读到此文章的各位老师们指证和讨论让我们更加的了解和更好的维护这个产品


点击加载更多