PolarDB存储原理与实践

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 在阿里云开源的趋势下,PolarDB已经成功运用到很多企业案例中。

分享人:朱元(圆珠)   阿里云数据库产品事业部

正文:本文从两方面来介绍PolarDB存储原理与实践.

PolarDB存储原理简介

PolarDB存储实践


1、PolarDB存储原理简介


1.1PolarDB: 基于共享存储的分布式数据库


image.pngPolarDB和传统的RDS最大的区别是基于共享存储的部署方案,它们在存储侧的差异有:

成本的差异,传统的关系型数据库的复制数据量存储会double,写量也会double,日志数据分别会在不同的节点上面都写两次。共享型存储器没有这些问题,写量永远只有一次。

由于是分布式的存储,它不需要预分配,可以在存储侧独立的进行动态扩容。存储侧独立的实现,上层解耦分布式架构上常见的难点和问题,比如数据库本身不用考虑存储的可靠性了,由下面的存储成本实现它的可靠性,传统企业的副本技术EC可以去实现,企业级的快照功能可以对上层进行隔离,去提供快照备份。


1.2共享存储架构下的计算层修改:缓存同步

image.png

数据库需要做哪些修改呢?我们其实可以很简单的把它做一个抽象的划分,存储层和计算层,如果存储层使用统一共享的存储计算需要做哪些修改,由于存储已经共享了,计算层涉及的数据对象是缓存,存储层的共享不存在一致性的问题,计算层需要解决缓存同步的问题,缓存同步包括几个部分:

一是内容的同步,在a节点写入的段数据,b节点的缓存和a节点的缓存要一模一样。

二是要看到相同的内容和相同的修改顺序。a节点上依次修改了两份数据,要在b节点上看到这两份数据的修改顺序也是相同的,实际在RW先写日志再写数据的顺序,没有在RO中进行完整一致的问题。在看到日志时没有看到数据,这些都是顺序问题。

存储计算分离架构在计算层需要做的修改是缓存同步,缓存同步也包括内容一致修改和顺序一致。传统的存储数据库存储还有文件系统,它是属于内核态的,也是有缓存的,cache是数据侧的缓存,文件系统有一些源数据,文件名数据的缓存也需要同步。


1.3PolarFS: PolarDB的用户态文件系统

image.png

PolarDB使用的文件系统是PolarFS,传统的文件系统在运行内核态上去做缓存同步会出现一些问题:一是开发难度较大,二是比较难合并上游内核依赖代码的更新。最终选择了一套自研的运行在用户态高性能面向数据库的文件系统,为文件系统提供满足Linux标准的接口,能够提供mkdir、rdaddir文件夹和文件的所有接口,这是HDFS不能完整提供的,最重要的是能够支持在共享快设备上实现一写多读缓存同步。


1.4PolarFS的元数据基本结构

image.png

和传统单机文件系统一样,要有格式化的过程,把整块磁盘分解为数据扇区和原数据扇区,数据扇区用于存储平常文件读写中存储的数据,在元数据扇区会存储原数据文件系统的原数据,主要有:文件的名字、所属文件夹、文件中的块和磁盘的块之间的映射,对应到PolarFS对原数据的处理,它提供了dir存储文件名或者文件夹名,来存储文件块到磁盘块之间的映射,再提供数据结构来完成索引,例如文件夹和文件名之间的观点。


1.5PolarFS的元数据修改的提交和同步

image.png

分布式缓存的同步如何来解决呢?RW节点需要把对原数据的修改进入到Journal的日志,并且也使用类似DB的LSN的版本号的技术,可以让RO在节点上看到RW上修改的先后顺序,RO是何时做的缓存同步呢?

文件系统不像数据库有同步机制,把同步延时到RO文件系统访问API上去,也就是在RO上去做一次读文件的操作时,都会额外的去读Journal日志文件,去查看上一次回放日志后的位置是否有新日志写入。每一个RO在做API调用的时候,一定能看到在RO上RW元数据的修改。

日志本身都有顺序性,对日志内容的回放顺序也和RW上的修改顺序也是一样的。


1.6PolarFS和PolarDB的缓存同步分工

image.png

