华为云计算IE面试笔记-简述Fusion Storage主要模块MDC,OSD,VBS,FSA及FSM的功能定位及交互关系

定位: Fusion Storage有两个管理系统组件:一个是FSM、一个是FSA; FSA包含:MDC、OSD、VBS三个进程(存储系统)

FSM(FusionStorage Manager): FusionStorage管理模块,提供告警、监控、日志、配置等功能,一般情况下主备节点部署。

FSA(FusionStorage Agent): 代理模块,部署在各节点上,实现各节点与FSM通信。

        FSA上的三个进程根据系统不同配置要求,分别在不同的节点上启用不同的进程组合来完成特定的功能。

  MDC(MetaData Controller):FusionStorage的元数据控制组件,是业务控制进程,实现对分布式集群的状态控制,以及控制数据分布式规则,数据重建规则,默认最少部署在3个节点上。一般部署在3个、5个或者7个节点上,形成MDC集群。

OSD(Object Storage Device):是FusionStorage的对象存储设备,是业务IO进程,执行具体的IO操作。在每个服务器上部署多个OSD进程,默认一块磁盘部署一个OSD进程。

VBS(Virtual Block System):是FusionStorage的虚拟块存储管理(将底层的对象存储伪装成块存储对外提供服务),是业务IO进程,负责卷、元数据的管理,提供分布式集群接入点服务,使计算资源能够通过VBS访问分布式存储资源。每个服务器上部署一个VBS进程,形成VBS集群。 

交互

1. MDC

1)MDC会与OSD、VBS进行消息之间的交互,通过心跳监测机制对OSD、VBS进行状态的监控。

2)MDC一般是主备管理。

3)MDC模块启动后,MDC向ZK注册选主,先注册的为主MDC,ZK记录MDC的主备信息并与MDC进行交互,ZK通过心跳监控MDC的健康状态,如果主MDC挂了,那么进行MDC的重新选主。

4)主 MDC 和其他 MDC 维持心跳关系,由主 MDC 指定其他 MDC 是否为归属 MDC,并告知归属 MDC 管理哪些存储池,主 MDC 决定归属 MDC 故障后的接替者。

2. OSD:

OSD 启动时,向 主MDC 查询归属 MDC,向归属 MDC 汇报自己的状态 归属 MDC 把状态发送给 VBS,OSD 与归属 MDC 维持心跳关系,默认每秒向MDC汇报OSD的状态,若是5秒内没有收到OSD的心跳,MDC会认为OSD故障,MDC将该OSD踢出存储池,更新 OSD View 到每个 OSD,更新 IO View 给 VBS, 在 5min 未收到心跳则进行数据重建。

3. VBS:

VBS启动时会查询主MDC,向主 MDC 注册(主 MDC 维持了一个活动的 VBS 列表,并同步给其他 MDC, 以便其他 MDC 能将 OSD 的状态变化发送给 VBS),向主 MDC 确定自己是否为 Leader VBS ,主VBS从主 MDC 获取 IO view,主VBS向OSD要元数据,其他 VBS 找主 VBS 获取元数据。一套FS只有一个主VBS,如果主VBS故障,其他VBS会重新向主MDC确认一个主VBS出来。

*FusionStorage组件、各组件间消息交互流程:

 

组件:

1) FusionStorage Manager:管理组件,提供 FusionStorage 告警,监控,日志,配置等操作的

2) FusionStorage Agent:FusionStorage agent 代理进程程序,部署在各个节点,实现与 FusionStorage Manager 通信。

3) MDC(MetaData Controller):元数据控制,分布式集群的状态控制,数据分布规则创建,数据重建规则创建。

4) VBS(Virtual Block System):虚拟块存储管理组件,卷和快照元数据的管理,IO 的接入和处理。

5) OSD(Object Storage Device):对象存储设备服务,磁盘管理,IO 复制,IO 数据的cache 处理。

6) zookeeper:作为一个开源的分布式应用协调系统,用来完成统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等工作。 

组件交互流程:

系统启动时,MDC 与 ZK 进行互动,选举出主 MDC,其他 MDC 挂掉,主 MDC 指定 MDC 接替此MDC 工作,主 MDC 挂掉,其他 MDC 与 ZK 互动,再次选举出主 MDC。

ZK 数量: 3/5/7,奇数原因: 因为 zookeeper 选举 leader 机制,n+1>n 总节点数: 2n+1控制集群创建完成后,数量不可更改。 

MDC 数量(3~96 个): 默认 MDC 数量为 3 个(创建 MDC 集群时与 ZK 数量一致),MDC 数量会随着存储池的数量上升而自动扩展。MDC 数量=ZK 数量+存储池数量。MDC 会管理存储池,一个 MDC 最多管理 2 个。 

OSD 启动时,向主 MDC 查询归属 MDC,并且向归属 MDC 反馈状态,归属 MDC 将 OSD 状态同步给 VBS,当归属 MDC down掉,主 MDC 指定一 MDC 接管,一个MDC 最多管理 2 个存储池,同时最多处理 2000 个 OSD 请求。

