对于PolarDB数据库其实大家并不陌生,阿里云以PolarDB为核心的瑶池数据库业界首创计算、内存与存储资源的“三层解耦”架构,并率先落地多主多写、基于内存池化的HTAP、Serverless、一体化分布式等全球领先的技术创新,因此也成为了亚太唯一,连续4年稳居Gartner全球云数据库报告「领导者」。
周周在过去已经实测过一次PolarDB Serverless版的基础能力了(点此直达),总结来看优点可以概括为三个:秒级弹升、无感伸缩、强一致性。具体优势如下图(官网给出):

而这次,我想将目光聚焦于PolarDB的开源版本——PolarDB-X,旨在深入挖掘其在自建环境下的部署便捷性、性能表现与可扩展性。不同于Serverless版自动化的无忧管理,开源版更侧重于给予用户高度的定制化与控制权,这对于追求技术自主性和成本优化的开发者而言,无疑是一大吸引力。下面,让我们从部署开始逐一揭开PolarDB-X开源版的神秘面纱。
PolarDB-X 作为PolarDB分布式版,是阿里巴巴自主设计研发的高性能云原生分布式数据库产品,采用 Shared-nothing 与存储分离计算架构,支持集中式和分布式一体化形态,具备金融级数据高可用、分布式水平扩展、混合负载、低成本存储和极致弹性等能力,坚定以兼容MySQL开源生态构建分布式能力,为用户提供高吞吐、大存储、低延时、易扩展和超高可用的云时代数据库服务。
PolarDB-X在架构上可以简单分为CN节点(计算节点)和DN节点(存储节点)。计算节点CN负责SQL的解析和执行,存储节点DN负责数据的分布式事务和高可用存储。

除此,还包含GMS(元数据服务)和CDC(日志节点)。GMS(元数据服务)负责维护全局强一致的 Table/Schema, Statistics 等系统 Meta 信息,维护账号、权限等安全信息,同时提供全局授时服务(即 TSO)。CDC(日志节点)日志节点提供完全兼容 MySQL Binlog 格式和协议的增量订阅能力,提供兼容 MySQL Replication 协议的主从复制能力。
产品下载地址如下:开源PolarDB -X 部署安装
- 金融级高可靠场景:基于X-Paxos实现的数据三副本强一致,让业务轻松具备跨多可用区的高可用与容灾能力。
- 海量数据归集场景:PolarDB-X的平滑扩展能力,让客户轻松实现横向和纵向的容量变更且保持访问性能不变。
- 超高并发访问场景:深度优化的PolarDB-X计算下推能力显著提升在线事务处理性能,令访问尖峰丝般顺滑。
- HTAP混合负载场景:无需进行ETL,可对在线数据做实时报表分析。

下面仅给出部分,具体内容请参考官方文档
为了保证副本间的强一致性,现代数据库往往采用以Paxos为代表的多数派复制协议。Paxos通常要求集群中至少存3个节点,每次写入都要获得超过半数节点的确认,即便其中1个节点宕机,集群也仍然能正常提供服务。Paxos算法能够保证副本间的强一致性,彻底解决副本不一致问题。
PolarDB-X在副本复制方面采用了X-Paxos。X-Paxos是阿里巴巴自研的Paxos协议实现,起源于AliSQL(阿里内部的 MySQL 分支)。基于朴素的Paxos实现,它在功能、性能上都做了大量优化,且经历了数十载的双十一考验,稳定可靠。