PolarFS文件系统的数据缓存在实际工作中是没有缺失的,PolarDB在开发过程中,DB和文件系统做了数据缓存和原数据缓存的分工,原数据缓存中文件名的修改、文件块的分配的操作给文件系统做,数据内容的缓存同步给DB来修改,因为DB天生自带WAL日志等功能,DB执行的缓存复制的功能也是分布式同步中必须的。同理,基于已经开源的PolarFS写一个共享存储的数据库,PolarDB可以使用日志来同步,可以使用TCP信道RW让 RO更新缓存。

在数据库中使用DirectIO是非常重要的,如果不使用DirectIO,那么在RO上面缓存的更新就通过API来读,操作系统替代了自带的缓存,缓存同步要控制在逻辑之中,我们整套RO站中必须是做分布式缓存同步的缓存。


2、PolarDB存储实践


2.1PolarFS的部署

2.1.1PolarFS的编译和安装

image.png

对于PolarFS的部署,大家可以直接从上面的链接下载源码,遵照上面的文档,准备好第三方库再进行编译,编译出运行文件系统需要的工具服务等,要格式化文件系统就已经可用了。


2.1.2PolarFS bash工具使用示例

image.png

看下系统中有哪些磁盘可用,比如有1块nvme5n1可以用的时候,可以运行mkfs的命令把磁盘格式化,格式化好后,继续用mkdir的命令操作格式化的磁盘,路径的开始和传统的Linux路径有一些区别。

命令行mkdir或者IS前面加了PFS的工具,它不能直接使用自带的二进制工具,必须在命令前加PFS开始编译生成的工具才能访问文件系统。

它是独立的文件系统没有挂载在系统的根路径上,把路径的第一部分设为要格式化的盘符,区分需要从哪一块设备上去访问PolarFS。


2.1.3 PolarDB postgresql 实际文件示例

image.png

PolarDB的表空间上的文件夹和文件,和开源社区版没有任何区别,访问看到的结果和社区也差不多是一样的。有一些,我们PolarDB在社区版上额外增加功能的额外文件夹,像logo index。在data根目录上面可以看到多出一些PG的这个logo index等文件夹,也可以通过命令去查看PolarDB数据库在文件系统存储中增加的变化。


2.1.4 PolarFS bash工具命令支持一览

image.png

PolarFS对标传统文件系统实现常用的子集,通过/h可以看到帮助手册实现的命令。


2.1.5 PolarFS 部署形态

image.png

必须要通过API的形式去访问文件系统,在PolarDB实际使用中必须要提供API的形式去数据库进行访问, PFS demo服务就是做这件事情的,启动后PolarDB就可以去访问文件系统服务了。 postgresql是主进程子进程的架构,需要主进程调用和PFSdemo服务建立共享内存的连接,folk的子进程通过文件系统的API来访问文件系统服务的共享存储。传统文件系统是通过切入内核态直接调用,这里是通过共享内存的方式转接到用户态的文件系统服务,把它共享文件夹上的共享内存文件来通讯,通信的机制不依赖于内核态的转发形式进行。


2.2.1基于光纤或以太交换网络的SAN

image.png

常见的方法是通过光纤交换网络或者以太交换网络,存储节点上的存储设备通过网络的形式虚拟化成存储单个的虚拟和设备,提供给计算层面的服务器访问。这种架构实现计算存储分离,服务存储在交换网络之外,计算层是在网络上进行访问。


2.2.2SAN on linux 部署

image.png

首先完成上网络的初始化后,在Llinux的操作系统上扫描确保网络上连通的设备能在本地发现。


2.2.3块设备注册与发现完成

image.png

可以看到设备类型第一行是b,可以看到这台主机上发现了非常多的远端存储设备,计算存储分离的rw、ro可以共同访问,刚才的操作,除了在aw主机上执行,在上面也去执行,那两台主机就可以共同去访问相同的存储了。


2.2.4管理存储访问

image.png

