写点什么

FusionStorage 原理及组件

  • 2022 年 4 月 25 日
  • 本文字数:2318 字

    阅读完需:约 8 分钟


三、FS 的 DHT 算法


==========


DHT(分布式哈希表,Distrubuted Hash Table


111? 698d51a19d8a121ce581499d7b701668


112? 7f6ffaa6bb0b408017b62254211691b5


将十进制的数,转化为 2 的 128 次方的数,就可以实现平均切随机


一个存储池对应一个 DHT 环(逻辑)



读写流程:


1.scsi 流交给 vbs--->vbs 转换 scsi 流为 key-value


2.对 key 值进行--->hash 寻址


目的:将主机下发的 IO 平均且随机的落到存储池各个 OSD 对应硬盘上


也就是为了实现****IO 的负载均衡


3.经过 hash 得到一个 2 的 32 次方的数值--->模运算-->得到 patition


目的:缩减表的尺度,加速查找 DHT


4.查询由 MDC 维护的映射表记录的是 patition 和 osd 的关系 patition--->得到 osd


目的:解决坏盘或者扩容场景,准确定位 patition 对应的 osd 位置


5.osd 做 key-value 到 iscsi 流的转化,做磁盘的读写操作



四、存储池和卷


=======


存储池是由一组服务器本地硬盘构成,硬盘类型相同、容量相同、参数相同等限制(参考产品文档)


主存类型:SATA 机械? SAS 机械?? SAS-SSD?? SATA-SSD? NVME SSD 盘、SSD 卡


一块硬盘只能属于一个存储池


一个存储池可以划多个卷(划卷依赖 vbs)


一个卷只能属于一个存储,不能跨存储池


卷可以通过 scsi 挂载给 vbs 或者 iscsi 映射给业务主机使用


一个主机可以使用多个卷,多个卷可以来自不同存储池


五、FS 的可靠性和安全级别


=============


可靠性




副本机制:


2 副本--50%?? 3 副本--33.3%


EC 机制: M=2,3,4? N 最大 22


EC(Erusure code)算法,分布式 raid 算法,可以跨界点 raid


N+M?? 坏 M 块硬盘或者 M 个节点数据不丢失,业务不中断


N 是数据分片


M 是校验分片



N+M:B?? 坏 M 块硬盘或者 B=1 个节点数据不丢失,业务不中断


22+2 保护? 高达 91%空间利用率



安全级别




FSM 配置界面创建存储池仅支持服务器级和机柜级


服务器级安全:数据副本或者 EC 的数据分片一定不会放在同一个服务器节点内


机柜级安全:数据副本或者 EC 的数据分片一定不会放在同一个机柜内


机房级安全:数据副本或者 EC 的数据分片一定不会放在同一个机房内


不同的存储池可配置不同的数据保护方式和安全级别


六、VBS 结构


=======



scsi:将内核态 VSC 模块的 scsi 流引入 VBS 用户态


============================


VBP:scsi 流转换成 key-value


client:key--hash---mod--patition--查 io-view--主 OSD 走存储网络平面将 io 流转发至主 OSD


VBM:卷和快照生命周期管理操作? 创建卷、挂载卷、卸载卷、查询卷、删除卷、创建快照、删除快照、基于快照创建卷等


hearbeat:心跳模块? 通过存储平面与 MDC 交互心跳包? 使 MDC 维持 VBS view 状态视图


七、OSD 结构


=======



RSM:复制协议实现。


SNAP:实现卷与快照的 IO 功能、磁盘空间的管理。


CACHE:实现 cache 功能。


AIO:实现异步 IO 下发到底层 SMIO 模块和通过调用 SMIO 接口来监控介质故障。


SMIO:下发到 IO 到实际的物理介质、监控物理介质故障、获取磁盘信息。


八、FS 的 IO 流程


=========


1)写 IO