VBS 启动时,向主 MDC 注册(主 MDC 维护活动的多 VBS 列表信息,主 MDC 将 VBS 列表信息同步给归属 MDC,归属 MDC 将 OSD 状态信息同步给 VBS),VBS 向主 MDC 确定是否为主 VBS, VBS 向 MDC 查询 IO 视图,主 VBS 向 OSD 查询元数据信息,其他 VBS 向主 VBS 获取元数据。

<提示: 归属MDC运行在存储系统的存储节点上,注意,存储节点同时也可以是控制节点,所以当无独立的存储节点时,控制MDC同时担任归属MDC。

VBS运行在存储系统的计算节点上 >

*FusionStorage有哪些网络平面?并说明作用

1) 管理平面(External_OM): 用于FusionStorageManager与FusionStorageAgent之间的通信 

2) 存储平面(Storage_Data): 用于MDC、VBS、OSD之间通信 

3) 业务平面(External_OM): 用于OS与VBS之间通信 

<补充: 严谨来说,上述更应该称为通信平面。因OS与VBS之间通信的业务平面,有可能承载 SCSI、可有可能承载 iSCSI。显示,当承载 SCSI 时,其并非网络,而是本地调用。> 

*什么是无状态机头?

VBS就是无状态机头。元数据就是它的状态。不保存连接关系和位置信息,机头不保存 LUN 的元数据(通过 DHT 算法计算),LUN 不归属于某个机头,不易出现性能瓶颈;

*FusionStorage 整体 IO 流程

OS ---SCSI/iSCSI--->VBS---"key-value"--->OSD---SCSI--->disk 

VBS-->OSD:(判断是读 IO 还是写 IO,如果是读 IO,直接到本地读,如果本地受损,会到备的 OSD 中读。如果是写 IO,触发同步写机制,OSD 拿到 key-value,通过 DHT 找到备 OSD,完成写动作。)

1. 根据偏移量分片。(VBS 中的 VBP 模块对IO进行分片)

2. 形成 Key-value

3. 对 Key 值进行 hash,得到 32bit 值

4. Hash值进行 mod 运算,得到 partitionID

5. 查询 IOview,找到主 OSD,写数据

OSD-->disk:

1. 写请求:进行一次 DHT 算法找到备 OSD,同步写

2. 读请求:也需要进行 DHT 运算(通过 key 找到 partition,根据OSD的元数据表,找到 partition,定位到 partition 之后再小范围找到 key),读失败,还需要进行 DHT 算法,找出备 OSD,从备 OSD 中读出数据,返回结果给 VBS,进行修复。

DHT是 把IO以1m大小分片,把SCSI四元组中信息(读写的数据内容)+偏移量(LBA ID)和长度(LUN ID)转成key,对key 进行hash,然后对hash后的结果取模,分成3600份,得到partition id。

**FusionStorage 有哪些视图?存放在哪里?分别有什么作用?(考到)

主要有 OSD view、IO view、Partition view。

这些视图作为元数据被 MDC 所管理,存放在两个位置:

1,由ZK管理的ZK空间中

2.  MDC管理的内存中 

<发散思维:VBS及OSD也保存它们需要的部分元数据。例如VBS需要的IO View,OSD需要的Partition view >

OSD view是描述OSD的状态

IO view是Partition和OSD节点上的映射
Partition view是Partition和主备OSD对应关系,IO view是Partition view的子集。

*FusionStorage 读IO流程

1. APP下发读IO请求到OS,OS转发该IO请求到本服务器的VBS模块;VBS根据读IO信息中的LUN和LBA信息,通过数据路由机制确定数据所在的Primary OSD;如果此时Primary OSD故障,VBS会选择secondary OSD读取所需数据

2. Primary OSD接收到读IO请求后,按照Cache机制中的“Read cache机制”获取到读IO所需数据,并返回读IO成功给VBS

*FusionStorage 写IO流程(考到)

1. APP下发写IO请求到OS,OS转发该IO请求到本服务器的VBS模块;VBS根据写IO信息中的LUN和LBA信息,通过数据路由机制确定数据所在的Primary OSD

2. Primary OSD接收到写IO请求后,同时以同步方式写入到本服务器SSD cache以及数据副本所在其他服务器的secondary OSD,secondary OSD也会同步写入本服务器SSD cache。Primary OSD接收到两个都写成功后,返回写IO成功给VBS;同时,SSD cache中的数据会异步刷入到硬盘

3. VBS返回写IO成功,如果是3副本场景,primary OSD会同时同步写IO操作到secondary OSD和third OSD

