华为云计算——FusionStorage数据路由原理(FusionStorage基于DHT技术实现Key-Value存储系统)

1.基础概念

DHT:FusionStorage中指数据路由算法。 Distributed Hash Table,分布式哈希表。是一种分布式存储方法。在不需要服务器的情况下,每个客户端负责一个小范围的路由,并负责存储一小部分数据,从而实现整个DHT网络的寻址和存储。

Partition:代表了一块数据分区,DHT环上的固定Hash段代表的数据区。

Key-Value:底层磁盘上的数据组织成Key-Value的形式,每个Value代表一个块存储空间。

Volume:应用卷,代表了应用看到的一个LBA连续编址。

VBS (Virtual Block System) 虚拟块存储管理组件,负责卷元数据的管理,提供分布式集群接入点服务,使计算资源能够通过VBS访问分布式存储资源。

OSD (Object Storage Device) 对象存储设备服务,执行具体的I/O操作。一般来说一块硬盘对应部署一个OSD,但是像SSD这种高性能的固态硬盘为了提高其IO性能可以部署多个OSD。

DHT


2.FusionStorage数据路由原理

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

FusionStorage会对每个LUN在逻辑上按照1MB大小进行切片,例如2GB的LUN则会被切成2048*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模块。Key值的计算方式:Key=LUN ID+LBA ID/1MB。

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

举例说明:应用需要访问LUN1+LBA1地址起始的4KB长度的数据,首先构造key=LUN1+LBA1/1M,对该key进行HASH计算得到哈希值,并对N取模,得到partition号,根据内存中记录的“分区-硬盘“映射表可得知数据归属的硬盘。

数据路由原理

总结:

VBS将操作系统的SCSI命令中的key提取出来,通过哈希运算,确定访问数据内容落到DHT环上的哪块Partition上,根据Partition和Disk的对应关系(系统初始化时形成),确定数据存放在那个服务器上的哪块盘上,再通过OSD通过计算确定数据存放在硬盘的具体位置并将获取的数据返回给VBS。

华为的FusionStorage采用分布式集群控制技术和DHT路由技术,提供分布式存储功能特性。