#集群文件系统概念
YFS将所管理的磁盘设备(disk)划分为磁盘组、故障组等逻辑概念,以层级结构管理所有disk,如下图所示:

本文将对YFS上述相关概念进行介绍。
# 磁盘设备
磁盘设备(disk)可以为真实的物理磁盘,或者共享磁阵中的LUN。
在共享磁阵中,disk为一个逻辑概念,指的是磁阵上划分的LUN(Logical Unit Number,逻辑单元号) Device。
# 故障组
故障组(failuregroup)是YFS文件系统高可用的核心概念。failuregroup配合 "多副本" 特性共同构成数据冗余(包括元数据以及文件数据)机制,通过CRC数据校验识别数据损坏,实现数据的存储高可用。
每个failuregroup可以包含多个disk,例如:
- 同一磁阵的LUN
- 同一机柜的磁盘
- 同一电源供电的多个存储设备
- 同一机房的多个存储设备
如果这些disk有可能同时故障,则可以将它们规划在同一个failuregroup。failuregroup没有绝对的划分标准,而是在特定的运维条件下,根据disk之间故障概率的相关性,将它们进行适当分组,确保failuregroup之间(大概率)不会同时故障。

图中同色的disk表示有可能同时故障,例如所有黄色的disk位于同一个机柜上的磁阵,同时发生故障的概率较高。显然同色的disk应被规划到同一failuregroup下。
# 磁盘组
磁盘组(diskgroup)是YFS管理磁盘设备的最顶层逻辑单元,一个diskgroup应该至少包含1个failuregroup。
一个YFS中可能存在多个diskgroup,各diskgroup完全独立,分别管理一些disk,这些diskgroup之间资源隔离、故障隔离。
可以对不同的diskgroup指定不同的规格,例如为各diskgroup配置不同的副本数。因此不同diskgroup可以执行差异化存储管理。
每个diskgroup的属性在创建时指定,一旦创建不可更改。diskgroup的主要属性包括:
- 冗余度,Redundancy Level。
- 分配单元大小,AU size。
# 多副本和冗余度
在创建一个diskgroup时,可以通过指定冗余度 (Redundancy Level,也叫冗余级别) 来配置该diskgroup的副本数。
以下图为例:(data1和data2表示不同的用户数据)

data1数据2副本分别被安排在FG0和FG3,只有这两个failuregroup同时故障时,才存在丢失所有用户数据的所有副本的风险。data2数据同理。
由于每个failuregroup内的各disk故障率高度相关,而不同failuregroup下的disk之间故障是独立事件,即同时故障的概率极低,因此极大地保证了数据高可用。
# 多副本
副本数指数据保存的数量,如1副本表示YFS中只存在1份数据,3副本表示YFS中有3份相同的数据。
副本数具体可分为用户数据副本数和YFS元数据副本数。由于YFS元数据非常重要,在可能的情况下,系统会为元数据创建更多的副本,进一步加强YFS的可靠性。
使用多副本保护数据的前提是正确规划failuregroup,以确保数据副本之间故障概率独立:
- 由于所有副本应分布在不同的failuregroup,因此failuregroup数量需满足:
failuregroup个数 >= 用户数据副本数。 - 各冗余级别下YFS元数据副本数是推荐值,如果failuregroup数量小于元数据副本数要求,元数据副本数将被调整为与failuregroup数量相同的值。
YFS会妥善安排各副本数据的保存位置:
- YFS确保各副本不在同一disk,否则当该disk故障时,可能丢失所有副本数据。
- YFS确保各副本不在同一failuregroup,如前所述同一failuregroup下的disk可能同时发生故障,此时将有可能丢失所有副本数据。
综上所述,YFS将保证各副本分别处于不同failuregroup下的不同disk。
Note: YFS中数据的多副本不能跨越diskgroup,因为各diskgroup的资源是完全隔离的。
# 冗余度
YFS支持3种冗余级别:
- EXTERNAL:该级别表示无数据冗余,用户数据副本数为1,YFS元数据副本数为1。配置本级别的情况下,数据的可靠性依赖外部能力实现,例如RAID。
- NORMAL:一般级别的数据冗余,用户数据副本数为2,YFS元数据副本最小为2,最大为3。
- HIGH: 高级别的数据冗余,用户数据副本数为3,YFS元数据副本数最小为3,最大为5。
# 分配单元
YFS将disk划分为等大小的分配单元(Allocate Unit, 简称 AU)进行管理,AU size是YFS分配磁盘空间的最小单元。
YFS支持如下不同颗粒度的AU size:
- 1M(默认值)
- 4M
- 8M
- 16M
- 32M
用户可以在创建diskgroup时指定该diskgroup的AU size,或者使用默认的AU size。
AU size决定了YFS管理磁盘空间的颗粒度,更大的AU size可以使YFS创建更大的文件、获得更好的连续IO性能,但也会消耗更多内存,浪费一些磁盘空间。
用户应根据业务特征选择合适的AU size,不合适的AU size可能影响YFS的运行性能。以下列出一些对AU size的配置建议:
- 系统中以小文件为主时,应选择较小的AU size。
- 系统中以大文件为主时,应选择较大的AU size。
- 当AU size大于等于绝大多数IO size时,可以获得更好的性能。
Caution: YFS使用了Direct IO技术,要求所有的IO满足:
- buffer地址512字节对齐。
- buffer size 512字节对齐。
- IO offset 512字节对齐。