存储池映射成2^32的哈希环,上层的OS/APP下发IO后,IO由VBS里的SCSI模块引入SCSI流量操作,然后再由VBS里的VBP模块对IO流量进行分片,分片后转换成key-value格式交给client模块,client将key-value进行hash取模(取模原因:因为hash后是2^32的值,每次IO后都要算这个值,时间就太长了),取模成3600份,算出了partition id,通过查看IO View(记录的有partition id和主OSD状态),就可以让这个数据找到自己该去读写在哪个OSD上,找到这个主OSD后,(IO流程)将这个数据发送给主OSD后,再由这个主OSD通过它的RSM模块进行同步写备OSD操作,主OSD会将IO写入至它的SSD cache,若这个IO流大小大于256kb会直接落盘(因为SSD缓存空间有限;SSD在写大块IO的性能提升不明显),写cache后,cache落盘(水位值:cache中数据达到一定大小后会落盘。刷盘周期:数据在cache中存放时间达到设定周期后会自动进行落盘)。

*归属MDC的作用?

控制存储池 一个mdc最多可以控制两个存储池 默认1个

*坏块修复

某个节点故障,FusionStorage 会做什么事情?

数据重建,FusionStorage Manager 不参与数据重建过程;

系统会自动检测故障,当检测到故障发生时(如OSD与MDC心跳中断,MDC会主动发现)则认为 OSD 异常,将其踢出,并修改 OSD View、IO View、Partition View 进行引流,5 分钟内未收到心跳,则自动进行数据重构;

坏块:当VBS把读IO发给OSD的时候,如果需要读的数据正好在坏块中,那么读IO的动作是会失败的,那么这个时候OSD会根据DHT算法找到备OSD并读取相关数据,备用OSD会将数据返回给主OSD,主OSD将数据返回给VBS,接着主OSD会将数据写入一个新的空间对数据进行修复,最后修改磁盘头部的元数据指针指向新的空间。

出现故障时,通常坏一块盘(OSD),一个 OSD 对应多个 partition,针对硬盘(OSD)做副本,修复过程是 1:1 的,不会进行并发修复。针对 partition 做副本,基于 OSD:partition=1:n 的,所以一个 OSD 包含多个 partition,partition 分散在不同的 OSD,所以修复时可以实现并发修复。

修复机制:1.按照安全级别进行修复。(安全级别:服务器级,机柜级,机房级)

自动修复

并发的修复

**MDC 发现 OSD 故障后 IO 流程(考到)

系统会自动检测故障,当检测到故障发生时(如 osd 与 mdc 心跳中断,mdc 会主动发现)则认为 OSD 异常,将踢出,并修改 OSD View、IO View、Partition View 进行引流,5 分钟内未收到心跳,则自动进行数据重构;

出现故障时,通常坏一块盘(OSD),一个 OSD 对应多个 partition,针对硬盘(OSD)做副本,修复过程是 1:1 的,不会进行并发修复。针对 partition 做副本,基于 OSD:partition=1:n 的,所以一个 OSD 包含多个 partition,partition 分散在不同的 OSD,所以修复时可以实现并发修复。

修复机制:1.按照安全级别进行修复。(安全级别:服务器级,机柜级,机房级)

          自动修复 

并发的修复

*归属MDC部署在哪里?

归属MDC部署在存储节点上的系统盘

*VBS间是否需要形成集群?为什么?

VBS间需要形成集群,它们要统一工作,分配任务,同步元数据

需要,VBS在提供块存储服务时,需要模拟出块设备(volume)。而具体模拟出怎么样的块设备,例如容量、WWN 号等,及在接收到SCSI请求时,将IO切片形成key-value,key组成所需要的treeid、branchid、snapid信息都保存在卷的元数据卷中。每当一个新卷的创建、快照、删除动作都需要对卷的元数据卷进行写动作,对卷的IO是由VBS完成的。如果所有的VBS都可以对此卷进行写动作的话,那么就有可能引起元数据卷受损问题,故需要选择出单独的VBS,即主VBS来避免该问题。一套FusionStorage系统中只存在一个主VBS; VBS的主备角色由MDC进程确定,所有VBS通过和MDC间的心跳机制保证系统中不会出现双主的情况。

只有主VBS能够操作元数据,所以备VBS收到的卷和快照管理类命令需要转发到主VBS 处理,对于挂载、卸载等流程,主VBS完成元数据的操作后,还需要将命令转到目标VBS实现卷的挂载、卸载等操作。

FusionStorage 由 MDC、OSD 形成存储引擎层,它们组成存储池为 VBS 提供对象服务,VBS 使用存储池空间进行提供块服务。所以块服务是只需由 VBS 独立维持的。VBS 将块服务重要的信息存放在卷元数据卷中,该卷事实上与用户创建的卷无异。

*Zookeeper的作用

Zookeeper作为一个开源的分布式应用协调系统,用来完成统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等工作。

是集群协调软件,统一命名服务、集群状态控制、选主MDC

*为什么要多个ZK,MDC?

提高可靠性(稳定性)

*FusionStorage 组件间心跳问题

