PolarDB Stack管控最佳实践

分享人:蟾兔   阿里云数据库云原生领域专家

正文:本文详细介绍了PolarDB Stack的最佳实践。


1、什么是 PolarDB Stack


PolarDB Stack管控最佳实践

什么是PolarDB Stack?它最初是面向线下数据库市场的轻量级的软件,它是基于共享存储的一写多读版的PolarDB 数据库服务,一写多读版是我们主打,线下有两个版本,一个是纯软版本,另一个是软硬一体版本,现在开源的是纯软版本,在开源的版本和线下的版本基本上是相同的。

我们版本能够在自有的硬件上部署,也支持混合部署和单独部署两种方案,管控节点和计算节点是要放一起部署还是分开部署,我们都提供相应的能力支持。

根据数据库PolarDB特别定制和深度优化了数据库生命周期管理,包括网络、存储方面的优化,API是基于k8s的标准API,方便大家集成和二次开发。

我们线下场景也是用这套API,又开发了控制台,可以用这个控制台去管控各个数据库的实例,也欢迎大家用我们的API去做自己的控制台,现在代码都是开源的,大家可以去*的开发。

我们提供企业级的功能、稳定性、部署灵活性都是经过线下大量的客户验证的。


2、为什么使用 PolarDB Stack


PolarDB Stack管控最佳实践

部署是非常复杂的,通过stack可以一键把你数据库集群拉起来,就是在k8s的环境里拉起完整的数据库集群,拉起来后也就几分钟的时间就可以使用了。

API是标准个k8s API,如果有 k8s的经验就会使用PolarDB stack了,它的学习成本还是比较低的。

它提供了弹性伸缩的能力,我们stack只需要改一个k8s的参数,就可以自动的增减节点了,比如业务量大时只需改一个参数,马上就就能增加几台机器。

最重要的是高可用的能力。如果自己部署数据库,DB比较麻烦或者比较难做,故障方面比如说像存储掉了网络的问题、节点网络连不通、操作系统的问题、主机宕机,它是自动化的完全不需要自去做事情了。运维方面的工作比如像DB要升级、操作系统要打补丁、硬件主机需要维护,这些不需要中断你的服务的。

管控组件,包括存储manager、operator、 cm异常不影响DB实力。用了PolarDB Stack会让业务更稳定,不会对业务造成困扰。

最后一个不可控因素也能去预防,比如断电断网,都是经过严格的测试和线下的验证的,可以保证在异常的场景下能够自动把DB恢复起来。


3、PolarDB Stack 架构图


PolarDB Stack管控最佳实践

stack是基于k8s的架构,ETCD作为k8s的原数据存储,需要原数据库来存储业务中自己的数据,现在是存储模块在用原数据库的能力,核心工程是中间的operator,主要有三大模块:作为主控制器管理DB的生命周期和组件的健康状况。网络模块主要负责节点和各个节点的健康状。存储主要负责底层的共享存储设备交互,做对存储的底层细节的屏蔽,像共享存储需要支持支持两种协议,我们去做的屏蔽、PFS的初始化、格式化也在存储模块里,还负责创建逻辑卷的工作。


4、PolarDB Stack 故障迁移模型

 

PolarDB Stack管控最佳实践

这是故障迁移模型,一旦发生故障了,有cluster manager定期检测我们的故障场景,像DB引擎是否还正常。决策的策略在发现RW节点有问题时,会做读写的切换,保证业务是不会发生问题的,可以看到cluster manager会通知存储模块,存储模块对底层存储设备做加锁和释放的读写切换操作。


5、安装 PolarDB Stack 环境


PolarDB Stack管控最佳实践

首先把Stack的环境装起来,我提供了一个一键安装的脚本,由于时间有限,我们只支持了一些特定的场景,前置要求只支持centos系统,需要安装好docker和kubernetes,自己的原数据库保证数据库的可用性和连通性,后面需要配置在一键安装脚本里,有了闲置要求后,在工程里运行install,我们这个环境就装好了

PolarDB Stack管控最佳实践

这是手工安装的地址,这个文档非常详细的把安装过程中细节写的很清楚。

一键安装是把这个文档脚本化了。


6、部署 PolarDB Stack 集群


PolarDB Stack管控最佳实践

假设环境已经装好了,接下来创建数据库集群,第一步要创建一个PVC,首先创建一个KYS的PVC和共享存储盘相对应,让DB知道要用哪块存储。

首先去调用http的接口,这是需要去封装的,接口看起来好像很复杂,但是线下场景是用控制台给封装的,最简单的使用方法是调用命令创建一下。只要改几个数据:一个是IP,就存储服务机器的IP,一个是名字,就是你PVC的名称,还有volume_id是共享存储的wwid。

示例调用后有个返回,表示正常的创建成功了,去检查这块PVC,如果没有异常的话就表示存储创建成功了。


7、部署 PolarDB Stack 集群


PolarDB Stack管控最佳实践

这是完整创建集群的Yaml,所有字段都在里面。这里follower number表示是RO节点数量,刚才提到的弹性扩容就是通过控制这个参数进行操作的。字段classInfo是数据库实例的规格,安装文件里提供很多系列的规格,有默认的,也可以自己去改,根据参数会创建相应的资源数据库。VersionCfg表示镜像版本,包括DB、PFS、cluster manager等,它用哪个版本的镜像就在哪个文件里配置,Port是数据库服务端口,是PVC的源信息,diskQuota是磁盘,是数据库可以使用的磁盘大小,如果要扩容的话需要改这个参数。

这个截图,五分钟左右集群会创建成功,集群状态标志running说明已经创建好了,进到容器里面试一下PG是不是好的,如果是好的就没有问题了。

PolarDB Stack管控最佳实践PolarDB Stack管控最佳实践

PolarDB Stack管控最佳实践

创建好后去看下pod,是一个RW节点和两个RO节点,这个是刚刚配置的,可以在cluster实例状态里看到集群信息,下边这张图有一个status,它里面会标注哪个节点是RW节点,哪个节点是RO节点,可以根据这个了解集群节点的状况。


8、运维 PolarDB Stack 集群-引擎小版本升级


PolarDB Stack管控最佳实践

比如遇到内核小版本需要升级的场景,先找到这个配置,它大概是Yaml的结构,配置Engine, PFS的镜像版本,再复制一份,改成需要升级的镜像版本,改个新名字保存后去apply,新配置生成后,把dbcluster里字段versionCfgModifyTo.新配置名称填进去,再保存一下,几分钟后就完成了。

我们可以看到upgrade version变成了running的状态,就完成了升级,如果自己有环境的话可以试一下。


9、运维 PolarDB Stack 集群-RO节点弹性伸缩


PolarDB Stack管控最佳实践

比如要增加一个RO节点,在集群的文件里把followerNum改成二,保存后集群的状态变成了running,这个伸缩就完成了,再验证pod,可以看到多出了一个节点,整个过程都是自动完成的。


10、运维 PolarDB Stack 集群-存储扩容


PolarDB Stack管控最佳实践

自己的存储设备已经扩容后,需要告诉DB引擎已经扩容了,要在cluster里面把diskQuota改成扩容后数值,单位是兆,文档里面有详细的描述。再去设置扩容的标志onnotation,告诉它要扩容,集群会自动完成扩容的操作,完成后可以去验证数值是否变了,如果变了就表示成功了。

上一篇:Silverlight 2 End to End教程:创建Digg搜索客户端


下一篇:PG+MySQL第11课-多维向量搜索