传统的SAN存储网络,可以把多块盘合并成一块逻辑盘,类似于read的方式同时利用多块盘的带宽提升数据的访问性能。和传统的交换式网络相比,基于固定的路由访问远端节点不同,可以配置动态的网络访问拓扑,让流量负载均衡从多条路径访问远端的存储节点,避免网络路径产生瓶颈。可以并行的使用多块存储的带宽,也可以并行的使用多台链网络和存储的带宽,以少量的计算节点利用整个网络的性能。


2.2.5存储示例

image.png

这是一个简单的示例,第一块磁盘属于一个设备, 253:21是Linux的描述符,第一部分属于驱动。第二部分是minor设备的标识符,访问设备的时候可以去配置负载均衡的策略,优先级走某些链路访问,较低的优先级去访问另一条链路。


2.2.6扩容流程

image.png

每一个事情上都包含动作和感知两个过程,首先用SAN存储厂商的存储软件,像浪潮的存储提供的软件扩容,或者多个盘合并成一个盘,这些都是扩容。其次在Linux的快设备管理上特定一块盘,比如想对这块逻辑盘进行扩容,Linux就能感知远端的存储扩容结果。因为计算和存储是分离的,计算节点上有多个节点在访问这个存储设备,就需要在每台计算主机上去执行,才能保证每台主机上都能看到远端存储扩容的结果。

这是快设备层面的感知。我们使用的是PolarFS文件系统,它提供了一些命令,可以直接使用它去感知和使用扩容的结果。首先要把扩容的结果格式化,就像第一次使用文件系统那样格式化。其次需要去感知扩容结果,也就是说在每台主机中需要在数据库中去调用特定的API感知扩容的结果,那当你的RW节点也感知到扩容后,RW就利用扩容的分空间进行数据分配,replay是远端修改的。感知是一个从下到上的过程,复制过程和缓存顺序是相反的,先从底层去完才能够避免crash的问题。传统文件系统没有这么复杂,第三步和第二步可以就合并。


2.2.7已有部分用户案例

image.png

这套方案主要是面向线下的企业用户推荐的,他们大多都有SAN存储的网络设备,方便使用已有的基础设施和软件部署,也有国家政府和企事业单位的案例,就不一一介绍了。


2.3 NBD存储的部署


2.3.1NBD的概念

image.png

NFS是基于文件系统的共享,共享本机的路径也就是文件系统中的目录或者子目录,远端修改文件可以在本地上看见和同步。快设备也类似于NFS那样通过tip网络信道进行共享,Linux也提供类似的功能。把dv磁盘映射到远端,让远端通过映射设备访问a节点写入的数据,b节点就可以直接看到。


2.3.2NBD的服务端部署

image.png

不同的操作系统是不同的,服务端只需要启动对应的NBD的服务,把准备分享的快设备描述清楚,以同步的方式去分享,避免系统有crash。


2.3.3NBD的客户端部署(一)

image.png

客户端需要在/dev上模拟本地的磁盘节点。也可以自己编译一下内核的驱动,生效后就可以在dv目录下面看到NBD设备了,根据服务端的配置把远程的设备映射到本地的NBD设备上面。


2.3.4NBD的客户端部署(二)

image.png

我们要把NBD和远程的共享磁盘进行映射,只需要把NBD对应远端的服务端口,映射到本地某一个NBD设备上面,执行成一旦成功,就可以看到本地磁盘块设备中增加的NBD磁盘设备。


2.4基于阿里云共享存储的部署


2.4.1云上共享存储(一):Polarstore

image.png

直接在阿里云官网上购买服务,包括MySQL兼容版本、PG版本,Oracle兼容版本,云上的存储架构和基于SAN存储架构很类似,存储计算分离网络连接是把基于光纤的交换网络换成RDMA的网络机制,来做存储计算之间的高速互联以及存储网络之间高速互联,这套方法是最简洁最方便最稳定可靠的一种方案。


2.4.2云上共享存储(二): ESSD云盘

image.png