1) ZK 与 MDC 的心跳间隔为 1 秒,ZK 在 10 秒内未收到心跳则认为 MDC 异常 

2) MDC 与 VBS 的心跳间隔为 1 秒 

3) MDC 与 OSD 的心跳间隔为 1 秒,MDC 在 5 秒内未收到心跳,则认为 OSD 异常,将 踢出,并修改 OSD View、IO View、Partition View 进行引流,5 分钟内收到心跳,则自动进行数据重构。

*MDC 可以坏多少个?

MDC 可以坏的数量=MDC 总数据-1,即最终系统只有一个 MDC 仍可保持正常。可以坏到只剩一个。

*DHT 全称是什么? 

DHT:Distributed Hash Table,分布式哈希表(环),FusionStorage 中指数据路由算法。 

*DHT的原理是什么?

1. 系统初始化时,FusionStorage将哈希空间(0~2^32)划分为N等份,每1等份是1个分区(Partition),这N等份按照硬盘数量进行均分。例如:二副本场景下,系统N默认为3600,假设当前系统有36块硬盘,则每块硬盘承载100个分区。上述“分区-硬盘”的映射关系在系统初始化时会分配好,后续会随着系统中硬盘数量的变化会进行调整。该映射表所需要的空间很小,FusionStorage系统中的节点会在内存中保存该映射关系,用于进行快速路由。

2. FusionStorage会对每个LUN在逻辑上按照1MB大小进行切片,例如1GB的LUN则会被切成1024*1MB分片。当应用侧访问FusionStorage时候,在SCSI命令中会带上LUN ID和LBA ID以及读写的数据内容,OS转发该消息到本节点VBS模块,VBS根据LUN ID和LBA ID组成一个key,该key会包含LBA ID对1MB的取整计算信息。通过DHT Hash计算出一个整数(范围在 0~2^32 内),并落在指定Partition中;根据内存中记录的“分区-硬盘”映射关系确定具体硬盘,VBS将IO操作转发到该硬盘所属的OSD模块。 

3. 每个OSD会管理一个硬盘,系统初始化时,OSD会按照1MB为单位对硬盘进行分片管理,并在硬盘的元数据管理区域记录每个1MB分片的分配信息。OSD接收到VBS发送的IO操作后,根据key查找该数据在硬盘上的具体分片信息,获取数据后返回给VBS。从而完成整个数据路由过程。 

*FusionStorage中,DHT路由算法流程(VBS如何找到OSD)

VBS 收到 SCSI 指令流--->VBS 会转换成为 key-value 形式--->VBS 对 LUN ID+LBA ID 进行 hash,得到 hash 值--->VBS 对 hash 值进行取模运算得到 partition 号--->VBS 将 partition 号检索 IO view,得到 OSD。

*FusionStorage的读写缓存机制

读缓存机制

Step 1:从内存的“读cache”中查找是否存在所需 IO 数据,存在则直接返回,并调整该 IO 数据到“读cache”LRU(热点因子机制)队首,否则执行 Step 2

Step 2:从SSD的“读cache”中查找是否存在所需 IO 数据,存在则直接返回,并增加该 IO 数据的热点访问因子,否则执行 Step 3

Step 3:从SSD的“写cache”中查找是否存在所需 IO 数据,存在则直接返回,并增加该 IO 数据的热点访问因子;如果热点访问因子达到阈值,则会被缓存在 SSD 的“读 cache”中。如果不存在,执行 Step 4

Step 4:从硬盘中查找到所需 IO 数据并返回,同时增加该 IO 数据的热点访问因子,如果热点访问因子达到阈值,则会被缓存在 SSD 的“读 cache”中。

写缓存机制

1. OSD在收到VBS发送的写 IO 操作时,会将写 IO 缓存在 SSD cache 后完成本节点写操作

2. OSD 会周期将缓存在 SSD cache 中的写 IO 数据批量写入到硬盘,写 Cache 有一个水位值,未到刷盘周期超过设定水位值也会将 Cache 中数据写入到硬盘中 

3. FusionStorage 支持大块直通,按缺省配置大于256KB的块直接落盘不写 Cache,这个配置可以修改

*FusionStorage最多允许坏几块硬盘?

需要考虑安全级别+副本数。理论上可以最多坏(副本数-1)*安全级别内硬盘的数量。如果安全级别为服务器级,有3台服务器,每台服务器有4块硬盘,副本数为2,则可以坏(2-1)*4=4。但这个值是短时间内坏的数量(数据未自动修复完成)。

如果考虑到数据能及时修复,可以允许已用空间所对应的最小硬盘数。以上面例子为例,假设每块硬盘大小为1TB,已用空间为1.8TB,则极端情况下,可以坏3*4-2=10块硬盘。

*FusionStorage 数据重建规则。坏一块硬盘时如何处理?扩容会如何处理?

