本篇仅对华为云计算HCIE-Cloud面试中所出现的题进行一个较为标准的解答,如需理解详情,还是建议听一些更具有专业性的回答;不过博主后续会针对每一个细节出文章进行描写,让大家真正的了解华为云计算,并不是只能考试还能运用到工作生活当中,针对考试的可以用面试宝典作为一个参考。一起进步吧!
进入正题
简述FusionStorage主要模块MDC,OSD,VBS,FSA及FSM的功能定位及交互关系。
定位: Fusion Storage有两个组件:一个是FSM、一个是FSA; FSA包含:MDC、OSD、VBS三个进程
组件:
FSM: 管理模块,提供告警、监控、日志、配置等功能,一般情况下主备部署
FSA: 代理进程,部署在各节点上,实现各节点与FSM通信;(安装在x86服务器上主要与FSM通信)
FSA中的进程:
**MDC:**元数据控制模块 ,实现对分布式集群的状态控制,以及控制数据分布式规则控制,数据重建规则控制,默认最少部署在3个节点上(部署在奇数个的ZK盘上)
**OSD:**是对象存储设备,默认一个磁盘部署一个OSD,执行具体的IO操作(一个OSD可以认为成一个磁盘,SSD这种磁盘可以部署多OSD)
**VBS:**是虚拟块存储管理,提供分布式集群接入点服务(一个节点可以部署一个VBS进程,也可以部署多个,来提高IO性能)
交互答法:
1.当系统启动时:选主
MDC与ZK互动决定主MDC (运行过程中ZK会记录MDC的主备信息)
主MDC与其他MDC相互监控心跳
主MDC决定其他MDC故障后的接管者
其他MDC发现主MDC故障又与ZK互动升任主MDC
2.OSD启动时向MDC查询归属MDC,向归属MDC报告状态,归属MDC把状态变化发送给VBS,当归属MDC故障,主MDC指定一个MDC接管,最多2个池归属同一个MDC。
3.VBS启动时会查询主MDC,先向主MDC查询的VBS就是一个leader角色,主VBS向OSD要元数据,并把元数据从主VBS同步到其他VBS上。
(扩容存储也只要在节点上装FSA,就能感知到这个节点的信息)
思考:IO view、patition视图
追问
vbs 具体通过什么算法判定应该把 io 交给哪个 osd?
VBS 在接受到 IO 后,会通过 hash 算法确定该 IO 应当落在哪个分区中,分区是在存储池初始化时通过 DHT 算法生成的会通过查询 MDC 生成的视图,保存在MDC 中,系统启动时会由 MDC 向 VBS 同步 IO 视图。用以快速查找数据。
mdc 和 vbs 管理的元数据有什么区别?
MDC 中所管理的元数据是 FusionStorage 中存储池的元数据,包含了数据组成结构(各种视图)以及该池所涉及组件的运行状态等信息VBS 中的元数据指的是在系统初始化启动时,由 MDC 向 VBS 同步的信息,实际上是该节点所使用的存储池的 IO 视图。OSD 管理的元数据是每个 1M 分片的分配信息。
有哪些视图,存放什么数据,具体是用来干嘛的?
有 IO 视图、partation 视图、OSD 视图
IO 视图:确定了 partition 和主 osd 的映射关系,一般该视图会由 MDC 更新并缓存至 VBS;
Partition 视图:确定了 partition 对应的主备 osd 关系,是用来实现多副本机制的。
OSD 视图:确定了 OSD 的 ID 以及 OSD 的状态,一般由 MDC 监控并更新该视图。
FSM 和 FSA 是通过什么平面通信的?FSA 的作用是什么?
以 FusionStorage 在 FusionCompute 场景下的融合部署为例
FSM 和 FSA 进行通信时使用的是 FusionCompute 中 CNA 节点的管理网络。
FSA(FusionStorage Agent):代理进程,部署在各节点上,实现各节点与
FSM 通信。FSA 包含 MDC、VBS 和 OSD 三种不同的进程。根据系统不同配置要求,分别在不同的节点上启用不同的进程组合来完成特定的功能。
什么是多副本机制?实现原理?
多副本机制即一份数据多分存放,用以达到保障数据可靠性的目的。在FusionStorage 中,多副本复制取决于 MDC 的视图;两副本情况下,当 client发送一个写请求到达该 OSD 的时候,该 OSD 将根据视图的信息,将该写请求复制一份到该 Partition 的备 OSD。多副本情况下,则会复制发送多个写请求到多个备 OSD 上
osd 和主 MDC 有心跳关系还是和所有 mdc 有心跳关系?
答:与主 MDC 有心跳关系。
坏一块盘,如何恢复数据,要描述各组件如何交互完成恢复
MDC 监控所有的 VBS 和 OSD,发现异常后,马上启动指定集群中另外一个相同角色作为主要角色。若 OSD 损坏则,则由 MDC 监控并发现该异常情况,并查询 partation 视图后将备用 OSD 升为主 OSD,同时更新 IO 视图,并将 IO 视图同步给 VBS,将该 OSD 对应的磁盘设置为不可用状态。触发并行恢复机制,取存储池中其他 OSD 与该 partation 中的主 OSD 进行主备关系建立,从而完成恢复。
主 VBS 挂了,会怎样?
影响如下:
1、 若该节点仅开启了一个 VBS 进程,若该节点的 VBS 进程出现故障,则该节点的所有涉及 FusoinStorage 的业务 IO 操作将会被挂起,最终会导致该节点的存储业务不可用;
2、若该节点开启了多个 VBS 进程,则其中一个 VBS 出现故障,不会影响其他 VBS 的正常运行。
为什么 FusionStorage 不能用 raid?
答:Fusionstorage 自身提供多副本和 Erasure Code 两种数据保护方式,所以没必要再使用 raid 去进行数据保护,FusionStorage 支持多副本和 Erasure Code 两种数据保护方式,即在多副本和 EC 故障冗余范围内,当物理设备出现故障时,数据仍可被正常访问,并自动恢复故障设备上的数据。用户可根据需求灵活选择数据保护方式,实现数据可靠性和存储空间利用率的最佳配比。传统的硬盘级 RAID 模式将数据存放于单节点内的不同硬盘,当整节点发生故障时,无法有效恢复数据。FusionStorage 将数据在节点间进行冗余保护或副本构建,有效避免数据丢失。
什么是控制器?
答:控制器是存储设备中的核心部件,主要负责处理存储业务、接收用户的配置管理命令、保存配置信息、接入硬盘和保存关键信息到保险箱硬盘。
fusionstorage 为什么可以统一接受告警?
答:因为 fusionstorage 通过 fsm 管理进程和各个节点的 fsa 进行通信,fsa 向fsm 汇报此节点的状态告警。
FusionStorage Manager(FSM)管理进程,提供告警、监控、日志、配置等操作维护功能,推荐主备节点部署。
FusionStorage Agent (FSA)管理代理进程,部署在各节点(服务器)上,实现各节点与 FSM 通信。
OSD 每次 io 都要和 MDC 交互吗?
答:读 IO 直接通过 OSD 缓存的 OSD view 找到对应数据,写 IO 完成后会向 MDC更新视图。
数据路由原理
以读 IO 为例:
答:系统初始化时,FusionStorage 将哈希空间(0~2^32)划分为 N 等份,每 1 等份是 1 个分区(Partition),这 N 等份按照硬盘数量进行均分。
例如:二副本场景下,系统 N 默认为 3600,假设当前系统有 36 块硬盘,则每块硬盘承载100 个分区。上述“分区-硬盘”的映射关系在系统初始化时会分配好,后续会随着系统中硬盘数量的变化会进行调整。该映射表所需要的空间很小,FusionStorage 系统中的节点会在内存中保存该映射关系,用于进行快速路由。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 模块。每个 OSD 会管理一个硬盘,系统初始化时,OSD 会按照 1MB 为单位对硬盘进行分片管理,并在硬盘的元数据管理区域记录每个 1MB 分片的分配信息。OSD 接收到 VBS 发送的 IO 操作后,根据 key 查找该数据在硬盘上的具体分片信息,获取数据后返回给 VBS。从而完成整个数据路由过程。
举例说明:应用需要访问 LUN1+LBA1 地址起始的 4KB 长度的数据,首先构造key=LUN1+LBA1/1M,对该 key 进行 HASH 计算得到哈希值,并对 N 取模,得到partition 号,根据内存中记录的“分区-硬盘“映射表可得知数据归属的硬盘。
mdc vbs osd 是以什么方式运行在 fsa 中?mdc 个数为什么是奇数?偶数不行吗?
MDC、VBS、OSD 以进程的形式运行在 fsa 中,系统初始化启动的时候 mdc必须与 zk 数目一致,zk 个数一般为 3,5,7…,以奇数个部署,所以 MDC 一般为奇数个,后面可以根据需要进行修改,可以为偶数个,最多可创建 96 个。
分离部署,vbs 能使用 osd 吗?怎么使用的?
答:可以使用,他是通过查询 MDC 的 IO 视图与分区视图找到主 OSD 位置后,将数据下发给主 OSD 时由主 OSD 进行集群内数据同步,因此就算是分离部署也可以访问。
在我们 fusionstorage 中是不是每块盘上都有 osd?磁盘中没有 osd 能不能用?
答:都有 osd,没有 OSD 不能用。
ZK 有什么作用?为什么 OSD 不向 ZK 选主?VBS 有主备部署吗?
答:ZK 作用有:
1、MDC 主备管理: MDC 采用一主两备部署模式;在 MDC 模块进程启动后,各个 MDC 进程会向 ZK 注册选主,先注册的为主 MDC;运行过程中,ZK 记录 MDC 主备信息,并通过心跳机制监控 MDC 主备健康状况,一旦主 MDC 进程故障,会触发 MDC 重新选主。
2、数据存储:在 MDC 运行过程中,会生成各种控制视图信息,包括目标视图、中间视图、IO 视图信息等,这些信息的保存、更新、查询、删除操作都通过 ZK 提供的接口实现。
3、数据同步:数据更新到主 ZK,由主 ZK 自动同步到两个备 ZK,保证主备 ZK 数据实时同步。一旦 ZK 发生主备切换,业务不受影响。因为 OSD 需要通过分区视图确定分区与 OSD 主的关系,而分区视图存放在MDC 中,所以跟 MDC 确定主备;VBS 有主从关系;
主 MDC 对应的主 ZK 挂掉,集群还能工作吗?
答:可以工作,当主 ZK 死掉后,会根据 ZK 的顺序选举原则,选择出最小的 ZK作为主 ZK 继续工作。
小结
这道题难点在交互流程那里,在考试前自己一定要把流程说明白,最起码自己能说明白,然后在给不知道的人说明白,那就可以去给考官讲了。
版权属于:周晨
本文链接:https://wenziju.com/index.php/archives/497/
本博客所有文章除特别声明外,均采用知识共享署名-非商业性使用-相同方式共享 3.0 中国大陆许可协议。转载请注明出处!