【云贝学院】云贝学院TDSQL TCP认证课程已上线,学院有不定期公开课 需要进讨论群的同学可以加老师微信:19941464235

作者:潘峰

【前言】

大家众所周知TDSQL for mysql 是一款分布式数据库,它最大支持256个分片默认为64个分片。那TDSQL里面的分片概念其实就是所谓的set,当我们使用默认配置创建一个groupshard实例的时候,TDSQL首先会创建一个set在这个set里面会有64个分区。当这个set的性能或者是容量达到一个值的时候,这个时候就可以通过动态扩容的方式添加一个新set来拆分原来的数据。那大家想不想知道TDSQL的动态扩容的逻辑流程呢?它是什么原理呢?下面带大家来揭秘一下。

一、环境介绍

此次我们实验的TDSQL环境为

数据库采用一主两从的结构

二、扩容流程的猜测

上图是腾讯官方给出的TDSQL执行任务的一个数据流,那么我们可以通过这个流程图来猜测一下TDSQL的groupshard的扩容的一个流程。

以上流程图是我猜想的一个流程图

首先,赤兔页面设置配置cpu、内存、磁盘信息、主机组信息之后点击提交按钮,然后赤兔平台会把这些参数转化成json串的形式调用oss的接口,接口收到信息之后会在zk上创建一个job节点并把json内容添加到job内容当中。Scheduler watch到节点的变化之后开始执行创建操作(查找硬件资源、初始化数据库、初始化mysqlagent……),当set初始化完成之后会创建出一个一主两从新的空的set。之后利用xtrabackup工具在原set的备份节点上拉一份全备过来,并且每个节点分别开始恢复数据,恢复完成之后与原set的读写节点搭建一个主从的结构同步增量数据,当延迟小于3秒之后打开原set的readonly并锁定路由,scheduler会发起断开新set复制stop slave的命令,之后新旧set 打开读写 解锁路由然后各自删除set内多余的partition。

三、解析TDSQL扩容的逻辑流程

要想解析groupshard添加set的逻辑流程主要有两个方法:

第一种查看源码:由于本人不会java语言所以此种方法放弃。

第二种查看日志:通过各大组件的日志去分析解析TDSQL的扩容流程,以下的分析主要是使用此种方法。

3.1、定位扩容时间点

我们通过TDSQL监控库TDSQLpcloud_monitor里面的t_ossjob来定位扩容job发起的时间点如下图:(fjob_id可以通过赤兔管理台oss任务流程里面获取)

通过查询我们可以得知job发起的时间点是2021-01-25 15:08:12,通过这个时间点我们可以去oss日志里面定位如下图:

日志位置:/data/application/oss/log/sys_TDSQL_oss_log.xxxxx

从日志我们可以看到2021-01-25 15:08:12 OSS接收到了一个json数据并调用了TDSQL.ADDInsToGroup这个接口,并且create note:/TDSQLzk/group_1611555232_13/manager/manager_jobs/groupreq_job@job_000000007并赋值

3.2 Zookeeper znode name的横向对比查找

如下图oss日志:
创建job groupreq_job@job_000000007并赋值

Scheduler日志:
查找groupreq_job@job_000000007

3.3 关键词过滤法

想确认一条日志的是否跟扩容有关,还是常规的检查内容可以通过grep 关键字,过滤日志来判断。

root# grep backupjobs /data/application/oss/log/ sys_TDSQL_oss_log.xxxxx > grep.log

四、需要分析的日志位置

  • Oss日志
/data/application/oss/log/sys_tdsql_oss_log.2021-01-25.0
  • Scheduler日志
赤兔确认主节点ip
/data/application/oss/log/sys_scheduler.2021-01-25.0

  • Manager日志

/data/application/oss/log/sys_manager.2021-01-25.0
  • Mysql agent
/data/tdsql_run/4004/mysqlagent/log/ sys_report_4004.log.2021-01-25.0
/data/tdsql_run/4005/mysqlagent/log/nohup/xxx.log

五、几个关键点的截图

  • Oss接收数据->调用接口->创建znode

Manager zk watch groupreq_job@job_0000000007拿到数据开始创建set
并插入到数据库一条记录

TDSQL pcloud_monitor里面的t_ossjob查询

 Manager 完成资源锁定lock_job@lock_0000000007 success

扫描服务器资源记录状态到数据库requireresource
资源调配完成锁住资源并记录状态到数据库startlockinstance