当 FusionStorage 检测到硬盘或者节点硬件发生故障时,自动在后台启动数据修复。由于分区的副本被分散到多个不同的存储节点上,数据修复时,将会在不同的节点上同时启动数据重建,每个节点上只需重建一小部分数据,多个节点并行工作,有效避免单个节点重建大量数据所产生的性能瓶颈,对上层业务的影响做到最小化。

坏一块硬盘,并更换新硬盘时:

1、假如硬盘挂掉之后,没有超过 5 分钟,换盘,在新盘上恢复数据。多点到单点的修复

2、假如硬盘挂掉之后,超过 5 分钟,先进行数据修复,再换的盘。如果数据修复完成,相当于扩容

3、假如硬盘挂掉之后,超过 5 分钟,先进行数据修复,再换的盘。如果数据修复没完成,待修复完成后,又变成了扩容。

某个扇区出现问题,此种情况只会影响某个、某几个partition。当读到该partition时,无法返回数据,就会到另外的副本所在的磁盘读取数据。然后利用读到的数据,修复原副本数据。

修复机制:自动并发修复,遵循安全级别(服务器、机柜、机房)。

扩容机制:在遵从安全级别的情况下,平均使用率最小的 partition 给新增的硬盘。(较小数据的并发迁移)所有的硬盘大小都是一致的,如果不一致已空间最小的为准。

*FusionStorage能提供 FC-SAN吗?

不能,FusionStorage Manager 到 FusionStorage Agent 走的 IP,点对点,业务主机到 VBS也是通过 IP 来做标记的,SERVER-SAN 的设计初衷也是考虑使用普通的物理硬件来替代专门的存储设备,FC 交换机全球也就那么几家在做,如果还是使用 FC-SAN,那在传输介质上还是被厂商锁定了,不符合 server-san 的设计理念,而且,现在以太网的发展越来越快,从开始的百兆,千兆,到现在的万兆,在传输速率上,以太网不见得比 FC 要差。

*FusionStorage 怎么扩容,相比传统存储扩容性能有提升吗?

增加硬盘,或者增加物理主机。相比传统存储扩容性能有提升,因为相比较于传统存储扩容整个节点的时候,是扩容机头,可以增大 IOPS,而传统存储扩容硬盘框只是增大了容量,并不会增加 IOPS。

*现在 FusionStorage 支持提供什么样的存储类型?

新版本的 FusionStorage(V1R6)支持块存储,文件存储,对象存储,但是目前商用交付最多的还是块存储

*块存储、文件存储、对象存储的区别?

块存储是以块为基本存储单位提供存储空间,因其是最原始的存储使用方式,过去以硬件的形态设计(如硬盘),设计简单,未考虑锁机制,在多个客户端(进程、应用)使用同一块设备的情况下,存在数据受损风险,因此不适合(不代表不能)给多个客户端(进程、应用)使用。  特点:不易共享、性能好 

文件存储是以文件为基本单位提供存储空间,其通常是在块存储上,以软件的形态工作。因此其可轻易的设计出一些机制,例如块存储没有的锁机制,从而保障了多个客户端(进程、应用)可以使用同一文件存储。(易共享、性能较差) 

对象存储是以对象为基本单位提供存储空间,其核心思想在于元数据与数据分离。利用分布式技术,以软件为形态,通常在块存储或文件存储之上以对象的方式提供存储空间。相对块存储、文件存储,最主要的特点是线性扩展能力、基于网络的使用方式(体现在多主机可以共享对象存储空间),某些运行在 x86 上的对象存储系统甚至具体兼价的特点。对象存储的缺点是需要考虑时延问题,或设计机制降低时延,或要求应用自身对时延不敏感。(易共享、性能优)

*一台物理主机可不可以把FusionStorage当做存储?为什么?

可以,两种方式:

1. 通过在物理主机操作系统部署VBS,使用 scsi 调用FusionStorage

2. 通过 iscsi 走 IP SAN,调用 FusionStorage

*FusionCompute怎样通过IPSAN的方式使用FusionStorage?

1. 在 FusionStorage 中,需要开启 iSCSI 功能的服务器,开启 iSCSI 开关,并进行 iSCSI 端口配置(存储平面 IP) 

2. 在 FusionCompute 中以 IPSAN 的方式,将 FusionStorage 添加为存储资源,并关联 CNA 主机,获取 WWN (iqn)号 

3. 在 FusionStorage 中,创建启动器添加 CNA 主机的 iqn 号 

4. 创建主机并关联启动器 

5. 创建卷,选择 iSCSI 协议,并映射给创建的主机 

6. 在 FusionCompute 上,扫描存储设备并添加为数据存储

*FusionStorage Manager与VBS如何通信?

FusionStorage Manager 通过管理平面与 VBS 所在节点的 FusionStorage Agent 通信,FusionStorage Agent 与 VBS 中的 VBM 模块通信完成具体动作。

*MDC 与 VBS 功能是否可以合在一起?

