2023年3月,PolarDB-X 正式公布2.2.1版本,在分布式数据库金融规范能力根底上,重点增强了生产级要害能力,全面晋升PolarDB-X面向数据库生产环境的易用性和安全性,比方:提供数据疾速导入、性能测试验证、生产部署倡议等。

架构简介

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)

组件CPU内存磁盘类型网卡最低数量
CN2 核8 GB+SSD, 200 GB+万兆网卡2
DN2 核8 GB+SSD, 1 TB+举荐2块万兆网卡2.5(详见下方阐明)
GMS2 核8 GB+SSD, 200 GB+万兆网卡2.5(详见下方阐明)
CDC2 核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 服务器举荐配置

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# 下载 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版本联合多方面的优化,有了显著的性能晋升

测试资源:

组件名称机型阐明
OPS机器ecs.g7.4xlarge装置部署
计算节点 (CN)ecs.hfg7.4xlarge * 316c64g,主机单价:2324元/月
存储节点 (DN) + 元数据节点(GMS)ecs.i4.4xlarge * 316c128g + 3.5TB的存储,主机单价:3776元/月

sysbench测试:

Sysbench场景2.2.1版本800并发2.2.1版本2000并发2.2.0版本800并发2.2.0版本2000并发性能晋升
point_select368768.08401115.95357033.85383850.57+3~5%
read_only164165.17175842.29132726.85139712.47+20~25%
read_write106222.37122152.4277727.5782000.08+35~50%
write_only47657.7161934.6139171.1246697.96+20~30%

TPC-C测试:

TPC-C场景2.2.1版本1000并发2.2.0版本1000并发性能晋升
tpmC176861.03148623.13+19%

可参考性能白皮书:

  1. PolarDB-X sysbench 测试报告
  2. 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节点主机资源

阐明:

  1. PolarDB-X采纳存储计算拆散的架构,CN和DN是能够独立部署,实验设计部署1024个DN节点,比方私有云PolarDB-X单个DN节点可反对3TB,那超大规模节点下可反对 1024 * 3TB = 3PB
  2. DN节点抉择了最小的1C8GB (1024节点下也须要8TB的内存),通过k8s的多租户cgroup技术,采纳24台高配ECS进行部署,单个ECS均匀须要承载40+的PolarDB-X CN/DN节点。
  3. 本实验所须要的测试资源的老本,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的多流binlogsh 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}

参考文档:

  1. CDC单流性能解读,Sysbench 30w QPS / TPC-C 100w tpmC下,增量数据延迟时间 < 1秒
  2. CDC高可用架构解读,能够在各种故障状态下,满足RTO在20~45秒内
  3. 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 指定工夫点复原的工作原理图

阐明:

  1. 全量备份集,指定调度规定进行定期全量备份,参考文档:PolarDB-X 备份调度
0 2 * * 1,4 周一和周四的2点发动备份
  1. 增量日志备份,准实时备份增量的日志数据,备份的实时性决定了数据可复原的最近工夫点,参考文档:PolarDB-X 增量日志备份
  2. 发动指定工夫点复原(PITR),找到复原工夫点最近的一个全量备份集,再从增量备份中找到全量备份集工夫点和复原工夫点之间的增量日志,执行一个全量+增量的物理复原,参考文档:PolarDB-X 指定工夫点复原

应用的例子:

apiVersion: polardbx.aliyun.com/v1kind: PolarDBXClustermetadata:  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

 Github 仓库名称仓库地址
总我的项目polardbxhttps://github.com/polardb/polardbx
计算节点polardbx-sqlhttps://github.com/polardb/polardbx-sql
存储节点polardbx-enginehttps://github.com/polardb/polardbx-engine
日志节点polardbx-cdchttps://github.com/polardb/polardbx-cdc
k8s operator 组件polardbx-operatorhttps://github.com/polardb/polardbx-operator
rpc 组件polardbx-gluehttps://github.com/polardb/polardbx-glue
备份工具polardbx-backuphttps://github.com/polardb/polardbx-backup
常用工具polardbx-toolshttps://github.com/polardb/polardbx-tools
文档polardbx-operator-docshttps://github.com/polardb/polardbx-operator-docs

结尾

PolarDB-X 是由阿里自主研发的原生MySQL分布式数据库,保持以全内核开源的形式,放弃开源的继续迭代。本次公布V2.2.1的降级版本,重点增强了生产级要害能力,全面晋升PolarDB-X面向数据库生产环境的易用性和安全性。冀望PolarDB-X将来能作为国内原生MySQL分布式数据库的开源领导者,继续做好开源!

本文起源:PolarDB-X知乎号