Polardb 核心存储 polarfs 是怎么进行数据存储的(1)--译

1c870078a6056fb685689bc371321a9d.png

POLARDB 数据库中有一个核心是他重新设计的存储系统,polarfs,polarfs 是怎么设计的架构是怎样的,下面根据官方的一篇详细的英文文档作为翻译的目标 https://www.vldb.org/pvldb/vol11/p1849-cao.pdf


PolarFS 是专门为polardb 设计的分布式文件系统,他具有低延迟,高可用的特点并且这款存储系统运行在阿里云的基础上。PolarFS  本身利用了轻量级的网络站和IO栈并充分的利用了 RMDA, NVME 和 SPDK等技术。

在基于这样的技术情况下在我们的测试下,POLARRFS 的延迟已经减少到与本地SSD 磁盘系统延迟相当的状态。基于保持复制的一致性的问题,我们开发了parallelraft 一致性协议,他基于RAFT协议但打破了raft协议的限制中的串行性,在乱序的基础上,还能保证数据的一致性。Parallelraft继承了raft协议的简单,同时提供了更高的IO能力,最终成就了polarfs 为polardb提供最优的存储支持。

 1  介绍

最近一段时间存储和计算分离已经成为云计算的工业的主流,这样的设计让架构更加灵活并且可以充分的利用共享存储

1 计算和存储节点能够使用不同的类型的服务器硬件帮助,可以单独进行定制,如计算节点不在考虑内存和磁盘的容量,这让严重依赖应用环境的不可预期的部分脱离了计算节点。

2 在集群中的存储节点的磁盘来自一个存储池,他可以介绍磁盘碎片的缺陷平衡磁盘的利用率避免磁盘空间的浪费。(此部分基于商业风险不进行翻译,跳过到安全部分),为了保证数据的可靠性,数据库必须自己管理数据复制,存储使用通用文件系统,如ext4或XFS磁盘文件格式,在使用RDMA或PCIe SSD等低I/O延迟硬件时,内核空间和用户空间之间的消息传递成本可能会降低I/O吞吐量,问题更大的是存储不能支持所有类型的数据库集群架构,但这是高级云服务的必需品。

所以在这篇文字中,我们要描述和设计我们要讨论的对象polarfs,一个分布式文件系统,如我们之前所提到的,低延迟高吞吐量和高可用中采用的数据存储机制。

首先polardb使用目前最高级的硬件系统,如RDMA ,NVMe,通过使用轻量级的网络栈和IO栈,来规避数据在内核处理中产生的内核锁,同时PolarFS提供了一个类似posix的文件系统API,他被编译到数据库的进程中,替换操作系统与数据库之间的文件系统接口,数据库会直接调用。在设计中POLARFS也避免了数据调用中的上下文切换,降低了不必要的内存拷贝,利用大量的DMA在主存和RDMA NIC/NVMe磁盘之间传输数据,通过这些特性PolarFS端到端的传输延迟大幅度的降低,最终达到接近本地SSD 的性能。

89b71dce38dace2391788cf1c47e2443.png

部署在云生产环境的分布式文件系统通常有数千台主机,在这样的规模下,由硬件或软件错误引起的故障是常见的,因此需要一个通用的协议来保证所有提交的修改不能被丢失,副本和主数据一定要一致。

协议PAXOS可以满足以上的需求,raft协议是PAXOS的分支,很多分布式系统都是依照RAFT来进行开发的,而将此应用到POLARFS上,我们发现当使用延迟非常低的硬件,RAFT就严重的阻碍了POLARFS的I/O可伸缩性,因此我们开发了ParallelRaft协议,这是一种基于Raft增强共识的协议,允许乱序写入但保证最终的顺序性。

在POLARFS 上我们构建了一个以ALISQL 为基础的关系型数据库POLARDB,通过共享存储架构和多个只读实例,从上图看,POLARDB节点主要分为两类,写节点和只读节点,主和从节点共享一个数据存储结构。

PolarFS 支持以下的功能支持POLARDB 以下的功能

1   PolarFS  能够同步修改数据元信息,从主节点到从节点(包含所有的从节点)同时PolarFS 保证了文件元数据的修改是并发的同时是序列化,所有的节点的数据均死一致的,在节点切换或网络分区的情况下,产生的多个主节点中只能有一个节点写入数据成功。

(介绍文章每个章节的要点,略过)

2  背景介绍

这个章节简单的描述了 NAMe, SSD , RDMA 和他们相关的程序模块

NAVe SSD , SSD 是从传统的协议中演进而来的如SAS , SATA 到 NVMe, NVMe SSD 具有高带宽低延迟的交互性能。NVMe SSD 最大可以达到500K在100纳秒的延迟下进行数据传输,最近型的 3D Xpoint ssd 已经达到了10纳秒以下,对比NANE SSD提供超高的 Qos。

随着SSD 可以越来越快,内核的IO栈成本了新的瓶颈,正如之前研究的要传输4KB的数据就需要传输20000条指令。最近INTER 提出的提高存储性能的SPDK ,这组工具和连接库可以作为NVMe工作的基础,通过将所有的驱动程序放置在用户控件中并使用轮训的模式,而不是依赖中断来保证超高的性能,这避免了内核的上下文切换导致的中断处理的开销。