理论上是可以的,但这不并符合模块化设计。事实上,当前 FusionStorage 由 MDC、OSD 形成底层引擎层,通过增添 VBS 对外提供块服务,增添 MDS、CA 对外提供文件服务、增添对象存储模块对外提供对象服务。故将 MDC、VBS 在功能上分开,更能增加架构的灵活性。 

*FusionStorage 限制

1. 每个服务器上有 3 个~36 个硬盘可供 FusionStorage 使用(包含独立部署的元数据盘)。 

2. 两副本时,每个服务器上提供给每个存储池使用的硬盘数量为 2 个~12 个。 

3. 三副本时,每个服务器上提供给每个存储池使用的硬盘数量为 2 个~36 个。 

4. 每个存储池中的硬盘数量不能少于 12 个。

5. 不支持FC网络,因为FS通过IP通信。(FC是存储设备才能用的,而FS是用服务器组成的) 

6. 同一个资源池中的存储节点上硬盘数量之差不能大于 2 块。(此处所指的硬盘为加入该存储池的硬盘,而不是服务器上所能提供的硬盘总数。) 

7. 同一个资源池中的存储节点上硬盘数量之差,不能大于硬盘数量最多的服务器上的硬盘数的 30%。 例如一个服务器上有 3 个硬盘,硬盘最多的服务器上有 5 个硬盘,这种场景就不符合 FusionStorage 的硬盘要求。(此处所指的硬盘为加入该存储池的硬盘,而不是服务器上所能提供的硬盘总数。) 

8. 同一个资源池中的硬盘类型必须一致。 

9. 建议硬盘大小一致,如果硬盘大小不一致,系统会按照最小盘的容量作为各盘的裸容量使用。 

10. 每个服务器上有 0 个~12 个缓存供FusionStorage使用 

11. 每个服务器上提供给每个存储池使用的缓存数量为 0 个~4 个 

12. 同一个资源池中的存储节点上缓存的数量必须一致

13. 同一个资源池中的存储节点上缓存的类型必须一致

*FusionStorage 支持的主存类型有哪些?

SATA、SAS、SSD 卡(华为 ES3000 V1/V2)、SSD 盘

*FusionStorage 支持的缓存有哪些?

NVDIMM(Agiga 4G)、SSD 盘、SSD 卡(华为 ES3000 V1/V2)、Memory(仅支持读)

*FusionStorage 的数据重构会影响主机性能吗?

不会。不影响的,因为只是数据的占用,而且资源占用也不大,重建发生在OSD之间(追问就回答一下数据重建 io 流程)

*EC 和多副本有什么区别?

相同容错能力下,EC 比多副本模式的空间利用率高,多副本比 EC 的系统性能好,用户可根据实际情况选择存储池的数据保护方式

*FusisonStorage 的多副本的利用率是怎样的?

*FusionStorage是否一定要布署在CNA上?

不是,FusionStorage 是一套存储软件,可以布署在任何兼容的Linux操作系统上。目前官方提供的兼容性列表中,包括:

CentOS 6.4-7.3

RedHat 6.4-7.3

Oracle Linux 6.2-7.0

SUSE 11.1-11.4

*FusionStorage的部署方式有哪些?

融合部署:

1. 指的是将 VBS和OSD 部署在同一台服务器中

2. 虚拟化应用推荐采用融合部署的方式部署

分离部署:

1. 指的是将 VBS和OSD 分别部署在不同的服务器中

2. 高性能数据库应用则推荐采用分离部署的方式

关键点:

融合及分离部署重点看 VBS和OSD是否部署在一起。因部署OSD的节点会成为存储节点,需要消耗所在节点的计算资源用于对外提供存储业务,所以像高性能数据库这种对计算敏感的节点不宜部署OSD,即融合部署。 

融合布署与分离部署是 VBS和OSD之间的事情,不要和SCSI、iSCSI混为一谈,后者取决于OS 与VBS是否在一起。

*FusionSphere 支持哪种部署方式?

支持融合部署、分离部署

*VBS的内部架构

IO在VBS进程中需要经过三个模块的处理,分别为SCSI,VBP,CLIENT:

1. SCSI模块负责从内核(VSC.KO)中将IO引入VBS进程,SCSI模块接收到的IO是标准SCSI协议格式的IO请求,通过SCSI四元组(host_id/channel_id/target_id/lun_id)和该IO在块设备上的offset,读写的数据长度len唯一标识一个IO,SCSI模块将收到的IO信息交给VBP(Virtual Block Process)模块

2. VBP内部将通过块格式的IO转换为FusionStorage内部Key-Value格式的IO下发给client,其中KEY的组成为:tree_id(4Byte)+ block_no(4Byte)+ branch_id(2Byte)+ snap_id(2Byte),tree_id/ branch_id /snap_id是FusionStorage内部对卷、快照的唯一标识;block_no是将卷按照1M的块划分,本次IO落在那一个1M块上的编号

3. IO请求到达client模块后,client根据KEY中的tree_id/ branch_id进行hash计算,确定本次IO发给哪一个OSD进程处理确定后将IO发送给对应的OSD处理