Manager 调用shell进行初始化
调用install_single_TDSQL_noproxy.sh脚本初始化实例

Manger 重启set节点
调用Restartreport_cgroup.sh

Manger 创建set完成
记录set_create状态到数据库中

Manger创建用户信息
TDSQL会创建一个超级用户TDSQLsys_normal

用户创建完成
创建完成之后插入数据库一条日志记录authset

Manager 创建完成set之后把任务转交给scheduler
插入数据库一条日志slice_submit

Manager 提交scheduler之后几分钟无日志输出证明任务已经交给scheduler

Scheduler
新set 与老set 开始主从搭建
Set znode信息包括gjid:GJID_NEW_SLICEJOB_00000000014Master_set:set_1611555290_1 Slave_set: set_1611558545¬_3

Mysql agent 与 旧set的一个slave主从搭建
使用命令change master to maseter_host=’’ master_port= master_user=’TDSQLsys_repl’ master_password=’’ master_auto_position=1 for channel ‘transfer_set_1611555290_1’

由于新set是一个空库因此需要做数据恢复

 旧set 的备份节点mysqlagent日志开始备份

 新set apply log 日志

Move datafile日志

第三节点完成恢复时间

第一节点恢复完成之后立刻与旧set 的salve分片重新搭建主从

Scheduler 准备连接set 拿路由锁 

获取第一个set的分片信息

Set znode 主从关系信息

旧set mysql agent 只读读写库并且kill除agent 与 复制的用户

断开主从关系

新set 节点Mysql agent
Stop slave 断开主从关系

新set 节点Mysql agent 打开只读 写配置文件
Read_only off

Scheduler 部署慢查询工具

从14:02-15:48 这段时间我查日志没有发现有太明显的操作,这块还要继续分析

Scheduler切换路由

旧set mysql agent
打开只读

新旧set 同时Drop partition

删除lock 扩容完成

总结

通过上面的日志分析我们可以得出以下的结论:
1、oss接受赤兔数据并且转成json格式发送zk
2、zookeeper接受到数据之后create znode
3、manager zk watch后开始锁定物理资源
4、manager开始调用脚本install_single_TDSQL_noproxy.sh初始化3个实例
5、manager调用Restartreport_cgroup.sh重启实例初始化完成
6、manager创建系统用户复制用户
7、scheduler创建分片job、GJID_NEW_SLICEJOB_00000000014并确认主从分片信息
8、新set mysql agent 与旧set的slave 搭建主从关系
9、旧set备份节点做物理备份
10、新set三个节点恢复物理备份
11、新set的读写节点与旧set的slave做增量同步
12、scheduler在新set的延迟小于3秒之后准备断开主从关系
13、scheduler拿路由锁和分片信息,旧set readonly,kill除agent与复制用户之外的session
14、新set mysql agent 断开只读关系 stop slave
15、新节点打开只读写配置文件
16、scheduler切换路由
17、scheduler部署慢查询工具
18、mysql agent 开始删除各set多余的分区(此处有一个流量的控制根据服务器跟数据库的负载)

有问题可以加WX:19941464235,加入"云贝TDSQL群聊"一起讨论起来吧~

对腾讯云TDSQL感兴趣的小伙伴,加入进来!共同进步


*禁止转载,可转发(转发原创文章请注明出处)https://mp.weixin.qq.com/s?__biz=MzU5MTQ3ODY3MQ==&mid=2247486085&idx=1&sn=87bba789a75cd09e4e78551a51170a70&chksm=fe2f2065c958a973cafdbfcb1529c2111d0beae59b3e68151c90a6931f27b50b61094f61edb3&token=823607480&lang=zh_CN#rd

