接上篇:https://developer.aliyun.com/article/1223073?spm=a2c6h.13148508.setting.29.44ec4f0eNvAByn
二、 PolarFS共享存储系统的搭建
首先,从github下载源代码,进行编译、安装代码。
• 源码地址
https://github.com/ApsaraDB/PolarDB-FileSystem
• 文档地址
https://github.com/ApsaraDB/PolarDB-FileSystem/blob/master/Readme-CN.md
安装后,系统即存在PFS对应的工具。执行PFS命令可查看PFS支持的命令行。
使用文件系统的第一步是对文件系统进行格式化,需要sudo的权限,因为需要进行磁盘的格式化。命令中的-C disk指的是针对块设备,因为PolarFS支持不同的存储形态,除了块设备之外,也支持阿里内部自研的分布式共享存储PolarStore。
mkfs命令下的提供了多种选项,比如指定的logsize大小,number users用于控制并发的实例编号。如果对以上选项不了解,采用默认值即可。
通过上述语句进行格式化。如果文件系统之前曾被格式化,本次格式化则需要加上-f,意为强制格式化。对于单节点,块设备直接只用本地磁盘即可。PFS除了支持共享存储,也支持单机硬盘,但是单机硬盘无法实现跨节点的数据访问。日常开发可以使用单机模式进行格式。
格式化成功之后,通过ls命令查看文件系统下的文件。
可以通过mkdir命令创建目录,执行后没有报错则意味着创建成功。
通过ls命令查看,结果显示nvme6n1文件下已经存在testDir目录。
PolarDB使用多个进程进行数据通信。主进程进行新的请求时,会fork一个work子进程,每个进程下面都会引入PolarFS的客户端,包含了read、write等常见操作,并负责调用客户端的接口,与后台的pfsdaemon进程进行通讯。
用户态共享内存作为PolarFS的通信信道,最大的优点在于可以减少数据的拷贝。比如客户端要写buffer,将数据存入共享内存,PID文件系统可以直接将数据取出,间接实现了零拷贝的操作。
上图为此前默认安装的pfsdaemon。通过start_pfsd.sh-p命令即可调用。-p指定文件系统的盘符。
Fuse类似于文件系统访问的中间层,对上兼容标准的文件系统的语义操作,对下可对接不同的文件系统。通过标准的命令,可直接访问到底层的PolarFS。
比如此前查看PolarFS的目录需要通过PFS工具,但是接入fuse之后,直接使用fuse Linux的原生命令makeDir即可创建目录到PFS。
首先安装Fuse,具体安装步骤可参考github上的安装文档。安装完成后,将fuse挂载到PFS上,系统默认提供了现成的脚本进行挂在操作(如上图所示),脚本在安装时已经部署在机器上。脚本下需要提供三个参数,diskname指定块设备的名称;RW和RO参数代表启动读写实例和只读实例的意思,因为需要创建文件和创建目录等写操作,此处启动读写实例;mount_dir指fuse的挂载目录。
挂载成功后,可进入fuse目录访问。执行ll操作,结果可直接显示PFS的testDir。
可直接通过原生的Linux的命令创建dir和文件。
可以看到创建的目录和文件都已经同步到PFS的文件系统,说明通过fuse成功访问了PFS文件系统。
Fuse最大的作用为简化文件系统的操作,用原生命令即可达到访问PFS文件系统的目的。用完之后,可通过mount_dir接触Fuse挂载。
PolarFS文件系统支持不同的挂载形态和存储介质,其中PolarStore是阿里云数据库内部自研的分布式共享文件系统,通过RDMA在存储层进行数据的多副本机制的通信以及复制。
当前,阿里云官网在售的PolarDB产品均基于PolarStore形态实现,支持PolarDB-MySQL的5.6、5.7、8.0版本,PolarDB-PostgreSQL11以及PolarDB-Oracle兼容版本。
阿里云的ESSD是标准的分布式块设备共享存储,可在阿里云上直接购买。部署方式与单机较类似,区别为ESSD在底层是分布式的共享存储,通过ESSD也可以达到一写多读进行数据共享以及数据同步一致性的效果。
接下篇:https://developer.aliyun.com/article/1223070?groupCode=polardbforpg