开发者学堂课程【PolarDB-X 开源系列课程:本地部署 PolarDB-X(三)】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/1032/detail/15140
本地部署 PolarDB-X(三)
五、四种方式部署 PolarDB-X
下面就是我们来开始做一些实操。实操今天是一个入门的课程,在大家能做后续的一系列实验的前提下,都是首先将 PolarDB-X 给部署起来。所以我们今天先来讲一下如何将 PolarDB-X 给部署起来。
我们这次的训练营是通过云起实验室,也就是阿里云给大家提供的一个免费获取阿里云的资源来做一些实验的场合,让大家来体验一下 PolarDB-X 的各种的部署方式,包括后面的几节课。最终的客户实操的部分都是通过云起实验室来进行的。
大家可以扫描这个二维码,就会跳转到我们 PolarDB-X 云体实验室的入口页面。今天展示部署的部分,我就以实验室里面如何一键部署安装出了 PolarDB-X 来做展示的内容。因为之前可能有些同学是没有操作过或者没有使用过云起实验室的,可能对这个环境还不是非常熟悉。
所以这边就直接讲第一个的内容,在这个云栖实验室里面直接进行操作。
那么进入云起实验室界面之后,首先大家要点一下加入这个课程,后续的实验才能做。加入之后,今天比如说讲的是部署 PolarDB-X ,那么就可以点一下这个课程的第一个实验开始实验。如果之前你是没有阿里云这个开发者账号的,你可以注册一个,注册之后登录进来就ok了,注册是免费的,后面做这些实验也是免费的。
进来之后我们就会看到实验室它的一个最开始的页面:
它的页面左边是它的说明的部分,比如说实验手册,就是你要跟着它,怎么样去一步步的操作完成这个实验。第二部分就是云产品的资源,就是做这个实验是要在阿里云提供的免费的 ECS 上来做的,这里面会将云产品的资源的息给到你;最后是实验报告,你做完之后可以写一下你做这个实验的一些体会收获或者是吐槽都行,可以写个实验报告。
现在就来实操一下这个实验,正常的话你看到的应该是进入实验或者开始实验,在这个页面的右上角。因为我这提前已经做过一个实验,所以显示就是再次实验,没有任何影响。
首先先点一下右上角开始实验这样一个按钮。点完之后,页面中间创建资源规则按钮就变成可点击的状态,所以做这个实验的第一步就是你要首先创建一下资源。创建资源就是在云上面去创建一个免费的 ECS 的过程,它需要一点点的时间,这时候大家需要稍微等一下,一会资源创建好之后,我们就可以看一下左边的实验手册了。我们现在可以将这个上面这部分被收起来,让手册清晰展现出来。
现在资源已经创建出来了,左边是 ECS 的基本的信息,大家可以忽略它。右边是我们已经获得了一个连接到 ECS 的Shall 的窗口,所以刚才在开始之前有的同学说是不是门槛比较高,是不是从0开始就可以进行。最好有一点点Share 的常识,原因就是因为我们后续的一些实验都是在Shall 里面进行操作的,所以如果你之前稍微有一些基本的操作、对这个东西有个概念的话,会让你觉得这个地方没有那么的陌生或者担忧。下面我们就开始进行实验的部分,刚才就是创建资源是这个实验的第一部分。
创建完成之后,我也会跳转到它的第二步。第二步就是安装我们的依赖,我们今天讲的 PolarDB-X 一共有四种部署方式:第一种就是直接用 Docker来本地跑一个容器;第二种是我们提供的一键安装的一个工地叫PXD 以及用PXD 来拉起一个通过 PolarDB-X 的示例或者叫做集群;第三种方式就是用K8S Operater的方式;最后一种是源码编译。
1. 首先我们来体验一下,用 Docker 进行 PolarDB-X 安装的过程。首先我们在机器上安装一下 Docker 。如果之前你对 Docker 或者 K8S 这些容器的东西不是很熟悉的话,这里也可以作为简单了解这些东西的一个场合,如果你没什么概念的话,你可以将 Docker 简单的理解成是在你的机器上跑的一个进程,然后你可以把它想象成是conmact这样一种东西,你的应用呢就是里面的沃尔包,然后外面的这一层,就是对应的jshocker key 这样的简单理解。最后 comtact再加上沃尔包搞起来之后,是一个进程,它是你的应用,那么这就是 Dcoker 的一些运行时是再加上打的镜像包;最后跑起来是一个完整的进程,它就代表了 PolarDB-X 这个系统。
到后台安装可能稍微需要一些时间,我们稍微等他一下。安装完成后,启动,启动完毕。这样就是在 ECS 上面已经成功的跑起了Docker 的环境。下面就来把 PolarDB-X 给跑起来。关于 Docker ,首先你不管是想跑一个什么样的应用,第一步都需要将应用所对应的一个 Docker 镜像给拉到你的本地,所以它对应的命令就是 Docker pull 对应你镜像的名称。所以现在我们首先将做 PolarDB-X 的镜像给达到本地。这个镜像的获取的过程是在线进行的,所以如果镜像比较大的话,它需要一些时间,具体时间的话就依赖于镜像大小以及网络的速度。通常来说在一个生产环境里面,如果你们是融机化的话,
就会有自己本地搭建的镜像仓库,来减少拉取镜像的时间。现在 PolarDB-X 的镜像已经获取完毕了,下一步就是可以将 PolarDB-X 溶剂给运行起来。无脑复制左边的教程里面的命令,然后把它给粘贴到右边在窗口里面。
简单来看一下这个命令,启动容器就是 Docker,容器的名字叫做 Some-polardb-x , -p 的意思就是将容器内部的8527端口映射到宿主机,这样在本机就可以直接通过8527连上 PolarDB-X 这个数据库,后面就是我们的镜像的名称。我们来启动一下 PolarDB-X ,容器的启动过程稍微需要一点点的时间,所以我们这边就耐心的等待一下。那如果不熟悉 Docker 的同学的话, Docker 有几个常用的命令:
第一个就是docker images,意思就是展示我本机目前所有的镜像,因为刚才我们获取了一个镜像,所以你可以看到在本机目前只有 PolarDB-X 这么一个镜像,他会告诉你他的ID是什么,然后这个镜像是在两周之前打包好的,镜像大小1.49个GB,这是第一个命令 Docker images;第二个是 Docker ps,如果你对 shall 的命令比较熟悉的话,类似于ps这样的命令,就是将当前正在运行的容器进行一个展示。如果你的容器正在运行,因为各种原因挂了, Docker ps是没有的,可以看到当前是有一个容器正在运行的,也就是我们刚刚启动的 PolarDB-X 这个集群。那如果你想看到所有的容器,包括已经挂掉的容器,那么后面可以加一个 -a 它就类似于Linux的那个一个命令叫ls-a的参数,可以将包括已经挂掉的容器也展示出来,刚才我们展示的另外一个 Docker pull 和 Docker run,这些都是 Docker 里面常用的一些命令。
因为 PolarDB-X 是一个兼容 MySQL 的分布数据库,所以我们可以通过 MySQL 的 Client 直接连上 PolarDB-X 来进行一些常规的操作: PolarDB-X 也好,或者TML 、 DML。所以我们现在本地 MySQL 安装好之后,看一下这个 MySQL 安装的是8.0的版本,确认 MySQL 安装完成之后,通过 MySQL 的命令连接一下 PolarDB-X 。可以看到这个命令就是 MySQL 连接本地的8527这个端口,用户名是polardbx_root,密码是123456。我们试一下,好,我们现在已经可以成功的连接到 PolarDB-X ,可以看到的是通过 Select Version ,我们会返回一个版本号,这个跟 MySQL 是不一样的。所以首先说明这不是 MySQL ,它就是连上了一个 PolarDB-X 的实例。连接完之后,我们就可以做一些常规的操作,在这个手册里面也给了大家一些基本的体验 PolarDB-X 的一些 SQL ,比如说第一条SQL是你可以去从Information Schemata里面去获取一些系统原数据的信息,比如说这条 SQL 就是查一下这个实例里面都有哪些库,它会反馈给你目前有两个库,都是系统库。
第二个命令我们可以来创建一个自己的数据库,名字叫做polardbx_example,创建的时候我们来加一个参数,即创建数据库的模式。目前有两种方式,一个是 partition ,一个是 auto 。这里我们选择 auto ,它就是刚才我在讲前面的内容的时候所提到的透明水平扩展里所谓的透明。这边如果大家选择 auto 的话,那跟分布式相关的一些 PolarDB-X 会透明,也就是自动的帮你给处理好。这里我们来创建一下它,创建完成之后,尝试在里面去建一张表。在这个教程里面,它建表的时候显示指明了说要用哪个列来进行拆分,然后拆几个分片。
这里的话就是用ID进行一个 hash 的拆分,拆成八个片。那么未来就证明说,在透明模式下,也就在是auto的这种模式下,我们可以不用太关心具体怎么分,所以我们将建表语里面的partition部分给去掉,来进行对比。首先我们建一个没有去掉的,再建一个去掉的。没有去掉的那个表叫 example ,去掉的加一个example 2。
两张表现在都创建好了,接下来会有一些插入数据的操作,你会发现跟 MySQL 一模一样,没有什么特殊。这里我就不进行了,接下来有一个大家没见过的语句叫做 show topology from example (一个 table name ,一个表名)意思就是展示一下这张表的 Took 结构。
因为在单机里的表一定是在本地存放,在分布式里面你的表可能会分成若干个分片,所以这个 SQL 就是用来展示这张表到底有几个分片。我们来进行一下尝试,首先对第一张表example,也就是说显示了指定拆分算法以及拆分的分片处理的这样一张表来进行查看,可以看到它被分成了八个分片;接下来我们再对刚才没有显示的指定拆分算法和拆分分片数的表,也就是 example 2进行图谱的展示。会发现它同样也是被拆成了八个分片,也就是说 PolarDB-X 可以自动的帮你去处理这些分布式的内容来降低学习和使用门槛。
另外一个功能就是前面提到的 CDC ,如果你对 MySQL 比较熟悉的话, My SQL 里面关于 binlog 有一些指令,比如说它有这样的一个指令来查看当前节点的一个状态,也就是目前我的binlog它已经记录到什么位置了,这样一个命令叫做 show master status 。可以看到当前它的 binlog 是写到了 binlog 000001这个文件里面,位点已经写到了698。我们可以看一下目前这个 binlog 里面都有哪些事件;另外一个命令就是 show binlog events ,in这个文件from 4的位置,之后我们来看一下,可以看到它会将后续的一些 binlog 的事件都进行了一个解析,这两个命令是跟 MySQL 里面的操作是完全一样的,就是它的语法和行为都是完全兼容的。另外 PolarDB-X 的一些指令,比如说你想看一下当前这个系统当中 DN 的节点的情况,你可以通过自己的show storage命令来查看。
他会告诉你当前有两个 storage ,也是两个DN 节点:一个就是 DN ,一个就是GMS。如果你看他的IP的话,会发现他们是一样的。也就是说,当前在容器化部署的方式的时候,我们是将 GMS和 DN 通过共享一个节点的方式来实现的。这个仅限于就是我们一体化的容器,也就是刚才的 Docker ,一个容器可以拉几个这样的方式。DN 和GMS是共享的,还有一些其那我这边就不再展示了,现在我们就退出 MySQL 。那这样,我们就通过 Docker 一键拉取 Docker 这样一个方式,在这台机器上运行了一个 PolarDB-X 的实例,并里面做了一些 SQL 基本的操作,最后我们可以将这个示例给停掉,就是 Docker 另外一个常用的命令Docker stop。你可以将某个容器停掉。
接下来我们再来看一下第二种部署方式,通过 PXD 提供的一键部署的工具来进行部署。PXD 是我们开发认为就是一个Python的脚本。来体验一下,同样我们参考实践手册,在探索里面建一个虚拟的环境。建好之后进入这个虚拟的环境,将Python的工具进行升级,整理完之后 python的环节我们就准备好了,接下来就用 pip 工具来装一下 PXD 工具。如果大家对Python或者是Python的虚拟环境,或者对pip这三个东西不是很熟悉的话也没关系,只要无脑的按照这个教程去操作一下就行了,反正就是装了一堆依赖,然后做了一个环境,并装了一个工具,就是这样的。这样我们在本地安装好 PXD 一键部署 PolarDB-X 的工具之后,就可以用教程里面的一个命令叫做 PXD tryout。简单的试用一下 PolarDB-X 的一个命令。
创建一个叫做tryout的 PolarDB-X 示例,接下来我们 PXD 工具就会把创建 PolarDB-X 所需要的几个镜像:CN的镜像, DN 和GMS的镜像,再加上CDC的镜像,来进行一个远程的获取获取。获得到本地之后,再拉起一个 PolarDB-X 的集群。在这个集群里面,包含一个CN、一个 DN 、还有一个GMS和一个CDC。镜像的获取稍微需要一些时间,大家需要稍微等一下。关于这个实验室,还有另外一个功能,就是在页面的右上方有一个加号,这个加号的意思是要打开一个新的终端。有些情况下,比如说后续的有些实验可能需要在多个端口当中进行一个操作,那这个时候你就可以点一下这里的加号。
在这个时候,我们再稍微练习一下刚才学的几个关于 Docker 的命令:第一个是 Docker images,查看一下本机所有的镜像,你可以看到现在我已经有两个镜像了,一个叫刚才获取的 PolarDB-X ,另外一个呢叫做Galaxy SQL ,也就是我们CN单独的镜像; Docker ps现在已经没有容器在运行了,加一个 -a 会发现 PolarDB-X 刚才我们创建的那个东西还在,只不过现在已经停止运行了,就是 Docker p -a它的效果。可以看到现在我们又获取了一个新的镜像,叫做 Galaxy engine ,也就是我们的 DN 节点所用的镜像。
如果你对 Docker 的镜像概念比较了解的话,会发现我们刚才在创建,直接用 Docker 来跑起一个 PolarDB-X 的时候,所使用的是一个 PolarDB-X 镜像。那么 PXD 这个工具它又使用了另外的其他的镜像,也就是它们镜像其实是不共行的。所以在 PXD 这个工具,他依然要有再次获取镜像的操作。
可以看到我们已经获取了 Galaxy SQL 也就是 CN ,还有Galaxyengine是 DN ,还有Galaxy CDC 这样三个镜像,还包括一些其他辅助工具的镜像,目前我们的 PXD 配套工具都自动化把它们给获取掉了。这个时候我们再来看一下创建的进度,已经进入了创建jms 节点的步骤。这里这个过程稍微需要一些时间,咱们大家再稍微等一下。我这次之所以用云起实验室来直接给大家进行一个演示,虽然有些部分它会需要等网络或者其他一些操作需要时间,但是对没有接触过云起实验室的同学来说,会有一个比较好的感受,这样在自己去上手操作的时候,不会对这个环境感觉到陌生。现在我们的GMS已经创建好,会在里面加一些基本的原数据的信息去创建账号,做完之后会开始创建我们的 DN, DN 创建完成之后会进行CN的创建。现在 CN 和CDC都创建完了,那么它会等待整个系统到 ready 状态,再稍微给他一些时间。现在 PXD 就将try out的 PolarDB-X 示例给创建出来了,最后他会输出一句提醒可以通过这样一个命令连接到刚才创建的实例,可以看到 PXD 创建的一个 PolarDB-X 的系统账号的密码是随机的,他会仅仅提醒了一次,所以如果后续你还要用的话,可以把这个密码给记下来。现在我们就通过给的这个命令就连接到了 PolarDB-X 里面。那这个实例跟刚才 Docker 容器创建的在体验上是一致的,同样可以通过创建一个auto模式的数据库,建一些表,插入一些数据,看一下它的拓扑,然后看一下 binlog 的信息等等操作,那这里呢我就不再展示了。同时 PolarDB-X 还提供另外两种方式,一个就是后面会说用K8S来进行部署,还有一个就是源码部署。这两步呢比较耗时间,但是按照这教程的话都是可以完成的,然后限于时间关系,我这边就不再进行展示了,大家在课后的实验的时候,可以自己进行一个更加完整的体验。那以上就是今天这个我的讲述部分。