【云贝学院】揭秘TDSQL分布式实例扩容的逻辑流程相关推荐

  1. 【云贝学院】腾讯云TDSQL独立部署最佳实践

    [云贝学院]云贝学院TDSQL TCP认证课程已上线,学院有不定期公开课 需要的同学可以加老师微信:19941464235 作者:崔鹏 创建四台云主机或者本地四台Centos7.6的VM虚拟机 (四台 ...

  2. 【云贝学院】大师操刀倾心打造:数据之颠Oracle 12c OCM认证课程

    [云贝学院]云贝学院Oracle 12c OCM认证课程已上线,学院有不定期公开课~ 想加入讨论群的同学,加老师微信:19941464235进群 01.Oracle 12c OCM课程概述 Oracl ...

  3. 【云贝学院】腾讯云TDSQL-数据库字符集

    [云贝学院]云贝学院TDSQL TCP认证课程已上线,学院有不定期公开课 需要进讨论群的同学可以加老师微信:19941464235 作者:潘峰 --显示数据库支持的字符集 show char set; ...

  4. 阿里云开发者学院电子书《Dubbo分布式服务治理实战》重磅来袭!

    简介:Dubbo 是阿里巴巴开源的高性能分布式 RPC 服务治理框架,已经捐献给 Apache 开源组织,最新的版本是 3.0.在阿里巴巴.工行.电信.银联.中国人寿.网易.滴滴.当当等互联网公司中大 ...

  5. 阿里云架构师张先国:揭秘ECS倚天实例背后的技术

    11 月 15 日,阿里云 ECS 倚天实例正式开始商业化.此前,阿里巴巴宣布阿里云未来两年 20% 的新增算力将使用自研 CPU.11 月 5 日,云栖大会"倚天开启云原生算力新时代&qu ...

  6. 亿级流量场景下的平滑扩容:TDSQL的水平扩容方案实践

    为帮助开发者更好地了解和学习分布式数据库技术,2020年3月,腾讯云数据库.云加社区联合腾讯TEG数据库工作组特推出为期3个月的国产数据库专题线上技术沙龙<你想了解的国产数据库秘密,都在这!&g ...

  7. TDSQL分布式事务实现机制

    名师介绍: 大家好,我是郭一军. 云贝数据创始人,腾讯云TVP,PostgreSQL ACE,腾讯云高级认证讲师,Oracle MySQL高级认证讲师,中国PostgreSQL分会高级认证讲师.ITP ...

  8. 腾讯潘安群:腾讯云金融级数据库TDSQL分析

    SDCC 2015将于2015年11月19-21日在北京.朗丽姿西山花园酒店召开.在大会召开之际,笔者采访到了腾讯高级软件工程师潘安群,请他分享TDSQL在腾讯云金融领域的实践经验. SDCC 201 ...

  9. 【SDCC讲师专访】腾讯潘安群:腾讯云金融级数据库TDSQL分析

    摘要:SDCC 2015将于2015年11月19-21日在北京.朗丽姿西山花园酒店召开.在大会召开之际,笔者采访到了腾讯高级软件工程师潘安群,请他分享TDSQL在腾讯云金融领域的实践经验. SDCC ...

最新文章

  1. 【FE前端学习】第二阶段任务-基础
  2. 2018 中国AI人才大调查:14张图表解读他们来自何处,又将去往何方?
  3. 明年东京奥运会,将首次引进人脸识别系统
  4. JavaScript速记
  5. python哪里下载import包-【Python包】模块和包导入详解(import)
  6. Matlab中gradient函数的使用方法
  7. SAS编程基础 - 逻辑库和数据集
  8. JVM PrintGCDetails打印GC细节
  9. sublime打开文本时会记忆上次关闭时鼠标停留的位置
  10. JDK1.7 深入理解 LinkedHashMap
  11. AI 芯片崛起!FPGA 工程师的核心竞争力在哪里?
  12. 关于3Q大战和反垄断
  13. 联想官方出品小工具:关闭或开启 Win10 系统自动更新
  14. C#学习记录——C#项目开发实战:快递单打印精灵(一)
  15. 基于JAVA教师业绩考核和职称评审系统计算机毕业设计源码+数据库+lw文档+系统+部署
  16. 软件著作权申请流程(2021版)
  17. Ubuntu压缩视频
  18. 王之泰201771010131《面向对象程序设计(java)》第十四周学习总结
  19. 网页iframe框架常见的应用例子
  20. java微信公众平台开发教程分享

热门文章

  1. mysql授权连接_MySQL 连接认证授权步骤
  2. depth image
  3. golang学习笔记(进阶篇)
  4. Vue css最高优先级
  5. android 组件透明,万能小组件透明小组件-万能小组件透明背景设置v1.0.0 安卓版_永辉资源网...
  6. Failure to find xxx in http://maven.aliyun.com/nexus/content/groups/public
  7. 彻底了解DVD:从入门到精通(二)[转]
  8. Android开发之CardView卡片布局
  9. 创建Springboot项目、java项目遇到的问题
  10. 【词汇】BOSS系统