架构简介
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 | 内存 | 磁盘范例 | 网卡 | 最低数量 | 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 服务器推荐设置 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 * 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 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 备份调度
- 增量日记备份,准实时备份增量的日记数据,备份的实时性决定了数据可恢复的最近时间点,参考文档: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
| 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分布式数据库的开源向导者,持续做好开源!
原文链接
本文为阿里云原创内容,未经答应不得转载。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |