关于存储空间直连技术,在本人的之前的博客中小有介绍,其中只是关于这种分布式存储的实现进行了少量延展,这里就把这个技术就我粗浅的研究给感兴趣的朋友介绍一下。首先分布式存储中每个节点都是使用本地的存储的,但是逻辑层却要保证每个节点都能看到所有节点下的存储,这听起来有点不可思议,但其实原来存储厂商提供的存储都有相似的结构,节点机头带本地盘如果多机头节点就要实现磁盘到所有机头的挂接链路。我们这里介绍的Windows Server 2016存储空间直连技术是软件定义存储的范畴,所以首先要引入的一个技术叫做软件存储总线技术。


软件存储总线技术简称就是跨越所有存储集群节点的虚拟存储总线,通过这个虚拟的总线可以让所有集群内的节点看到所有节点下全网状连接的所有本地磁盘。存储总线包含了两个核心组件:ClusPort和ClusBlft,ClusPort实现了一个虚拟的HBA接口,通过这个接口可以实现对所有集群节点下的服务器磁盘设备的连接,而ClusBlft则实现对通过ClusPort连接的所有磁盘设备和机头的虚拟化封装;Windows Server 2016中存储组件堆栈如下,其中绿色的部分为这两个软件存储总线组件。


如上图我们也可以看到软件存储总线通过SMB 3.0和SMB直连技术进行跨集群节点的传输和通信,通过在每个集群节点主机上提供SMB的分层的命名实例,用来提供对SMB的消费者如图中所示的集群共享卷文件系统使用,在上层构建可靠性。在软件存储总线中利用了SMB 3.0提供的多通道及SMB直连技术,关于SMB多通道在本人的博文中介绍过,这个技术可以聚合多个链路用于提高整体带宽并实现透明故障转移;此外对我们实现跨节点连接更直接的核心技术就是SMB直连技术了,SMB直连利用了网卡(iWARP, RoCE或Infiniband)的RDMA直连,有了这个技术我们就可以通过高带宽低延迟的网络连接磁盘设备了,并且减少了对CPU的开销;可以简单的想象一下相当于通过这个直连网络构建的高速虚拟总线连接了跨节点的设备;记得两年前我就曾经参与了在微软技术大会2013上通过SMB直连技术实现秒级别的虚拟机在线迁移演示;当时这个技术的Windows Server 2012 R2中加以利用。


既然叫软件存储总线,那么其中必然有软件定义存储的含义存在;软件存储总线利用了公平连接算法防止某台服务器过渡使用磁盘造成其他服务器无法获得磁盘访问持续处于饥饿状态;而且提供了IO优先级优化算法,例如对于应用的IO优先级(如虚拟机)由于系统IO,当然该算法也要保证适当系统IO需要以避免对系统的影响;还有一个核心优化算法是可以聚合应用(虚拟机)的单独随机IO为聚合的顺序IO以优化对于传统机械硬盘的访问速度。


最后,软件存储总线在每个集群存储节点中都提供了存储总线缓存的缓存优化,这与上层的虚拟磁盘和存储池是无关的;属于底层优化。缓存磁盘为存储节点本地的固态盘,缓存存储通过跨节点镜像实现冗余;与之相对的是本地的大容量SATA机械硬盘作为数据存储盘,本地的数据存储盘以RR轮询的方式在本地缓存磁盘后端,如果缓存节点出现故障将会重新分配缓存磁盘。根据本地磁盘配置,缓存策略选择会有所差异,具体见下表。



储存配置

缓存设备

存储设备

缓存模式

SATA SSD + SATA HDD

所有SATA SSD

所有SATA HDD

读写

NVMe SSD + SATA HDD

所有NVMe SSD

所有SATA HDD

读写

NVMe SSD + SATA SSD

所有NVMe SSD

所有SATA SSD


软件存储总线配置创建的缓存设备会预留32GB存储空间用于上层存储池和虚拟磁盘的元数据创建;同时对于每个节点每TB数据会有10GB内存保留用于数据结构;所以在规划一个超融合结构的时候需要考虑这部分内存空间预留不能作虚拟机节点工作负载使用。