X-Paxos实现了Multi-Paxos算法,通常存在一个相对稳定的Leader节点用于处理读写请求。如果Leader节点因为某些意外情况发生宕机或超时,Follower节点就会重新发起选主投票,如果得到超过半数的选票则成为新的Leader。Logger节点只负责保存日志以及参与Paxos投票。Learner节点通常用在只读实例中,它仅仅接受主机群的变更日志,不参与Paxos投票。
此外,X-Paxos还支持动态添加删除节点、权重化选主、Leader主动回切等企业级特性,允许用户根据业务需求灵活定义部署方式。
PolarDB-X原生支持分布式事务,并保证事务的ACID性质。
- 原子性(Atomicity)
- 一致性(Consistency)
- 隔离性(Isolation)
- 持久性(Durability)
PolarDB-X通过引入中心授时节点(TSO),结合多版本并发控制(MVCC),确保读取到一致的快照,而不会读到事务的中间状态。如下图所示,提交事务时,计算节点(CN)执行事务时从TSO获取到时间戳,随着数据一同提交到存储节点(DN)多版本存储引擎上,读取时CN通过读取快照时间戳去DN上读取相应版本的数据。

PolarDB-X将数据表以水平分区的方式,分布在多个DN(Data Node,数据节点)上。数据分区方式由分区函数决定,PolarDB-X支持哈希(Hash)、范围(Range)等常用的分区函数。
以下图为例,shop库中的orders表根据每行数据的id属性的哈希,被水平切分成orders_00~orders_11共计12个分区,均匀分布在4个数据节点上。PolarDB-X的分布式SQL层将会自动完成查询路由、结果合并等。

PolarDB-X通讯协议兼容MySQL协议,可以使用常见的MySQL客户端直接连接到PolarDB-X集群,包括JDBC Driver、ODBC Driver、Golang Driver等。兼容MySQL SSL、Prepare、Load等传输协议。
PolarDB-X兼容MySQL的各种DML、DAL、DDL语法。
PolarDB-X事务采用基于乐观读(ReadView)、悲观锁的设计,支持ANSI标准中的四种隔离级别,且行为和MySQL一致。与MySQL相同,PolarDB-X默认采用可重复读(Repeatable Read)隔离级别,该级别下更新范围条件会引入间隙锁(Gap Lock)。
PolarDB-X账号权限系统的用法跟MySQL一致,支持GRANT、REVOKE、SHOW GRANTS、CREATE USER、DROP USER、SET PASSWORD等语句。目前支持库级和表级权限的授予,暂不支持列级别权限。更多信息参见账号与权限。
PolarDB-X还支持基于角色(Role)的权限管理。角色(Role)是分配给账号(User)的权限的集合,定义了允许账号在应用程序中查看和执行的操作。PolarDB-X中的Role操作与MySQL的操作兼容。
olarDB-X兼容MySQL的常规备份策略。备份操作通常都发生在非主节点上,可以确保备份操作对在线业务流量无影响,同时支持定时全量备份、实时binlog增量备份的能力。支持任意时间点的一致性恢复。
PolarDB-X兼容MySQL的透明数据加密TDE,支持将数据表空间的文件做加密处理,确保业务数据的安全性。
PolarDB-X兼容MySQL binlog复制协议。用户可以将PolarDB-X集群看作一个普通的MySQL节点,将其他MySQL节点作为PolarDB-X的同步源端或目标端。
PolarDB-X的binlog格式和MySQL原生格式一致,因此也可以用于CDC场景,例如利用 Canal 等将PolarDB-X的写入数据同步到其他存储中。
全局二级索引(Global Secondary Index,GSI)是PolarDB-X中的一项重要特性,相比于本地二级索引,全局二级索引中的数据按照指定的拆分方式分布在各个存储节点上。通过全局二级索引,用户能够按需增加拆分维度、提供全局唯一约束等。
每个GSI对应一张分布式索引表,和其他分布式表一样,按照指定的分区规则水平拆分为多张物理表。PolarDB-X使用分布式事务维护主表和索引表之间数据强一致。

PolarDB-X是一款支持HTAP(Hybrid Transaction/Analytical Processing)的数据库,在支持高并发、事务性请求的同时,也对分析型的复杂查询提供了良好的支持。
为了加速复杂分析型查询,PolarDB-X将计算任务切分并调度到多个计算节点上,从而利用多个节点的计算能力,加速查询的执行。这种方式也称为MPP并行计算。

