searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

一种数据库创建分片超时的常见问题的故障分析和复盘思路

2023-06-09 02:14:31
5
0

分片检测超时故障分析和复盘

概述

在新建Schema时,当分片数设为128个分片时报504错误,分片较少时正常。经走查日志、排查机器网络环境、查看代码子模块运行耗时等过程,确定为由于zookeeper跨AZ、部分节点时延高导致的异常

故障问题解决方案:在配置库中剔除时延高的zookeeper节点,管控平台只与时延低的zookeeper节点交互,此后分片检测正常。

问题详情

客户的问题较为明确,即创建schema时分片较少时正常,分片数较多时检测异常。

当前客户是单个实例关联了8个RDS实例。

当分片数较少时,检测正常通过

当分片数较多时,每个RDS实例创建16个分片,总共128个分片,检测失败,报504 GateWay Timeout的错误。

问题分析

首先,明确下RDS分片检测的过程逻辑,

RDS分片检测可分为三个过程,(1)检查schema名称是否重复的预处理 (2) 连接zk,检查分片名,n个分片就需要与zookeeper交互n次; (3) 多线程并发去底层查询是否有同名schema

其次,在了解上述执行过程的基础上,分析程序的模块执行耗时。

  • 查看zookeeper的耗时情况,耗时72秒,远远超过正常的交互时间

  • 查看底层dn查询的耗时情况,耗时3秒,执行情况正常

至此,初步定位至管控平台与zookeeper网络导致的异常。

通过查看管控平台查询zookeeper的queryForMapList函数,确定zookeeper集群内部存在耗时差异很大的情况,由于zookeeper是三节点集群,会随机选取一个节点进行交互,故单个zookeper节点时延长会导致整体查询耗时长,最终导致超时的问题。

进一步地,验证机器与zookeeper的时延情况,

发现确实存在172.25.xx.xx节点的时延极高,与其他同集群节点相差数十倍。

解决方案

针对部分zookeeper节点时延高的情况,可以修改配置库,使管控平台与时延低的zookeeper节点交互。

具体操作步骤为:

1、找到管控平台的配置库,查看application.yml配置文件的spring.datasource信息

 

2、登录配置库,查看zookeeper_info表

 

3、修改配置库,只保留时延低的zookeeper节点

4、 重启控制台。

验证:修改后,检测通过,一切正常

  1. 还原配置库的zookeeper_info表,并重启控制台。

注:此处还原的前提是用户建立大数量分片(128个)成功,并且此后不频繁创建大数量分片。如果频繁的话,本质上还是要从网络层面解决zk时延高的节点。

附录

补充下Arthas工具的基本使用。

Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。

  1. 启动Arthas,进入交互界面

java -jar arthas-boot.jar

选择目标应用 java 进程,此处为控制台程序

 

  1. 查看进程信息

输入dashboard

  1. monitor查看具体方法的执行监控,调用次数、执行时间、失败率的信息。

例如,调用栈为com.cloud.udal.admin.service.cfg.impl.SchemaServiceImpl#checkDatabasesValid

 monitor 类路径 类方法名称

输入 monitor com.cloud.udal.admin.dao.common.IBaseZkDao queryForMapList ,查看查询单次zookeeper的耗时

  1. quit/exit退出当前连接;stop退出arthas程序

如果只是退出当前的连接,可以用quit或者exit命令。Attach 到目标进程上的 arthas 还会继续运行,端口会保持开放,下次连接时可以直接连接上。

如果想完全退出 arthas,可以执行stop命令。

0条评论
0 / 1000
张浩
10文章数
0粉丝数
张浩
10 文章 | 0 粉丝
原创

一种数据库创建分片超时的常见问题的故障分析和复盘思路

2023-06-09 02:14:31
5
0

分片检测超时故障分析和复盘

概述

在新建Schema时,当分片数设为128个分片时报504错误,分片较少时正常。经走查日志、排查机器网络环境、查看代码子模块运行耗时等过程,确定为由于zookeeper跨AZ、部分节点时延高导致的异常

故障问题解决方案:在配置库中剔除时延高的zookeeper节点,管控平台只与时延低的zookeeper节点交互,此后分片检测正常。

问题详情

客户的问题较为明确,即创建schema时分片较少时正常,分片数较多时检测异常。

当前客户是单个实例关联了8个RDS实例。

当分片数较少时,检测正常通过

当分片数较多时,每个RDS实例创建16个分片,总共128个分片,检测失败,报504 GateWay Timeout的错误。

问题分析

首先,明确下RDS分片检测的过程逻辑,

RDS分片检测可分为三个过程,(1)检查schema名称是否重复的预处理 (2) 连接zk,检查分片名,n个分片就需要与zookeeper交互n次; (3) 多线程并发去底层查询是否有同名schema

其次,在了解上述执行过程的基础上,分析程序的模块执行耗时。

  • 查看zookeeper的耗时情况,耗时72秒,远远超过正常的交互时间

  • 查看底层dn查询的耗时情况,耗时3秒,执行情况正常

至此,初步定位至管控平台与zookeeper网络导致的异常。

通过查看管控平台查询zookeeper的queryForMapList函数,确定zookeeper集群内部存在耗时差异很大的情况,由于zookeeper是三节点集群,会随机选取一个节点进行交互,故单个zookeper节点时延长会导致整体查询耗时长,最终导致超时的问题。

进一步地,验证机器与zookeeper的时延情况,

发现确实存在172.25.xx.xx节点的时延极高,与其他同集群节点相差数十倍。

解决方案

针对部分zookeeper节点时延高的情况,可以修改配置库,使管控平台与时延低的zookeeper节点交互。

具体操作步骤为:

1、找到管控平台的配置库,查看application.yml配置文件的spring.datasource信息

 

2、登录配置库,查看zookeeper_info表

 

3、修改配置库,只保留时延低的zookeeper节点

4、 重启控制台。

验证:修改后,检测通过,一切正常

  1. 还原配置库的zookeeper_info表,并重启控制台。

注:此处还原的前提是用户建立大数量分片(128个)成功,并且此后不频繁创建大数量分片。如果频繁的话,本质上还是要从网络层面解决zk时延高的节点。

附录

补充下Arthas工具的基本使用。

Arthas 是一款线上监控诊断产品,通过全局视角实时查看应用 load、内存、gc、线程的状态信息,并能在不修改应用代码的情况下,对业务问题进行诊断,包括查看方法调用的出入参、异常,监测方法执行耗时,类加载信息等,大大提升线上问题排查效率。

  1. 启动Arthas,进入交互界面

java -jar arthas-boot.jar

选择目标应用 java 进程,此处为控制台程序

 

  1. 查看进程信息

输入dashboard

  1. monitor查看具体方法的执行监控,调用次数、执行时间、失败率的信息。

例如,调用栈为com.cloud.udal.admin.service.cfg.impl.SchemaServiceImpl#checkDatabasesValid

 monitor 类路径 类方法名称

输入 monitor com.cloud.udal.admin.dao.common.IBaseZkDao queryForMapList ,查看查询单次zookeeper的耗时

  1. quit/exit退出当前连接;stop退出arthas程序

如果只是退出当前的连接,可以用quit或者exit命令。Attach 到目标进程上的 arthas 还会继续运行,端口会保持开放,下次连接时可以直接连接上。

如果想完全退出 arthas,可以执行stop命令。

文章来自个人专栏
常见故障复盘
8 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0