APP--》OS--》scsi/iscsi---》VSC 内核模块接收---》scsi initiator--》scsi target---》VBP(LUN ID/LBA ID/length-->key data-->value)


---》client(key--hash--mod--patition--查 io view--主 OSD)---》主 OSD(key--hash--mod--patition--查 patition view--备 OSD)--》主 OSD 一方面下发写 IO 到本端 cache,一方面通过 RSM 复制 IO 到备 OSD---》主备 OSD 同步写 《一线大厂 Java 面试题解析+后端开发学习笔记+最新架构讲解视频+实战项目源码讲义》无偿开源 威信搜索公众号【编程进阶路】 cache 成功--》由主 OSD 返回 VBS 写成功(回写),VBS 返回 APP 写成功。


2)读 IO




APP--OS--scsi/iscsi---VSC 内核模块接收---scsi initiator--scsi target---VBP(LUN ID/LBA ID/length-->key data-->value)---client(key--hash--mod--patition--查 io view--主 OSD)---主 OSD


1、主 OSD 正常,先读 cache,如果 cache 读命中,返回读成功,如果未读命中,主 OSD 向主存 disk 查询读数据。


2、主 OSD 异常,MDC 会检测硬盘异常触发退盘,修改视图(OSD view? IO view? Patition view),指导 VBS 引流到备 OSD(新主 OSD 读数据),先读 cache,如果 cache 读命中,返回度成功,如果未读命中,主 OSD 向主存 disk 查询读数据。


九、ZK 的作用


=======


Zookeeper(简称 ZK)分布式服务框架主要用来解决分布式应用中经常遇到的,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等,ZK 主要工作包括三项:


MDC 主备管理:




MDC 采用一主两备部署模式;在 MDC 模块进程启动后,各个 MDC 进程会向 ZK 注册选主,先注册的为主 MDC;运行过程中,ZK 记录 MDC 主备信息,并通过心跳机制监控 MDC 主备健康状况,一旦主 MDC 进程故障,会触发 MDC 重先选主。


数据存储




在 MDC 运行过程中,会生成各种控制视图信息,包括目标视图、中间视图、IO 视图信息等,这些信息的保存、更新、查询、删除操作都通过 ZK 提供的接口实现。


数据同步




数据更新到主 ZK,由主 ZK 自动同步到备 ZK,保证主备 ZK 数据同步,一旦 ZK 发生主备切换,业务不受影响


为什么奇数部署 ZK


在 ZK 集群中,如果大于等于半数 ZK 节点宕机那么整个集群不可用


比如部署 4 个 ZK,是只允许坏一个 ZK


部署 3 个 ZK,也是只允许坏一个 ZK


部署 3 台和 4 台都是只允许一台宕机,既然是同样的容错能力,那么考虑节省服务器资源,所以推荐奇数部署


帮助 MDC 选主


持久保存 MDC 管理的系统元数据


帮助 MDC 实现元数据同步


十、FS 的视图


=======


VBS view?? VBSid---VBS status


OSD view?? OSDid---OSD status


IO view??? patitionid----主 OSD


Patition view?? patitionid---主 OSD/备 OSD--主备 OSD 的 status


视图持久化保存在 ZK 盘或者 ZK 分区


MDC 所在主机内存缓存所有视图


VBS 所在主机内存缓存 io view


OSD 所在主机内存缓存 patition view


十一、FS 组件交互过程


===========


1)创建控制集群?? 自动 ZK? 控制 MDC




ZK 启动形成 ZK 集群,MDC 找 ZK 注册,最先注册成功的为主 MDC,MDC 与 ZK 位置心跳,MDC 通过 ZK 形成集群关系


主 MDC 故障,其他 MDC 与 ZK 联动重新注册选举主 MDC

用户头像

还未添加个人签名 2022.04.13 加入

还未添加个人简介

评论

发布
暂无评论
FusionStorage原理及组件_Java_爱好编程进阶_InfoQ写作社区