MySQL binlog是MySQL记录变更数据的"二进制日志",它可以看做是一个消息队列,队列中按顺序保存了MySQL中详细的增量变更信息,通过消费队列中的变更条目,下游系统或工具实现了与MySQL的实时数据同步,这样的机制也称为CDC(Change Data Capture,增量数据捕捉)。
PolarDB-X是兼容MySQL生态的分布式数据库。通过集群内的CDC组件,PolarDB-X 能够提供与MySQL binlog格式兼容的变更日志,并且隐藏掉集群扩缩容、分布式事务、全局索引等分布式特性对外部的影响,以便提供与单机MySQL数据库一致的使用体验。

PolarDB-X支持多种形态的快速部署能力,可以结合各自需求尽心选择。
但是注意,推荐在Linux虚拟机环境下进行部署体验,不要在自己本地环境里,更不要在windows系统下直接装docker来测试。另外,虚拟机实验前请做快照,因为涉及多种部署方式,快照可以方便恢复状态。

【注意】:PXD 主要面向的是开发测试场景,生产环境请使用 polardbx-operator 在 K8S 上进行部署。
这里先采用依赖最少的RPM包部署方式,通过 RPM 部署 PolarDB-X 标准版(集中式形态),需要首先获取相应的 RPM 包点此链接到达下载界面。依据自己的电脑情况下载对应版本。

下载完后如图所示。

打开虚拟机,初次实验的小伙伴可以参考我的这篇文章:Linux技术基础(1)——操作系统的安装 ,里面详细讲述了如何从0到1安装龙蜥操作系统虚拟机,这里就不过多赘述。
使用shell或者finalshell远程上去,把rpm文件拖入进服务器。

进入你拖入rpm的文件夹下,我的为/usr/local/sbin,所以执行如下命令。
讯享网
执行如下命令开始快速安装:
讯享网
安装过程如下图,请耐心等待~

安装完毕后如图所示:

安装后的二进制文件,会出现在 /opt/polardbx-engine/bin 中。

准备一份 my.cnf(参考模板)和数据目录(如果改了 my.cnf,则下面的目录也要相应修改),就可以准备启动了。
my.cnf内容如下,可以自行修改:
讯享网
进入虚拟机中,执行如下命令:

接下来创建my.cnf文件:
讯享网

初始化并启动PolarDB-X :


查看进程启动状态和日志状态:
讯享网


登录数据库,验证状态:
讯享网

因为默认my.cnf只配置了单机模式启动,因此只会显示单副本的Leader状态。
另外此处其实有好几个雷区,有的时候莫名其妙执行初始化任务时会失败。

会直接弹error日志报错,大概是cannot create directory ‘/opt/polardbx_engine/data/’: Permission denied,就是权限不够,这时候要切回root账号再去执行初始化任务。
如还有异常可以直接去alert.log里面查看,这种方式安装感觉不是特别稳定,稍有不慎就会有报错,不过也因为是测试环境,所以问题不大。
还是按照操作一步一步来,先安装 Python3 和 Docker。

检查命令:
讯享网
如果有返回则代表 python3 已安装。

接下来安装docker:

安装完成后启动docker。
讯享网

执行 docker ps 命令验证。
至此,Python3 和 Docker就已经部署完成了,下面就来使用 virtual environment 安装 PXD 工具。
讯享网

先执行如下命令升级 pip
如果出现下列样子,则是加载超时了:

改为执行如下命令:
讯享网

然后再使用如下命令从阿里云的镜像安装,国外的镜像太慢了:


执行如下命令验证 pxd 是否安装成功:
讯享网

接下来开始部署部署 PolarDB-X。
PolarDB-X 企业版是分布式架构集群,支持更大数据量,面向具备企业级超高并发、大规模数据复杂查询、加速分析的业务场景。 直接运行 pxd tryout 命令会创建一个最新版本的 PolarDB-X 企业版集群,其中 GMS, CN, DN, CDC 节点各 1 个:

等到PolarDB-X 数据库创建完成后,会输出对应的连接信息,大概三十分钟左右,有些慢:

需要注意的是,PolarDB-X 管理员账号的密码随机生成,仅出现这一次,请注意保存。
执行如下命令,查看当前环境的 PolarDB-X 列表:
讯享网

上面安装的是署 PolarDB-X 企业版集群,同理,我们也可以尝试安装PolarDB-X 标准版集群。PolarDB-X 标准版采用一主一备一日志的三节点架构,性价比高,通过多副本同步复制,确保数据的强一致性。面向具备超高并发、复杂查询及轻量分析的在线业务场景。
首先,我们执行如下命令,清理本地环境所有的 PolarDB-X:


执行如下命令会创建一个最新版本的 PolarDB-X 标准版集群,其中 GMS, CN, CDC 个数为0,仅包含一个DN节点。
讯享网

当然,如果想创建基于 Paxos 的一主一备一日志的三节点集群,也可以使用如下命令:
后面的安装过程就与上文一致了,为了节约时间,在此也不过多赘述,以上就是用PXD在本地部署PolarDB-X 单机的过程。
顺便一提,PXD 除了支持在本地一键创建实例外,也支持在 Linux 集群部署 PolarDB-X,可以组三台虚拟机搭建一个三节点集群,具体可以参考如下位置:

对于这三台虚拟机,也是有一些要求的:
- 集群内的所有机器都能访问互联网。进入机器后执行:ping www.baidu.com ,测试其网络是否正常。
- 在集群内的所有机器上安装 Docker。这个可以参考上文的步骤来做,最后执行docker --version来查看是否有回显即可。
- 集群机器建配置免密登录。选择任意一台机器作为部署机,配置部署机到集群所有机器的免密登录
最后一点额外说明一下,这里就是使用ssh-keygen来生成密钥对实现对于其他机器的免密登录,是为了方便跨节点进行一系列配置、数据同步、状态检查等操作。
讯享网



在此输入密码即可,回显如下即表示添加成功。

接下来,开始在部署机上安装 PXD,该过程与单机部署过程基本一致,下面仅贴出命令,不过多解释和赘述。
安装 Python3,执行如下命令:
讯享网
创建一个 Python3 的 virtual environment 环境并激活
安装PXD前建议先执行如下命令升级pip
讯享网
执行如下命令安装 pxd:
至此,pxd部署完成。接下来开始准备 PolarDB-X 拓扑文件,这个文件主要是描述PolarDB-X集群组件布局、网络连接信息以及各节点角色配置的配置文件或定义。
由于PolarDB-X目前包含企业版和标准版两个系列,其对应系列的拓扑文件也不相同,大家按各自需求准备即可,在此,我以企业版为例进行安装部署。
PolarDB-X 企业版拓扑文件是分布式架构集群,支持更大数据量,面向具备企业级超高并发、大规模数据复杂查询、加速分析的业务场景。
首先执行如下命令获取 PolarDB-X 各个组件的最新镜像版本(需要填入YAML文件):
讯享网