另外,VBM模块负责完成卷和快照的管理功能:创建卷、挂载卷、卸载卷、查询卷、删除卷、创建快照、删除快照、基于快照创建卷等。

  Heart-beat模块负责维持与MDC的心跳。

*什么时候创建的归属MDC?(考到)

通常创建一个存储池会创建对应的归属MDC

什么叫 FusionStorage?

FusionStorage Block 是一种分布式块存储软件,将通用 X86 服务器的本地 HDD、SSD 等介质通过分布式技术组织成一个大规模存储资源池,对上层的应用和虚机提供工业界标准的 SCSI 和 iSCSI 接口。 开放的API

FusionStorage 主存最大支持多大空间?

iSCSI 卷最大扩容容量 256TB,具体的存储池需要手动计算

最新版本的FusionStorage已支持分布式块存储服务、分布式文件存储服务、分布式对象存储服务

为什么还要有多个归属 MDC?

有大量的磁盘,对应大量的 OSD,每个 OSD 都要与 MDC 进行交互,如果都交给主 MDC 去做,主 MDC 会成为性能瓶颈点。总结:多个归属 MDC 产生,避免主 MDC 产生瓶颈,避免存储性能瓶颈。

Fusionstorage强一制性是什么?如何实现?

强一制性:任何时候进行读都能访问到最新的数据。

实现:OSD 接收到写请求后,会通过自己的RSM 模块完成多副本同步写。

<引伸:OSD收到写请求后,也会通过DHT算法,将 key进行hash 运算,得到hash 值,再将 hash 值进行取模运算,得到partition号,查看PartitionView 找到相应的备OSD进行同步写。>

FusionStorage为什么要配置大块直通,大于256K直接下盘,不写cache?

FusionStorage 针对高 IOPS 的场景,IO 数量密集,很快就会把 cache 空间占完。所以大 IO 使用 cache 提升速度不明显,cache 对于随机小 IO 不用寻道,比 HDD 要寻道处理速度快。

FusionStorage 的数据重建过程 

FusionStorage中的每个硬盘都保存了多个DHT分区(Partition),这些分区的副本按照策略分散在系统中的其他节点。当FusionStorage检测到硬盘或者节点硬件发生故障时,自动在后台启动数据修复。

由于分区的副本被分散到多个不同的存储节点上,数据修复时,将会在不同的节点上同时启动数据重建,每个节点上只需重建一小部分数据,多个节点并行工作,有效避免单个节点重建大量数据所产生的性能瓶颈,对上层业务的影响做到最小化。

<关键点:故障自动检测 、数据自动重建、多节点并行恢复 >

scsi 是什么组件提供服务?

VBS

为什么我在 FusionStorage Manager 界面把 Agent 的包安装了之后就能看到磁盘的信息了?

因为 FusionStorage Agent 内存常见服务器的 raid 卡驱动识别的程序,raid 卡可以管理硬盘信息,所以安装 agent 后就能看到磁盘信息。

FusionStorage 如何实现数据高可靠性?

FusionStorage 支持多副本和 Erasure Code(中文叫纠删码,简称 EC)两种数据保护方式,即当物理设备出现故障时,数据仍可被正常访问,并自动恢复故障设备上的数据。用户可根据需求灵活选择数据保护方式,实现数据可靠性和存储空间利用率的最佳配比。传统的硬盘级 RAID 模式将数据存放于单节点内的不同硬盘,当整节点发生故障时,无法有效恢复数据。FusionStorage 将数据在节点间进行冗余保护或副本构建,有效避免数据丢失。

Erasure Code 的保护等级有哪些?

保护级别以 N+M 模式或 N+M:B 表达。其中,N 表示 ODC(Original Data Count);M表示 RDC(Redundant Data Count)

目前支持配置的范围是:3+1、2+2、3+2、4+2、8+2、12+3、3+2:1、4+2:1、8+2:1和 12+3:1 九种配置

利用率等于 N/(N+M)

如 4 个节点。3+1 则计算为 3/(3+1)=75%

备注:

OSD如何找到归属MDC?

OSD启动时向MDC查询归属MDC,向归属 MDC报告状态,归属MDC把状态变化发送给 VBS。当归属MDC故障,主MDC指定一个MDC接管,最多两个池归属同一个 MDC

补充:OSD进程在启动时会加载相应配置文件,文件中,包含所有 MDC的IP及端口号,所以OSD可以向这些 MDC确定归属MDC

VBS与MDC的交互

VBS启动时查询主 MDC,向主MDC注册(主 MDC 维护了一个活动 VBS的列表,主MDC同 步VBS列表到其它 MDC,以便MDC能将OSD的状态变化通知到VBS),向 MDC确认自己是 否为leader;VBS 从主MDC获取IO View,主VBS 向OSD获取元数据,其它 VBS向主VBS获取元数据

补充:

VBS进程在启动时会加载相应配置文件,文件中,包含所有 MDC的 IP及端口号,所以VBS可以向这些MDC查询主 MDC。

VBS形成集群并选择主VBS,原因在于解决多VBS对同一卷元数据的一致性操作上,主 VBS从 OSD中读取元数据卷获得卷的元数据。

只有主VBS能够操作元数据,所以备VBS收到的卷和快照管理类命令需要转发到主VBS处理,对于挂载、卸载等流程,主VBS完成元数据的操作后,还需要将命令转到目标 VBS实现卷的挂载、卸载等操作。

考官追问:

拔掉一个硬盘后,会发生什么?

进行数据重建。

有几种view?分别是什么?作用是什么?

三种。

IO View、OSD View、Partition View。

IO View记录着partition和DISK的关系。

OSD View记录着OSD ID和OSD Status。

Partition View记录着Partition ID、主OSD ID和OSD Status。

MDC数量多少个?可以故障多少个?

MDC数量3~96个

可以故障N-1个

DHT是什么?

Distributed Hash Table分布式哈希表(环),数据路由机制

*VMware如何使用FusionStorage?

Vmware主机使用FusionStorage资源,把VBS以虚拟机的方式部署在Vmware主机上,以ISCSI方式进行挂载,此时Vmware虚拟化层可以通过VBS虚拟机使用到FusionStorage资源,Vmware虚拟化层再以SCSI的方式挂载给Vmware虚拟机即可。

Vmware特殊场景,VBS使用FS是走的ISCSI。

1. 通过在物理主机操作系统部署VBS,使用 scsi 调用FusionStorage

2. 通过 iscsi 走 IP SAN,调用 FusionStorage

什么情况下是SCSI什么情况下是ISCSI?

scsi是主机内部通信的协议

iscsi是主机外部通过IP网络进行通信

答到OSD的时候考官突然说SSD盘只是需要考虑硬盘大小?

需要考虑SSD盘的硬盘大小、性能、成本

SATA盘3副本需要使用SSD?

需要使用,SSD在这时候用来做缓存用。

FS最少需要多少块硬盘?

FS最少需要12块硬盘。

最小3节点部署,每个节点4块盘。3块做主存,1块做缓存。

归属MDC什么时候创建的,怎么创建?

创建一个存储池的时候

刚开始没答fsm fsa 忘了,后面说我这答漏了两个重要的组件,我后面补充了,然后问我,有什么部署方式?

我答融合部署和分离部署,这不是他想要的,然后我继续答,说按客户需求进行部署,如管理节点 计算节点 存储节点部署,考官听到后没表示,下一题。

根据客户需求来部署符合用户要求的,如管理节点 计算节点 存储节点部署

数据重建和数据恢复的原理,工作过程?

自动数据重建

并发修复

安全级别修复:服务器级、机柜级、机房级

多节点并行修复,一个节点只需要修复一小部分数据

系统自动发现磁盘故障

若故障5分钟内,管理员换了新盘,进行数据重建。

故障超过5分钟,已修复完成,再换了新盘相当于扩容

故障超过5分钟,未修复完成,再换了新盘,随后再修复完成,相当于扩容

这块硬盘故障之后再重新插入一块新硬盘会做什么操作, 之前那块故障的硬盘的数据会到新硬盘上面去吗?

若故障5分钟内,管理员换了新盘,进行数据重建。

故障超过5分钟,已修复完成,再换了新盘相当于扩容

故障超过5分钟,未修复完成,再换了新盘,随后再修复完成,相当于扩容

分情况,若在修复完成后再插入的新硬盘,之前那块故障的硬盘的数据不会到新硬盘上面去。

5分钟内硬盘恢复了或者重新插了一块硬盘就会恢复之前的样子。

若5分钟后硬盘还未恢复,那么就会将硬盘踢出存储池,然后进行数据重建。

MDC状态是怎么保存的?

保存在ZK盘里。

元数据有哪些?保存在哪里?

Io view    partition view    osd view    组件的状态

ZK的ZK空间中

MDC的内存空间中

可靠性怎么实现?怎么实现多副本机制?

1. 数据可靠性是多副本机制或EC机制实现

2. 组件的可靠性是组件都是主备或多活部署

3. 掉电保护机制

多副本机制靠Partition View中的OSD的主备状态来决定是几副本。

写IO流程

OS下发写IO到VBS,VBS对写IO做成key-value形式再进行DHT运算,先对key-value进行hash计算,再将HASH值进行取模得到partition id,找到对应的主OSD,将写IO下发给主OSD,主OSD进行同步双写,将写IO发给本服务器的ssd cache和该io数据所属副本服务器的备OSD,备OSD同步写入本服务器ssd cache,当主备都写完成后主OSD返回写成功给VBS,而后它们的cache再异步写入服务器的硬盘。

猜你喜欢

转载自blog.csdn.net/weixin_42592728/article/details/120456493