开发者学堂课程【PolarDB-X 开源系列课程:PolarDB-X集群运维1:升降配、扩缩容_与备份恢复(一)】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/1032/detail/15145
PolarDB-X集群运维1:升降配、扩缩容_与备份恢复(一)
内容介绍
一、PolarDB-X产品介绍
二、扩缩容
一、 polarDB-x产品介绍
1、核心组件
polarDB-x是阿里云上的分布式数据库,主要由四个核心的组件构成。(1)CN节点,也就是整个集群的流量入口,负责接收用户应用服务器发过来的业务Circle,将其进行相应的分布式的路由计算,同时也负责分布式事务的协调以及全球二级索引的维护。
(2)dn节点,也就是datanode,是实际存储数据的地方,同时对其进行改造,采用了协议,来保证数据的强一致与高可靠。
(3)元数据中心,也就是gms,它存储了polarDB-x集群的托普信息,同时也是分布式事务所依赖的tso的授时组件。
(4)CDC组件,作用主要有两个。
①将每个dn上的物理bean Log转换成一条与my circle bean log完全兼容的逻辑bean log流,能够与下游的大数据生态系统进行无缝的对接。
②提供了完全兼容my circle Application主备订阅的能力。
2、k84及弹性扩展
(1)k84
云延伸绕不开k84这个话题,polarDB-x积极拥抱kaK84的生态,在k84上进行了扩展,提供了polarDB-xOperator来支持polarDB-x集群的相关工作,例如基于K84的scheduler,apiserver和Controller-manager构建了polarDB-x的控制面,在这基础之上,能够对polarDB-x集群进行部署,运维,以及相关的一些生命周期,产品能力的管理,例如采用了k84里面的Deployment来管理无状态的CN和cdc组件。
采用类似State for set的方式来管理项目,采用了XTexas的dn节点,除了像部署,广运维这些基本的生命周期能力外,还提供各项弹性伸缩,高可用,监控,审计以及备份恢复等能力。
(2)弹性扩展
①首先,数据库的弹性扩展,polarDB-x是从淘宝起家的,主要面向互联网业务,特点是通常会有高并发和海量数据的存储需求,通常随着业务的发展,单机的数据库会存在性能的瓶颈,例如并发能力有限或存储空间达到瓶颈,这种情况下需要对数据库进行扩展。
②传统的扩展方式目前有两种。
垂直扩展,也就是升降配,可以理解为在已有的机器中增加更多的资源来提高数据库的处理能力,例如对于部署在物理机上的数据库,可以采用更多核的CPU,或者采用更大或者更快的内存条,来对数据库性能进行提升。
而对于云数据库而言,由于底层的资源已经通过虚拟化的技术进行了弛化,只需要修改相关资源的配置即可实现快速的垂直的升降配,提升数据库的性能,这种方式的好处是扩展过程基本不需要迁移数据。
问题是性能始终是局限于单机的,单机的性能是有上限的。
水平扩展,也就是扩缩容,相当于是加入更多的机器来解决数据库的扩展性问题,这种方式不再局限于单机的性能,但是需要对数据进行一定的迁移来做到水平扩展,同时这种方式对于数据库的水平扩展能力有更多的要求,需要有数据库有线性的扩展能力,这样才能够将增加进来的机器的性能充分地发挥出来。
二、扩缩容
阿里云的云起实验室上已经发布上线实验,对 polarDB-x 集群做动态扩缩容,直接通过实验熟悉流程。
云起实验室的页面有很多的实验,要做的是实验二,如何对polarDB-x集群做动态扩缩容。
1、实验操作
(1)申请资源,点击串联资源即可创建完成。需要在阿里云上买一台ecs部署相关的资源。回到实验手册,按照实验手册的步骤进行操作。
(2)安装环境
①安装依赖,安装docker,将命令复制粘贴。启动后接着按照命令将docker的服务启动。
②安装kubectl,可以理解成它是K84集群的命令行工具,可以通过它与k84集群做交互,先下载kubectl的文件,对这个命令授予可执行权限,之后将其移到系统目录,就可以直接使用kubectl的命令。
③安装mini kube,可以在ecs虚拟出k84的集群,在上面安装 polarDB-xOperator以及创建polarDB-x实例。完成后安装helm3,这是K84里面的包管理工具,类似Centrals的young的方式,所有的k84 Operator都可以通过helm包的方式进行管理。
④按照命令把helm的更换包安装好。完成后执行命令即可输出正常的结果,最后一步是安装mycircle的命令行。
(3)安装polarDB-x operator和polarDB-x。
①用刚才安装好的mini kube创建K84的集群。在这过程中由于不能通过注册帐号进行使用,需要创建一个独立的帐号,按照步骤创建一个GALAXY kube帐号。将帐号加到docker组里,访问docker的Soccer demon。
切换到Galaxy kube帐号下,通过命令来创建虚拟的k84基集群,集群命令的CPU是串联四个,Memory是12G,有一个镜像,由于国内访问有一定的网络延迟,于是采用上海交大的镜像源拿取镜像做k84的集群。
K84创建完成,执行kubectl cluster-info来查看刚刚创建的k84集群基本信息。
②安装polarDB-xOperator。
首先需要创建一个叫Operator system的命名空间。创建完成通过目前 polarDB-x提供的helm仓库来安装polarDB-x Operator。
创建一个叫polarDB-x的本地helm仓库,把仓库添加完成,通过helm INSTALL的方式,将polarDB-x helm包安装完成,接下来查看在polarDB-x Operator system命名空间下组件的状态。
在命名空间下,kubectl get pods——Name space指定的是Polardbx operator system,在这个命名空间下,所有控制面所需要的pod都已经ready。
③创建Polardbx。
编辑yaml文件,通过vim polarDB-x的命令打开vim的编辑器,把实验室里的yaml文件型复制过来。
文件内容:这是polarDB-x定义的单独的,独立的,在k84上的资源,叫polarDB-x Cluster,名字叫polarDB-x。
有几个部分,第一部分是Topology,指定了各个组件的信息,有CDC、cn、dn和gms。现在cdc是1,cn也是1,dn也是1,资源都是Minute,都是1c1g,cn是1C2g,dn是2C 4G,按照这个规格来配置。
其他的信息比较通用,可以在文档上查看相应的资料。
保存后通过kubectl Apply文件在k84集群上创建 polarDB-x 对象。观察集群的创建状态,在使用的kubectl GET polarDB-x CLASS的命令,polarDB-x class就是定义好的资源类型,指定的就是polarDB-x,查看当前的状态,目前可以看到它有几个组件,gms、cn、dn和cdc,和之前对应的四个组件一致,每一个的个数都是1,处于Creating状态。
pod创建情况,正在创建gms以及dn节点,gms和dn都采用三副本模式,每个dn由三个pod构成,分别对应的是Leader,Follower和Folgger,gms也是一样的模式。
(4)扩缩容操作
①编辑polarDB-x的文件,回到文件中,cn、dn都是replicas,将CN和dn的个数改成2。K84就会将CN和dn各增加一个节点,自动化完成。保存后用kubectl apply的方式更新polarDB-x对象。
②更新后观察polarDB-x集群内的状态。
状态从上面的Running变成了upgreating状态,cn和dn的个数目标变成两个,目前ready的都是一个,下面将会进行自动化扩容。
dn已经进入ready状态,接下来会有数据迁移过程,会在PPT中进行详细的介绍。
③扩容过程是自动化的,只需要告诉K84将CN和dn扩容到几个,便会自动把新的cn和dn创建出来,同时将相应的数据进行挪动,达到扩容后的状态。
④缩容和扩容类似,就是将刚才在yaml文件里面修改的个数,例如从2变成1,相当于起到缩容的效果。缩容的步骤可以在云起实验室里进行体验。
2、原理介绍
(1)扩容
①CN和CDC无状态节点怎么处理,dn有状态的节点如何处理。对于CN和cdc这样无状态的节点,举个例子,有三个CN的节点,需要扩容到四个,只需要新建一个新的cn节点,将其加入到CN集群里即可完成扩容。
对于dn这样有状态的组件而言,需要做的事情相对较多,首先创建一个新的dn,原来只有dn0在工作,现在需要创建dn1,创建完后,对dn0上已有的数据的分区进行计算,需要知道哪些数据需要移动到新建的dn1上,同时将数据迁移过来。在迁移的过程中,所有的cn访问流量还是访问原来的dn0,dn1不会参与实际的业务请求。
等dn1所有的数据搬迁完成,与dn0达到了数据完全一致的状态,便会发起cn切流过程,将所有在dn0上的数据的请求流量移到DN1上形成,从而达到新的数据均衡状态,完成扩展的步骤。
(2)缩容,对于CN和cdc这种无状态而言比较类似,本来有三个CN的节点,需要缩容到两个,只需要将多出来的cn的节点做下线操作便可以达到缩容效果。
对于dn这样有状态的组件而言,首先将DN1下掉,只保留dn0一个dn节点,将dn1的数据全部迁移到已有的dn0上,过程涉及到分区的计算,以及数据的迁移。
迁移完成之后进行切流,将所有原来访问dn1的流量切换到dn0上上。
dn1上没有业务流量,便会将dn1进行下线操作,达到缩容后的效果。