共计 7647 个字符,预计需要花费 20 分钟才能阅读完成。
架构简介
PolarDB-X 采纳 Shared-nothing 与存储拆散计算架构进行设计,零碎由 5 个外围组件组成。
PolarDB-X 架构
- 计算节点(CN, Compute Node)
计算节点是零碎的入口,采纳无状态设计,包含 SQL 解析器、优化器、执行器等模块。负责数据分布式路由、计算及动静调度,负责分布式事务 2PC 协调、全局二级索引保护等,同时提供 SQL 限流、三权分立等企业级个性。
- 存储节点(DN, Data Node)
存储节点负责数据的长久化,基于多数派 Paxos 协定提供数据高牢靠、强统一保障,同时通过 MVCC 保护分布式事务可见性。
- 元数据服务(GMS, Global Meta Service)
元数据服务负责保护全局强统一的 Table/Schema, Statistics 等零碎 Meta 信息,保护账号、权限等平安信息,同时提供全局授时服务(即 TSO)。
- 日志节点(CDC, Change Data Capture)
日志节点提供齐全兼容 MySQL Binlog 格局和协定的增量订阅能力,提供兼容 MySQL Replication 协定的主从复制能力。
- 列存节点 (Columnar)
列存节点负责提供列式存储数据,基于行列混存 + 分布式计算节点构建 HTAP 架构,预计在今年底或者明年初会正式开源
开源地址:https://github.com/polardb/polardbx-sql
版本阐明
梳理下 PolarDB-X 开源脉络:
- 2021 年 10 月,在云栖大会上,阿里云正式对外开源了云原生分布式数据库 PolarDB-X,采纳全内核开源的模式,开源内容蕴含计算引擎、存储引擎、日志引擎、Kube 等。
- 2022 年 1 月,PolarDB-X 正式公布 2.0.0 版本,继 2021 年 10 月 20 号云栖大会正式开源后的第一次版本更新,更新内容包含新增集群扩缩容、以及 binlog 生态兼容等个性,兼容 maxwell 和 debezium 增量日志订阅,以及新增其余泛滥新个性和修复若干问题。
- 2022 年 3 月,PolarDB-X 正式公布 2.1.0 版本,蕴含了四大外围个性,全面晋升 PolarDB-X 稳定性和生态兼容性,其中蕴含基于 Paxos 的三正本共识协定。
- 2022 年 5 月,PolarDB- X 正式公布 2.1.1 版本,重点推出冷热数据新个性,能够反对业务表的数据依照数据个性别离存储在不同的存储介质上,比方将冷数据存储到 Aliyun OSS 对象存储上。
- 2022 年 10 月,PolarDB-X 正式公布 2.2.0 版本,这是一个重要的里程碑版本,重点推出合乎分布式数据库金融规范下的企业级和国产 ARM 适配,共包含八大外围个性,全面晋升 PolarDB-X 分布式数据库在金融、通信、政务等行业的普适性。
2023 年 3 月,PolarDB-X 正式公布 2.2.1 版本,在分布式数据库金融规范能力根底上,重点增强了生产级要害能力,全面晋升 PolarDB- X 面向数据库生产环境的易用性和安全性,比方:提供数据疾速导入、性能测试验证、生产部署倡议等。
01 内核的稳定性和高性能
PolarDB-X 2.2.1 版本,重点面向生产级的部署要求,优化数据库实例的稳定性和性能、以及提供面向生产部署的相干最佳实际。
1. 最低部署规格 (倡议 >=2c8g)
GMS 和 DN 2.5 倍资源阐明:GMS 和 DN 是基于多数派 Paxos 协定构建的高牢靠存储服务,因而一个 GMS(DN)会包含三个角色的节点:Leader,Follower,Logger。Leader 与 Follower 资源要求雷同,保障高可用切换后的服务质量,而 Logger 节点,只存储日志,不回放日志,固定为 2 核 4GB 的资源规格,即可满足常见百万级 TPS 的需要。因而一个 GMS(DN)须要 2.5 倍的资源,其中 2 是 Leader 和 Follower 的资源,0.5 是 Logger 的资源。
能够参考文档:PolarDB-X 服务器举荐配置
2. 在线 / 离线装置部署
PolarDB-X 2.2.1 在面向很多线下用户 POC 测试,受限于现场网络条件,须要提供离线部署装置的能力,比方:从 3 台裸机开始,从 0 到 1 装置 PolarDB-X。PolarDB- X 提供了一键下载离线安装包的能力,
可参考文档:PolarDB-X 软件包下载
# 下载 x86_64 架构的 PXD 离线安装包
pxd download -env pxd -arch amd64 -repo "registry:5000" -dest ~/ -i images.list
# 下载 x86_64 架构的 PXD 离线安装包
pxd download -env pxd -arch amd64 -repo "registry:5000" -dest ~/ -i images.list
# 下载 ARM64 架构的 PXD 离线安装包
pxd download -env pxd -arch arm64 -repo "registry:5000" -dest ~/ -i images.list
# 下载 x86_64 架构的 K8s 离线安装包
pxd download -env k8s -arch amd64 -repo "registry:5000" -dest ~/ -i images.list
# 下载 ARM64 架构的 K8s 离线安装包
pxd download -env k8s -arch arm64 -repo "registry:5000" -dest ~/ -i images.list
同时,联合生产部署稳定性的要求,提供一份零碎与环境配置,蕴含零碎 OS 参数、磁盘配置等,可参考文档:PolarDB-X 零碎与环境配置
3. 性能全面晋升
PolarDB-X 2.2.1 在私有云上抉择了规范 ECS 进行了性能测试和摸底,相比于 2.2.0 版本联合多方面的优化,有了显著的性能晋升。
测试资源:
sysbench 测试:
TPC- C 测试:
可参考性能白皮书:
- PolarDB-X sysbench 测试报告
- PolarDB-X TPC-C 测试报告
4. 分布式 1024 节点
PolarDB-X 分布式数据库中最重要的个性就是线性扩大,目前市面上也有泛滥分布式数据库号称超大规模的线性扩大,但实践和实际还是须要相结合,通过面向用户可验证的形式,来体验下 PolarDB- X 在分布式 1024 节点下的稳定性。
PolarDB- X 提供了基于 k8s 生态构建的 polardbx-operator 组件,基于 k8s 的分布式容器技术能够疾速构建 PolarDB-X 1024 节点,思考用户的体验老本,采纳了虚拟化的压缩部署形式,抉择在 24 台 ECS 主机上实现分布式 1024 超大规格节点的部署,并通过近百万级别 TPS 的稳定性验证。
PolarDB-X 1024 节点主机资源
阐明:
- PolarDB- X 采纳存储计算拆散的架构,CN 和 DN 是能够独立部署,实验设计部署 1024 个 DN 节点,比方私有云 PolarDB- X 单个 DN 节点可反对 3TB,那超大规模节点下可反对 1024 * 3TB = 3PB
- DN 节点抉择了最小的 1C8GB (1024 节点下也须要 8TB 的内存),通过 k8s 的多租户 cgroup 技术,采纳 24 台高配 ECS 进行部署,单个 ECS 均匀须要承载 40+ 的 PolarDB-X CN/DN 节点。
- 本实验所须要的测试资源的老本,24 台 ECS 按量付费 288 元 / 小时,测试工夫 1 天左右,预计破费 7000 元。
参考文档:分布式 1024 节点!1 天玩转 PolarDB- X 超大规模集群
02 分布式 CDC 架构降级
Binlog 是 MySQL 记录变更数据的二进制日志,它能够看做是一个音讯队列,队列中按程序保留了 MySQL 中具体的增量变更信息,通过生产队列中的变更条目,上游零碎或工具实现了与 MySQL 的实时数据同步,此机制也称为 CDC(Change Data Capture,增量数据捕获)
PolarDB- X 是兼容 MySQL 生态的分布式数据库。通过实例内 PolarDB- X 的 CDC 组件,可能提供与 MySQL binlog 格局兼容的变更日志,并且对外暗藏了实例扩缩容、分布式事务、全局索引等分布式个性,让您取得与单机 MySQL 数据库统一的应用体验。
PolarDB-X 2.2.1 版本后,提供了两种状态的 binlog 日志生产订阅能力,且两种状态可同时共存。
- 单流状态:即单流 binlog 日志(也称为 Global binlog),将所有 DN 的 binlog 归并到同一个全局队列,提供了保障事务完整性和有序性的日志流,能够提供更高强度的数据一致性保障。例如在转账场景下,基于 Global binlog 接入 PolarDB- X 的上游 MySQL,能够在任何时刻查问到统一的余额。
- 多流状态:即多流 binlog 日志(也称为 Binlog-X),并不是将所有 DN 的 binlog 归并到一个全局队列,而是将数据进行 Hash 打散并散发到不同的日志流,在肯定水平上就义了事务的完整性,但大大晋升了扩展性,能够解决大规模集群下单流 binlog 存在的单点瓶颈问题。
CDC 单流状态:
PolarDB-X CDC 单流状态
CDC 多流状态:
PolarDB-X CDC 多流状态
多流 binlog 提供了 3 种模式的数据拆分级别,在开明多流服务时可进行设定,满足不同场景下的应用需要。
库级别依照数据库的名字计算 Hash 值并进行散发,即对应同一个库的 binlog 数据,会始终按序路由给同一个 binlog 数据流,实用于单个 PolarDB- X 实例上数据库比拟多的场景,如果事务不波及跨库操作,该策略下不仅能够具备多流能力,还能够保障事务的完整性。
表级别依照数据表的名字计算 Hash 值并进行散发,即对应同一张表的 binlog 数据,会始终按序路由给同一个 binlog 数据流,实用于表的数量较多且心愿针对单张表的操作(如 DML、DDL 等)在 binlog 日志流中放弃有序的场景。
记录级别依照数据行的主键计算 Hash 值并进行散发,即对应同一数据行的 binlog 数据,会始终按序路由给同一个 binlog 数据流,实用于心愿将数据充沛打散且不要求日志数据按库或按表放弃有序的场景,该策略要求数据表必须含有主键,无主键表的数据会被间接抛弃。
应用例子:
# 查看 binlog 多流 stream 列表
SHOW BINARY STREAMS;
返回例子:+--------+-----------------+-------------------------------+----------+
| GROUP | STREAM | FILE | POSITION |
+--------+-----------------+-------------------------------+----------+
| group1 | group1_stream_0 | group1_stream_0#binlog.000001 | 3625148 |
| group1 | group1_stream_1 | group1_stream_1#binlog.000001 | 3625148 |
| group1 | group1_stream_2 | group1_stream_2#binlog.000001 | 3625148 |
| group1 | group1_stream_3 | group1_stream_3#binlog.000001 | 3625148 |
+--------+-----------------+-------------------------------+----------+
MySQL 相干指令体验:
# 不加 WITH 子句,可查看单流服务的 global binlog 文件列表。# 增加 WITH 子句,可查看多流服务的某个流上面的 binlog 文件列表。参数 stream_name 示意某个流的名称
SHOW MASTER STATUS [WITH stream_name]
SHOW BINLOG EVENTS [WITH stream_name]
SHOW BINARY LOGS [WITH stream_name];
## 单流返回的例子
+---------------+-----------+
| LOG_NAME | FILE_SIZE |
+---------------+-----------+
| binlog.000001 | 4 |
+---------------+-----------+
## 多流返回的例子
+-------------------------------+-----------+
| LOG_NAME | FILE_SIZE |
+-------------------------------+-----------+
| group1_stream_0#binlog.000001 | 3626808 |
+-------------------------------+-----------+
PolarDB-X CDC 引入多流状态,能够在满足 binlog 兼容性的同时,联合业务场景晋升分布式增量日志变更的吞吐量。同时 CDC 多流状态,为了更好的兼容现有 binlog 开源生态,联结 alibaba canal 提供了多流兼容生产的能力,参考 PR:add support for polardbx multi binlog streams #4660
canal 应用例子:
# canal 一键拉起 PolarDB- X 的多流 binlog
sh run.sh -e canal.auto.scan=false
-e canal.instance.master.address=pxc-xxxx.polarx.xxxx.rds.aliyuncs.com:3306
-e canal.instance.dbUsername=tpcc
-e canal.instance.dbPassword=xxxx
-e canal.instance.connectionCharset=UTF-8
-e canal.instance.tsdb.enable=true
-e canal.instance.gtidon=false
-e canal.instance.multi.stream.on=false
-e canal.destinations.expr=group1_stream_{0-7}
参考文档:
- CDC 单流性能解读,Sysbench 30w QPS / TPC-C 100w tpmC 下,增量数据延迟时间 < 1 秒
- CDC 高可用架构解读,能够在各种故障状态下,满足 RTO 在 20~45 秒内
- CDC 多流状态,以及 如何创立 CDC 节点
03 基于工夫点的复原 (point-in-time recovery, PITR)
PolarDB-X 2.2.0 的版本中,咱们正式提供了动态的全量备份集恢复能力,通过 PolarDB-X Buckup 工具 (基于 XtraBuckup 革新而来),咱们基于 DN 的物理备份的形式,联合分布式并行晋升备份吞吐量,备份速度可达到 GB/s,同时提供了分布式下的统一备份集。
在阿里云数据库服务用户过程中,常常会遇到用户误删数据后冀望通过备份复原的形式找回数据,对于基于工夫点的复原有比拟强的诉求。因而,PolarDB-X 2.2.1 开源版本中,咱们提供了日志增量备份 + 基于工夫点的复原的残缺能力,满足用户数据库安全性的需要。
大抵的工作原理:
PolarDB-X 指定工夫点复原的工作原理图
阐明:
全量备份集,指定调度规定进行定期全量备份,参考文档:PolarDB-X 备份调度
0 2 * * 1,4 周一和周四的 2 点发动备份
- 增量日志备份,准实时备份增量的日志数据,备份的实时性决定了数据可复原的最近工夫点,参考文档:PolarDB-X 增量日志备份。
- 发动指定工夫点复原 (PITR),找到复原工夫点最近的一个全量备份集,再从增量备份中找到全量备份集工夫点和复原工夫点之间的增量日志,执行一个全量 + 增量的物理复原,参考文档:PolarDB-X 指定工夫点复原
应用的例子:
apiVersion: polardbx.aliyun.com/v1
kind: PolarDBXCluster
metadata:
name: polardb-x-clone # 复原出的集群名字
spec:
topology: # 集群规格
nodes:
cn:
template:
image: polardbx/polardbx-sql:latest
dn:
template:
image: polardbx/polardbx-engine:latest
restore: # 指定集群的创立形式是复原
from:
clusterName: polardb-x # 源 PolarDB-X 集群名称
time: "2023-03-24T11:11:11Z" # 复原的工夫点
04 MySQL 一键导入 PolarDB-X
开源 MySQL 的主备复制协定,次要反对增量日志的同步和生产,在 MySQL 8.0 开始在内核中新增了 Clone Plugin,全量通过物理文件拷贝,联合增量日志的同步和生产提供了 clone 实例的成果。
PolarDB- X 作为分布式数据库,在物理数据分布和文件格式上和开源 MySQL 略有差别,为了不便用户体验相似 MySQL 8.0 的 Clone Plugin 的成果,PolarDB-X 2.2.1 提供了相似 Clone Plugin 的一键导入能力,通过一条 DDL 指令,能够对存量 MySQL 进行表构造迁徙、存量数据的全量迁徙,最初放弃一个继续的增量数据同步
工作原理:
PolarDB-X 一键导入工作原理
应用例子:
// 配置 MySQL 与 PolarDB- X 的复制关系
CHANGE MASTER TO
MASTER_HOST='10.0.0.1',
MASTER_USER='root',
MASTER_PASSWORD='xxxxxx',
MASTER_PORT=3306,
MASTER_LOG_FILE='mysql_bin.000001',
MASTER_LOG_POS='58050130',
SOURCE_HOST_TYPE=mysql,
Mode='IMAGE'; // 指定 mode 为 image 镜像复制模式
// 设置须要同步的库表,不配置就是默认整个实例
CHANGE REPLICATION FILTER REPLICATE_DO_DB=(tpcc);
// 开启工作
START SLAVE;
// 查看工作
SHOW SLAVE STATUS \G
整个操作体验,最大化的兼容了 MySQL DBA 的运维体验,基于常见的主备复制治理形式能够很不便的实现单机 MySQL 到 PolarDB- X 分布式的一键迁徙,如果思考数据割接后的回滚链路,能够反向配置 PolarDB- X 到 MySQL 的主备复制链路。
参考文档:PolarDB-X 一键导入
更具体的 ChangeLog
PolarDB-X 各组件的开源地址,欢送拜访 github
结尾
PolarDB-X 是由阿里自主研发的原生 MySQL 分布式数据库,保持以全内核开源的形式,放弃开源的继续迭代。本次公布 V2.2.1 的降级版本,重点增强了生产级要害能力,全面晋升 PolarDB- X 面向数据库生产环境的易用性和安全性。冀望 PolarDB- X 将来能作为国内原生 MySQL 分布式数据库的开源领导者,继续做好开源!
原文链接
本文为阿里云原创内容,未经容许不得转载。