FusionStorage-DHT算法
DHT(distributed hash table)分布式hash算法,华为指的是数据路由算法
- VBS提供SCSI\ISICI服务,DHT算法需要解决的问题是VBS接收到数据后怎么进行有效快速的分布式存储到OSD中
SCSI协议
预备知识,简单理解VBS怎么通过SCSI协议确定到具体的磁盘
- HOST_ID,通过主板总线接口识别并加载驱动所识别的SCSI控制器
- CHANNEL_ID,每个channel拥有一条scsi总线
- TARGENT_ID,具体的设备,比如U盘,硬盘
- LUN_ID,硬件具体使用还会再分成多个逻辑磁盘LUN
- LAB_ID,LUN设备的具体哪个位置
VBS会把SCSI信息转换为VBS能识别的信息,最终的LABID就是OSD了
做法一:
- HASH的值:LUNID+LABID(VBS中叫tree_id/branch_id)
- HASH值的范围:0-2 ^32-1次方
- 通过HASH值的范围和OSD通过映射平均对应
- 存在问题:每次检索需要2^32次方,CPU寻址时间过长
做法二:
- 通过缩减检索范围,进行合并组(FS中叫Partition),减少条目
- Partition跟osd_id对应关系用的是mod运算
- Partition范围3600个组,过大影响检索,过小会影响OSD数量
- 关系是N:1,Partition可以对应多个同样的OSD
- 存在问题:当增加或者减少OSD数据会被重新分配,因为OSD进行的是规律分配对应组
做法三:
- OSD需要变成无规律分配对应,需要使用映射表做无规律的对应记录
- Partition-osd_id形成映射表
总结
LUNID+LABID进行HASH得到HASH值
HASH值进行mod运算得到Partition
Partition–>OSD映射关系
问题:
关于存储池最大容量是多少?
一套fs仅有一个控制集群(MDC,ZK辅助),可以有多个存储池,存储池由多个OSD组成
- 存储池:DHT环 ------- 1:1
- DHT环是基于数学的建模,理解上就是一个环(没有真实这样的环存在),作用就是Partition–>OSD映射关系
- hash值:扇区空间 ----- 1:1 (一个hash对应一块硬盘最小扇区大小)
- 扇区空间-----512bytes
- DHT环:hash------ 1:2^32
存储最大空间=2^32 *512bytes=2TB,所以一个卷也就最大为2TB
问题解决:
- 增大扇区空间大小,FusionStorage认为合理值为1M,存储空间就扩大了1024*8倍
- 扇区空间过大导致磁盘空间的浪费及数据分配不均衡,过小导致IO降低
做法:
要2个地方进行修改切片1M?