编写如下的 YAML 文件,指定 PolarDB-X 企业版集群的名称以及 GMS, CN,DN 的部署节点。比如:总共准备了3台机器1.1.1.1、1.1.1.2、1.1.1.3.
假设 1.1.1.1 用来部署gms、cdc节点;1.1.1.2、1.1.1.3用来部署cn/dn各两个节点,其中dn下的 host_group 表示一个dn节点多副本的部署机器,比如Paxos三副本的话需要填入三个ip。
通过以上拓扑文件创建的 PolarDB-X 企业版集群。拓扑文件包括如下属性:
- version: 拓扑文件版本,无需修改
- type: polardbx, 无需修改
- cluster.name:PolarDB-X 集群名称
- cluster.gms.image: gms docker 镜像名称,建议填上述命令的获取到的 DN 镜像,如不填,默认为最新镜像
- cluster.gms.host_group: gms 机器 ip 列表,如果想创建单副本模式,列表中填写1个ip即可,如果想创建基于Paxos的三副本集群,列表中填3个ip即可,三副本集群的Leader节点将从前两个ip的节点上随机选出。
- cluster.cn
- image: 计算节点镜像名称,建议填上述命令的获取到的 CN 镜像,如不填,默认为最新镜像。
- replica: 计算节点数目,需要与nodes中的host数量对应
- nodes: 计算节点的ip列表
- resources: 计算节点使用的资源
- mem_limit: 内存上限,默认 2G
- cluster.dn
- image: 数据节点镜像名称,建议填上述命令的获取到的 DN 镜像,如不填,默认为最新镜像
- replica: 数据节点数目,需要与nodes中的 host_group 数量对应
- nodes: 存储节点的host_group列表,一个 host_group 表示一个dn节点多副本的部署机器,比如Paxos三副本的话需要填入三个ip,例如:[172.16.1.11,172.16.1.12,172.16.1.13]。三副本集群的Leader节点将从前两个ip的节点上随机选出
- resources: 存储节点使用的资源;mem_limit: 内存上限,默认 2G
- cluster.cdc
- image: CDC 节点镜像名称,建议填上述命令的获取到的 CDC 镜像,如不填,默认为最新镜像
- replica: CDC 节点数目,需要与nodes中的host数量对应
- nodes: CDC 节点的ip列表
- resources: CDC 节点使用的资源;mem_limit: 内存上限,默认 2G
接下来,开始创建 PolarDB-X 集群,执行如下命令,即可在集群内一键部署 PolarDB-X:
讯享网
时间也很慢,大概要过三十多分钟。。。不知道是我家网卡还是咋地。。。

安装完成后,发现和上面单机部署明显不同的是,此处会生成两个连接地址。

而查看和管理命令依旧采用PXD的语法,见上文即可。
至此,通过PXD部署多服务器集群环境完成。
采用k8s部署的话,也是官方推荐的正式环境下的部署方式。
官方推荐的是采用 minikube 创建 Kubernetes 测试集群,当然,我们也可以使用阿里云的 容器服务 ACK 来创建一个 Kubernetes 集群,并遵循教程部署 PolarDB-X Operator 和 PolarDB-X 集群。
minikube 是由社区维护的用于快速创建 Kubernetes 测试集群的工具,适合测试和学习 Kubernetes。使用 minikube 创建的 Kubernetes 集群可以运行在容器或是虚拟机中,本节中以 CentOS 8.2 上创建 Kubernetes 为例。
部署前,请确保已经安装 minikube 和 Docker,并符合以下要求:
- 机器规格不小于 4c8g
- minikube >= 1.18.0
- docker >= 1.19.3
下面我们来部署minikube,这里官方文档也并未提及到。
首先安装 conntrack

下载安装 (x86)版,等待大约5分钟。
讯享网

设置可执行权限

启动 minikube,这里内存太少了,得调一下虚拟机的内存。
讯享网

一切运行正常,输出如下,我用的连接器不能识别表情符号,所以看不到官方那样的:

此时 minikube 已经正常运行。minikube 将自动设置 kubectl 的配置文件,但是没有安装 kubectl ,所以minikube 也提供了子命令来使用 kubectl,不过似乎需要下载相关组件:

有时候下载也会出现超时的情况,如下:

所以这里我还是推荐先安装 kubectl,再使用 kubectl 来访问集群:
下载kubectl文件:
讯享网

赋可执行权限:
移动到系统目录:
讯享网
测试执行,查看回显:
再执行如下命令查看:
讯享网

所以啊,这里又是一个雷区,用minikube 提供的子命令来使用 kubectl真的不靠谱啊,组件要下载一百多个小时。。。
接下来,开始部署 PolarDB-X Operator。这里有提了一堆需求,没办法,慢慢来做吧。

