开发者学堂课程【如何在PolarDB-X中进行Online DDL:如何在 PolarDB - X 中进行 Online DDL】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/986/detail/14929
如何在 PolarDB - X 中进行 Online DDL
内容介绍
一、内容简介
二、如何在PolarDB - X中进行Online DDL
三、PolarDB - X online DDL的原理
一、内容简介
今天是讲PolarDB - X动手实践系列的第五期,在PolarDB - X里面怎样做ddl这件事,首先讲一下动手实践系列包括的内容,讲的是PolarDB - X社区版,也就是开源的版本,对标的是阿里云商业版本的2.0这样一个版本,面向的群体是应用开发者,架构师,dba等等,对这个产品使用感兴趣的群体,内容会围绕使用PolarDB - X整个过程当中场景化的方式还讲解怎么使用PolarDB - X 。
按照使用流程前面已经讲了四节课,第一节课讲了如何使用PolarDB - X部署PolarDB - X,之后讲了怎么连接使用它,然后讲了一个与Binlog相关的,之后讲了扩缩容,今天讲解DDL。
二、如何在 PolarDB - X 中进行 Online DDL
1.环境准备
今演示需要的环境和之前差不多,最后是需要另外两个常见开源的系统,一个叫做普罗米修斯,另外一个是官方的,这两个做系统监控.
在讲解实验之前先讲一下PolarDB - X系统的架构,PolarDB - X是一个分布式的数据库,分布式会有若干个组件来组成,具体来说,有四个核心的组件,第一个是cn,也就是分布式的计算层他会负责数据的分片,拆分的计算,以及分布事务协调这样一个角色。第二个是DN也就是存储节点,为了便于理解,大家可以简单的把它理解为mySQL,只不过是定制化的mySQL,第三个是GMS也就是原数据中心,会提供全局的时间戳维护全局的原信息等等这样一个功能,也可以将它理解为特殊角色的DN,最后一个是cdc全局Binlog日志的生成的组件,提供和mySQL Binlog完全兼容的增长日志。
2.演示
了解完前面这些内容之后,来说一下今天分享的内容,今天分享内容包括两个部分,第一个是演示,第二个是讲解一下原理,演示会看小图
是这样的一个场景,首先假设业务用了PolarDB - X这样的一个数据库,业务层是用Sysbench的压测来模拟业务的操作,具体来讲就是的Sysbench的select的ID的查询以及select key就是另外一个非主件的查询,这两类查询来作为业务的负载,然后搭建了一个监控的链路,就是PolarDB - X监控的数据他涂到了普罗米修斯里面,然后再有普罗米修斯给到官方进行最终的展示,因为这个过程需要一些资源,所以证明依然按照惯例在阿里云上面ECS来进行所有组件的部署,通过这台电脑连到ECS进行相关的操作,今天演示的场景就与DDL相关,比如在业务发展的过程中最常用的DDL,想加列,加表,删表或者是加索引,删索引,在分布式的场景下,还会涉及到一些独有的DDL比如加全局IP索引然后可能你会将一个单表转成一个分布式的表,将一个单表整为广表等等这样的DDL操作今天都会演示到,这是演示的场景,讲完这些,下面就进入今天的正题,正式开始演示。
先要连接上ECS,这个ECS是一直用来做演示的ECS,进入今天的课程目录,首先看一下要建立的PolarDB - X的结构,今天依然使用K8S的部署模式来部署PolarDB - X
这是他的配置文件,集群的名字叫做online DDL,有一个cdc的节点,一个cn的节点,两个dn的节点,是这样的结构,为什么有一个cn因为后面监控链路目前开源的版本还没有完全做好,目前多个cn聚合的链路还没有打通,所以就只能采集一个cn,为了便于演示把cn设置成一个,这个集群之前已经提前建好了
可以看到他现在是一个running的状态,里面有一个gms,一个cn,两个DN和一个cdc,接下来做一个端口转发,把这个PolarDB - X的集群的3306这个端口给转发过来,转发完以后就可以在终端里面用mySQL client去连接上PolarDB - X,接下来再转发另外一个接口,其实在现在的PolarDB - X开源的版本中,已经有了监控数据采集的组件,他的数据可以直接吐到普罗米修斯里面,所以把监控组件8081的端口也转发出来,这样普罗米修斯端口可以去8081去收集监控数据,首先连接上ECS,然后再做端口转发
这样就是两边有了端口转发的行动,接下来看一下是在同样的ECS下已经部署好的general界面
现在普罗米修斯已经开始采集PolarDB - X集群里面的数据,general也会将它展示出来,大概过个30秒的样子,这个页面的监视数据就都出现了,因为功能还没有完全做完所以大家只需要关注这几个监控值,第一个是这里的逻辑的QPS当前系统的QPS是多少,第二个是rt Cdc端口的rt目前是多少现在是1.42毫秒,还有就是QPS监控的曲线图和这里rt的曲线图,这里主要关注这几个内容,监控数据已经开始正常采集了,再打开一个新的shell,去连接上PolarDB - X给大家看看连线的都有什么
可以看到这里面是直接使用mySQL plant去连接上PolarDB - X
目前除了系统原信息的库外没有其他的库,首先来创建一下今天演示所需要的库,
可以看到目前这个库是空的,接下来准备一下业务所需要的数据,也就是Sysbench的压测所需要的一些数据,同样这边已经把需要的一些配置写好了,准备数据的配置文件与上节课的是一样的,启动了一个K8 s的任务,这个任务用了一个Sysbench连接好了一个镜像,这个镜像会连接Online DDL的PolarDB - X的集群,在里面会创建一张表,同时在里面写16万行的数据,这是准备的过程,现在来创建一下任务
可以看到,目前正在创建当中,看一下port里面的运行情况。
速度比较快,现在这个任务已经运行完了,
Sysbench这张表已经创建,看一下这张表的表结构
可以看到这张表结构还是比较简单的,有四列,第一列是ID,接口分别是K C pad,这样的四列,其中ID和k上面加了索引,这张表是一个分表通过hash ID表的拆分,可以看一下它的topology结构,show topology from这是PolarDB - X特有的一个C口的语法,sbtest1可以看到这张表在分库里的一些分布
可以看到当前一共有16个分库,每个分库里面都有一个分表,这样就有16张表,这是目前的情况,再来看一下数据是否正确的写进去了
可以看到已经有了,接下来开始业务的流量,业务的流量用了两个Sysbench的脚本,第一个脚本是他的select ID也就是在主件上一个select查询,第二个是一个select K也就是用他的k作为一个while条件做了查询,一会儿可以给大家看一下具体的SQL是什么,现在想把对应的查询跑起来,首先来创建select的ID任务
可以看到select ID任务已经跑起来了,他目前的tps大概在八千七八这样的位置。