NBD共享需要手动部署,未来会提供ESSD云盘原生共享的方案,在ECS主机上购买一块盘,在别的主机上也能配置映射这块盘,不需要自己去配置NBD的模块,一块盘多个主机也能使用这样的功能。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
2月前
|
存储 SQL 安全
应用案例|开源 PolarDB-X 在互联网安全场景的应用实践
中盾集团采用PolarDB-X云原生分布式数据库开源版本,有效解决了大数据量处理、复杂查询以及历史数据维护等难题,实现了业务的高效扩展与优化。
|
3月前
|
存储 Cloud Native 关系型数据库
PolarDB 高可用架构设计与实践
【8月更文第27天】 在现代互联网应用中,数据库作为核心的数据存储层,其稳定性和可靠性尤为重要。阿里云的 PolarDB 作为一款云原生的关系型数据库服务,提供了高可用、高性能和自动化的特性,适用于各种规模的应用。本文将详细介绍 PolarDB 的高可用架构设计,并探讨其实现数据安全性和业务连续性的关键技术。
94 0
|
20天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。
|
21天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第20天】本文探讨了MongoDB Atlas的核心特性、实践应用及对未来云原生数据库的思考。MongoDB Atlas作为云原生数据库服务,具备全球分布、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了实施MongoDB Atlas的最佳实践和职业心得,展望了云原生数据库的发展趋势。
|
3月前
|
存储 SQL 运维
“震撼发布!PolarDB-X:云原生分布式数据库巨擘,超高并发、海量存储、复杂查询,一网打尽!错过等哭!”
【8月更文挑战第7天】PolarDB-X 是面向超高并发、海量存储和复杂查询场景设计的云原生分布式数据库系统
109 1
|
4月前
|
存储 关系型数据库 MySQL
深度评测:PolarDB-X 开源分布式数据库的优势与实践
本文对阿里云开源分布式数据库 PolarDB-X 进行了详细评测。PolarDB-X 以其高性能、强可用性和出色的扩展能力在云原生数据库市场中脱颖而出。文章首先介绍了 PolarDB-X 的核心产品优势,包括金融级高可靠性、海量数据处理能力和高效的混合负载处理能力。随后,分析了其分布式架构设计,包括计算节点、存储节点、元数据服务和日志节点的功能分工。评测还涵盖了在 Windows 平台通过 WSL 环境部署 PolarDB-X 的过程,强调了环境准备和工具安装的关键步骤。使用体验方面,PolarDB-X 在处理分布式事务和实时分析时表现稳定,但在网络问题和性能瓶颈上仍需优化。最后,提出了改进建
7007 2
|
4月前
|
关系型数据库 分布式数据库 数据库
基于PolarDB的图分析:保险数据分析实践
本文以公开的保险数据集为例,示例了基于云原生数据库PolarDB上,在保险理赔场景下,执行图查询来发现异常理赔记录和欺诈团伙:例如,查询与欺诈保单有相同理赔病人的其他保单,或者找出欺诈保单的投保人社交关系,以便进行欺诈预警。PolarDB在关系型数据库的基础上,提供了图分析能力,为企业的统一数据管理和分析,提供了强有力的支撑。
|
4月前
|
存储 关系型数据库 数据库
关系型数据库设计范式:深入理解与实践
【7月更文挑战第20天】关系型数据库设计范式是数据库设计中的重要指导原则,它通过一系列规范来减少数据冗余、提高数据一致性和优化查询性能。在实际应用中,我们应该根据具体需求和数据特点,灵活选择和应用不同的范式级别,以构建高效、可靠和可扩展的数据库系统。同时,也需要注意范式设计带来的挑战和限制,根据实际情况进行权衡和调整。
|
4月前
|
存储 关系型数据库 分布式数据库
PolarDB,阿里云的云原生分布式数据库,以其存储计算分离架构为核心,解决传统数据库的扩展性问题
【7月更文挑战第3天】PolarDB,阿里云的云原生分布式数据库,以其存储计算分离架构为核心,解决传统数据库的扩展性问题。此架构让存储层专注数据可靠性,计算层专注处理SQL,提升性能并降低运维复杂度。通过RDMA加速通信,多副本确保高可用性。资源可独立扩展,便于成本控制。动态添加计算节点以应对流量高峰,展示了其灵活性。PolarDB的开源促进了数据库技术的持续创新和发展。
296 2
|
5月前
|
存储 关系型数据库 分布式数据库
PolarDB产品使用问题之存储热备集群是否可以关闭
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。