PolarDB-X 采用 Shared-nothing 与存储分离计算架构进行设计,系统由5个核心组件组成。
PolarDB-X 架构
开源地址:https://github.com/polardb/polardbx-sql
梳理下PolarDB-X 开源脉络:
2023年3月,PolarDB-X 正式发布2.2.1版本,在分布式数据库金融标准能力基础上,重点加强了生产级关键能力,全面提升PolarDB-X面向数据库生产环境的易用性和安全性,比如:提供数据快速导入、性能测试验证、生产部署建议等。
PolarDB-X 2.2.1版本,重点面向生产级的部署要求,优化数据库实例的稳定性和性能、以及提供面向生产部署的相关最佳实践。
组件 | CPU | 内存 | 磁盘类型 | 网卡 | 最低数量 |
CN | 2 核 | 8 GB+ | SSD, 200 GB+ | 万兆网卡 | 2 |
DN | 2 核 | 8 GB+ | SSD, 1 TB+推荐2块 | 万兆网卡 | 2.5(详见下方说明) |
GMS | 2 核 | 8 GB+ | SSD, 200 GB+ | 万兆网卡 | 2.5(详见下方说明) |
CDC | 2 核 | 8 GB+ | SSD, 200 GB+ | 万兆网卡 | 2(可选) |
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 服务器推荐配置
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
# 下载 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 系统与环境配置
PolarDB-X 2.2.1在公有云上选择了标准ECS进行了性能测试和摸底,相比于2.2.0版本结合多方面的优化,有了明显的性能提升
测试资源:
组件名称 | 机型 | 说明 |
OPS机器 | ecs.g7.4xlarge | 安装部署 |
计算节点 (CN) | ecs.hfg7.4xlarge * 3 | 16c64g,主机单价:2324元/月 |
存储节点 (DN) + 元数据节点(GMS) | ecs.i4.4xlarge * 3 | 16c128g + 3.5TB的存储,主机单价:3776元/月 |
sysbench测试:
Sysbench场景 | 2.2.1版本800并发 | 2.2.1版本2000并发 | 2.2.0版本800并发 | 2.2.0版本2000并发 | 性能提升 |
point_select | 368768.08 | 401115.95 | 357033.85 | 383850.57 | +3~5% |
read_only | 164165.17 | 175842.29 | 132726.85 | 139712.47 | +20~25% |
read_write | 106222.37 | 122152.42 | 77727.57 | 82000.08 | +35~50% |
write_only | 47657.71 | 61934.61 | 39171.12 | 46697.96 | +20~30% |
TPC-C测试:
TPC-C场景 | 2.2.1版本1000并发 | 2.2.0版本1000并发 | 性能提升 |
tpmC | 176861.03 | 148623.13 | +19% |
可参考性能白皮书:
PolarDB-X 分布式数据库中最重要的特性就是线性扩展,目前市面上也有众多分布式数据库号称超大规模的线性扩展,但理论和实践还是需要相结合,通过面向用户可验证的方式,来体验下PolarDB-X在分布式1024节点下的稳定性。
PolarDB-X提供了基于k8s生态构建的 polardbx-operator 组件,基于k8s的分布式容器技术可以快速构建PolarDB-X 1024节点,考虑用户的体验成本,采用了虚拟化的压缩部署方式,选择在24台ECS主机上完成分布式1024超大规格节点的部署,并通过近百万级别TPS的稳定性验证。
PolarDB-X 1024节点主机资源
说明:
参考文档:分布式1024节点!1天玩转PolarDB-X超大规模集群
Binlog是MySQL记录变更数据的二进制日志,它可以看做是一个消息队列,队列中按顺序保存了MySQL中详细的增量变更信息,通过消费队列中的变更条目,下游系统或工具实现了与MySQL的实时数据同步,此机制也称为CDC(Change Data Capture,增量数据捕捉)
PolarDB-X是兼容MySQL生态的分布式数据库。通过实例内PolarDB-X的CDC组件,能够提供与MySQL binlog格式兼容的变更日志,并且对外隐藏了实例扩缩容、分布式事务、全局索引等分布式特性,让您获得与单机MySQL数据库一致的使用体验
PolarDB-X 2.2.1版本后,提供了两种形态的binlog日志消费订阅能力,且两种形态可同时共存。
CDC 单流形态:
PolarDB-X CDC单流形态
CDC 多流形态:
PolarDB-X CDC多流形态
多流binlog提供了3种形式的数据拆分级别,在开通多流服务时可进行设定,满足不同场景下的使用需求。
使用例子:
# 查看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}
参考文档:
PolarDB-X 2.2.0的版本中,我们正式提供了静态的全量备份集恢复能力,通过 PolarDB-X Buckup工具 (基于XtraBuckup改造而来) ,我们基于DN的物理备份的方式,结合分布式并行提升备份吞吐量,备份速度可达到GB/s,同时提供了分布式下的一致备份集。
在阿里云数据库服务用户过程中,经常会遇到用户误删数据后期望通过备份恢复的方式找回数据,对于基于时间点的恢复有比较强的诉求。因此,PolarDB-X 2.2.1开源版本中,我们提供了日志增量备份 + 基于时间点的恢复的完整能力,满足用户数据库安全性的需求。
大致的工作原理:
PolarDB-X 指定时间点恢复的工作原理图
说明:
0 2 * * 1,4 周一和周四的2点发起备份
使用的例子:
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" # 恢复的时间点
开源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 一键导入
PolarDB-X 各组件的开源地址,欢迎访问github
Github 仓库名称 | 仓库地址 | |
总项目 | polardbx | https://github.com/polardb/polardbx |
计算节点 | polardbx-sql | https://github.com/polardb/polardbx-sql |
存储节点 | polardbx-engine | https://github.com/polardb/polardbx-engine |
日志节点 | polardbx-cdc | https://github.com/polardb/polardbx-cdc |
k8s operator 组件 | polardbx-operator | https://github.com/polardb/polardbx-operator |
rpc 组件 | polardbx-glue | https://github.com/polardb/polardbx-glue |
备份工具 | polardbx-backup | https://github.com/polardb/polardbx-backup |
常用工具 | polardbx-tools | https://github.com/polardb/polardbx-tools |
文档 | polardbx-operator-docs | https://github.com/polardb/polardbx-operator-docs |
PolarDB-X 是由阿里自主研发的原生MySQL分布式数据库,坚持以全内核开源的方式,保持开源的持续迭代。本次发布V2.2.1的升级版本,重点加强了生产级关键能力,全面提升PolarDB-X面向数据库生产环境的易用性和安全性。期望PolarDB-X未来能作为国内原生MySQL分布式数据库的开源领导者,持续做好开源!
原文链接
本文为阿里云原创内容,未经允许不得转载。