首先创建一个叫 polardbx-operator-system 的命名空间

执行以下命令安装 Helm3,先下载:
讯享网

随缘吧,外网的反正也不稳定,等他自己慢慢下载吧
下载完之后解压。
拷贝到该目录下。
讯享网
执行验证。

OK,接下来再安装 PolarDB-X Operator。
讯享网
又是漫长的等待。。。不对,我卡了,错怪你了牢里!等待看到回显如下:

查看 PolarDB-X Operator 组件的运行情况,等待它们都进入 Running 状态后,PolarDB-X Operator 就安装完成了,现在可以开始部署 PolarDB-X 集群了

这里我还是以企业版集群为例子吧。PolarDB-X 企业版是分布式架构集群,支持更大数据量,面向具备企业级超高并发、大规模数据复杂查询、加速分析的业务场景。 现在来快速部署一个 PolarDB-X 企业版集群,它包含 1 个 GMS 节点、1 个 CN 节点、1 个 DN 节点和 1 个 CDC 节点。
等等,难道我中幻术了?这下面的部署过程怎么似曾相识。
执行如下命令获取 PolarDB-X 各个组件的最新镜像版本(需要填入YAML文件):
讯享网

准备一个quick-start.yaml文件,将如下内容粘贴到文件中,并根据上述命令的结果更新 YAML 文件各个组件的image字段。
执行如下命令创建集群:
讯享网

使用如下命令查看创建状态:

当 PHASE 显示为 Running 时,PolarDB-X 集群就已经部署完成了。
完成测试后,可以通过以下命令销毁 PolarDB-X 集群:

使用如下命令卸载 PolarDB-X Operator:
讯享网

Helm 卸载并不会删除对应的定制资源 CRD,使用下面的命令查看并删除 PolarDB-X 对应的定制资源:

至此,基于K8S 部署PolarDB -X已经全部完成。
这篇文章写了两天,三种部署方式都尝试了一次,也是一边写一边记录的,整体体验下来,我感觉PXD部署还是最简便和可靠的。
第一种方式我采用的是RPM包部署。里面的坑点就在于初始化PolarDB-X时容易报错,稍微容易一点解决的权限问题都还好说,有些报错问题是压根就看不明白,我把虚拟机恢复快照了三次才使用第一种方式安装成功,第一天大部分的时间都耗在这个上面了,所以建议在RPM包部署上的排错提示能稍微多一些,多给出一些已知问题的解决方案和针对性的解决建议。
第二种方式是PXD,也是目前我觉得体验感最好的一个,虽然也是有一些小坑。比如我上文提到的执行pip install –upgrade pip时可能会超时,部署下载过程很慢等等。。但这些都是可以通过查找手册解决的小问题,所以其实影响不大,这也是为啥我觉得该方式最好的原因。
第三种方式是K8S部署,这里我也没有说这种方式不好,主要是前奏准备阶段有些太长了,如果搭测试环境确实显得很臃肿,但是如果是正式环境的话也还是建议采用K8s来部署。里面的坑点我也提到了,不要使用minikube 提供的子命令来使用 kubectl,要下载一百多个小时!
根据这几天的体验,PolarDB开源版确实是展现出了无与伦比的灵活性与强大的性能潜力,尤其在自定义配置、资源优化以及对多样化业务场景的支持上,彰显了其作为新一代云原生数据库的独特魅力。它不仅巩固了PolarDB在数据库技术领域的领导地位,更为开发者和企业用户开启了一扇通往高效数据管理与分析的新大门。
未来,也期望PolarDB开源版能继续深化其在开源社区的影响力,通过不断吸纳来自全球开发者的智慧与创新,逐步完善产品功能,优化用户体验:包括增强数据库的安全性,提升跨平台兼容性,以及深化AI与机器学习技术的融合,使数据库能够自我学习、自我优化,更好地适应快速变化的业务需求。
在此,致谢。


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/188068.html