RDMA。RDMA技术提供了数据中心内部服务器之间的低时延网络通信机制。例如,在连接到同一交换机的两个节点之间传输一个4KB数据包需要大约7µs,比传统的TCP/IP网络栈要快得多。之前的大量研究[9,14,15,17,24,25,30]表明RDMA可以提高系统性能。应用程序通过Verbs API访问队列对(QP)与RDMA NIC进行交互。QP由发送队列和接收队列组成,并且每个QP与另一个完成队列(CQ)相关联。

Send/Recv动词通常被称为双边操作,因为每个Send操作都需要一个由远程进程调用的匹配Recv操作,而Read/Write动词被称为单边操作,因为远程内存由NIC操作,而不涉及任何远程CPU。PolarFS使用Send/Recv和Read/Write动词的混合。小的有效负载直接通过Send/Recv动词传输。对于大数据块或批量数据,节点使用Send/Recv谓词协商远程节点上的目标内存地址,然后通过Read/Write谓词完成实际的数据传输。通过轮询用户空间中的CQ而不是依赖中断,PolarFS消除了上下文切换。

4cb0acb3ec5983ae53b0eb3bb271c0e7.png

待...  下一部分将开始介绍POLARFS 的构造

b99d190163241aa3eb34609b1d8ec5ed.png

### 在 Ubuntu 系统上安装和配置 PolarDB 的指南 PolarDB 是阿里云开发的一种高性能分布式数据库系统,支持多种存储引擎和文件系统。以下是在 Ubuntu 系统上安装和配置 PolarDB 的详细步骤。 #### 1. 安装依赖项 在开始安装之前,确保系统已经安装了必要的依赖项。可以使用以下命令安装这些依赖项: ```bash sudo apt update sudo apt install -y build-essential cmake wget libssl-dev ``` #### 2. 下载并解压 PolarDB-FileSystem 源代码 根据提供的信息[^2],PolarDB-FileSystem 是 PolarDB核心组件之一。首先需要下载其源代码并解压: ```bash wget https://github.com/Aliyun/PolarDB-FileSystem/archive/refs/heads/master.zip unzip master.zip cd PolarDB-FileSystem-master ``` #### 3. 编 PolarDB-FileSystem 使用 `CMake` 工具进行编。以下是编的具体命令: ```bash mkdir build cd build cmake .. \ -DCMAKE_BUILD_TYPE=Release \ -DSYSCONFDIR=/etc/pfs \ -DCMAKE_INSTALL_PREFIX=/usr/local/pfs make -j$(nproc) sudo make install ``` 上述命令中: - `-DCMAKE_BUILD_TYPE=Release`:指定构建类型为 Release。 - `-DSYSCONFDIR=/etc/pfs`:指定配置文件的存放路径。 - `-DCMAKE_INSTALL_PREFIX=/usr/local/pfs`:指定安装路径。 #### 4. 配置 PolarDB-FileSystem 进入 `conf/` 目录,编辑配置文件以适配您的环境: ```bash cd ../conf sudo cp polarfs.conf /etc/pfs/ sudo nano /etc/pfs/polarfs.conf ``` 根据实际需求修改配置文件中的参数,例如存储路径、日志级别等。 #### 5. 启动 PolarDB-FileSystem 使用以下命令启动 PolarDB-FileSystem 服务: ```bash sudo /usr/local/pfs/bin/polarfsd start ``` #### 6. 安装 PolarDB 引擎(polardbx-engine) 根据引用内容[^1],接下来需要安装 PolarDB存储引擎 `polardbx-engine`。以下是具体步骤: 1. 克隆 `polardbx-engine` 仓库: ```bash git clone https://github.com/Aliyun/polardbx-engine.git cd polardbx-engine ``` 2. 下载并解压 Boost 库: ```bash mkdir extra/boost wget https://boostorg.jfrog.io/artifactory/main/release/1.70.0/source/boost_1_70_0.tar.gz cp boost_1_70_0.tar.gz extra/boost/ ``` 3. 使用 CMake 进行配置并编: ```bash cmake . \ -DFORCE_INSOURCE_BUILD=ON \ -DCMAKE_BUILD_TYPE=Debug \ -DSYSCONFDIR="/u01/mysql" \ -DCMAKE_INSTALL_PREFIX="/u01/mysql" \ -DMYSQL_DATADIR="/u01/mysql/data" \ -DMYSQL_MAINTAINER_MODE=0 \ -DWITH_SSL=openssl \ -DWITH_BOOST="./extra/boost/boost_1_70_0.tar.gz" make -j$(nproc) sudo make install ``` #### 7. 配置并启动 PolarDB 引擎 完成编后,需要配置 MySQL 的配置文件 `my.cnf` 并启动服务: ```bash sudo nano /u01/mysql/my.cnf sudo /u01/mysql/bin/mysqld_safe --user=mysql & ``` --- ### 注意事项 - 确保所有依赖项已正确安装。 - 根据实际硬件资源调整编时的线程数(如 `-j8` 或 `-j$(nproc)`)。 - 配置文件中的路径需与实际安装路径一致。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值