摘要:网络磁盘阵列将传统的以服务器为中心的存储转发改变为以数据为中心的直接传输, 从而消除了传统模式下的服务器I/O瓶颈。本文基于网络磁盘阵列构建出一种高性能的海量存储系统, 其文件集中管理和数据分布存储的体系结构不仅加快了数据传输速度、降低了存储管理开销, 同时也实现了命令与数据分流、扩容与增速同步的目标, 从而大大提高的整个存储系统的性能。
关键词:网络磁盘阵列;海量存储;文件集中管理;数据分布存储
引 言
现代信息技术的飞速发展, 导致了用户对存储产品和存储服务需求的爆炸性增长。目前计算机存储系统的性能远远不能满足许多实际应用的需求, 因而如何建立高性能的存储系统成为人们关注的焦点, 海量信息存储技术旨在研究大容量数据存储的策略和方法, 其追求的目标在于扩大存储容量、提高存取速度、保证数据的完整性和可靠性、加强对数据(文件) 的管理和组织等。
网络磁盘阵列系统(Net-RAID) 采用存储设备直接联网的体系结构, 改变了传统的以服务器为中心的迂回传输模式,使所有网络请求由服务器统一管理, 而数据则由磁盘阵列直接通过网络接收和发送, 从而避免了数据流在服务器与存储设备之间的往返传送和存储转发, 消除了服务器中CPU、内存以及I/O 总线所存在的潜在瓶颈, 极大的提高了系统带宽和服务器的平均响应速度。
以此网络磁盘阵列作为基本单元, 本文构建出一种高性能的海量存储系统, 其文件集中管理和数据分布存储的体系结构不仅加快了数据传输速度、降低了存储管理开销, 同时也实现了命令与数据分流、扩容与增速同步的目标, 从而大大提高了整个存储系统的性能。
CMDS海量存储系统总体设计
传统的集中式存储体系结构下, 网络用户访问文件服务器上的数据资源时, 数据必须在存储设备和文件服务器之间进行多次的存储转发。因此, 服务器的CPU、主存、存储设备、主从通道都有可能成为系统的瓶颈。而且, 无法实现共享存储, 系统的可扩展性也受到很大的限制。采用具有新型I/O通道体系结构的存储系统可以极大地提高性能, 但一味地依靠扩展系统的硬件性能终究会有上限。因此, 传统存储系统体系结构虽可提供大的存储容量, 但不适合于构造海量存储系统。构造一个高性能的海量存储系统不仅需要极大的存储容量和高I/O带宽, 还必须具有高可扩展性、高可用性、可管理性以及低的价格。
采用分布式存储系统结构是实现海量信息存储的最好选择。将数据分割(比如说块)分别存放在不同的存储设备上, 利用对不同存储设备的并行操作来提高系统的性能。但分布式系统的存储管理存在很大的难度, 统计数据表明, 在分布环境下, 存储管理大约要消耗存储成本总额的55%。集中式的存储则能减少管理开销和提高管理质量。可见, 如果采用集中式的存储管理, 特别是对于海量存储系统中大量的存储资源的管理, 将可以极大地降低存储管理的开销。
显然, 要想解决海量信息的有效存储和管理, 必须构造一种全新的存储系统体系结构, 从根本上解决现有存储系统体系结构所存在的问题。
针对这种情况, 本文提出了一种文件集中管理、数据分布存储的高性能海量存储系统(centralized file Managementand Dist ributed data StorageMass Storage System ) CMDSMSS, 其体系结构如图1所示, 它同时具备集中式存储系统和图1CDMS海量存储系统体系结构图分布式存储系统两者的优点。该系统由文件服务器和多台网络磁盘阵列(Net-RAID) 构成, 所有的N et-RAID按传统的DAS方式通过外设通道(SCSI或FC, 也可以采用网络通道)挂接在文件服务器上, 然后再通过网络连接挂接在包交换网络上。 通过建立磁盘阵列与网络用户间的直接联系, 使得磁盘阵列的命令与数据分流, 免除了数据流在文件服务器与磁盘阵列之间的存储转发, 克服了原有系统的文件服务器瓶颈。如果在文件服务器上接入多台(理论上可多达90台)Net-RAID, 则每接入一台Net-RAID 便扩展了一个网络通道, 多个网络通道可以并行传输以提高系统的I/O带宽, 实现了容量和速度同步扩展。种体系结构充分体现了多通道、并行处理的原则, 它不仅在很大程度上解除了I/O操作对文件服务器性能的束缚, 也极大地提高了存储系统的整体性能。 同时,它的集中数据管理方式能节约大量的管理费用。
CMDS海量存储系统的文件组织可以分成两种形式:
(1)Net-RAID作为独立的存储单元, 每台Net-RAID在文件服务器上具有单独的目录节点, 每个节点上可以建立不同的文件系统, 存储不同类型的文件(如视听、文本等), 并各自处理用户数据的存取和网络传输。当网络用户对不同的目录结点发出请求时, 多个请求可以在多个阵列上并行服务。
(2) 多个Net-RAID节点上的存储空间被虚拟成一个存储空间的单一逻辑视图, 数据分块存放在多个存储节点上。随着存储节点的增加, 不仅系统的存储容量得到了扩大, 而且有助于提高系统的性能。具体来讲, 多个小数据量的请求, 可以由多个存储节点并行地独立完成, 从而提高系统的吞吐量。一个大数据量的请求, 数据分布在多个存储节点上, 多个存储节点并行操作, 可以提高单个请求的数传率。灵活的使用方式可以满足不同的使用环境, 既可以满足事务处理等多个小数据量的突发请求, 也可以满足大数据量的连续请求(如媒体流)。我们主要研究第二种文件组织形式, 它具有以下特点(如图2所示)。
(1) 独立的文件组织管理器
文件组织管理器负责监视文件组织系统中的所有操作,并为网络用户提供数据描述。当一个网络用户试图存取数据时, 它通过数据表示向文件组织管理器发出请求, 文件组织管理器启动它的存取控制机制判断该网络用户是否有存储这一数据的权限, 然后再检查是否有其他用户锁定这一数据。如果网络用户不能存取数据, 文件组织管理器就会向网络用户发出拒绝或错误信息。如果网络用户拥有存取权限并没有被文件锁定拒绝, 文件组织管理器就通过数据结构判断数据的网络地址(即数据所在的存储节点在CMDS海量存储系统中的位置, 因为数据位置不仅仅是逻辑块地址, 还包括附加的网络地址或存储节点的名称) 和存储位置, 然后将其传送到网络用户。网络用户接收到位置信息后重新组织数据结构, 然后通过网络通道直接与存储子系统交互并存取数据。此时既可以采用基于NFS或CIFS的文件I/O进行交互, 也可以采用基于SCSI协议或FC协议的块I/O进行交互。独立的文件组织管理器体现的就是一种集中管理的思想, 以便于降低管理开销提高管理质量。
(2) 分布式的数据结构和数据存储
在网络存储系统的文件组织系统中, 寻址模式决定了网络地址及存储地址的存储位置。CMDS海量存储系统中的数据结构和数据分布存储在存储系统中的多个存储节点上, 所有使用该系统的网络用户都使用同一个文件组织系统映像。该系统通过使用数据结构来实现这种映像, 其数据结构将所有存储节点的网络地址作为数据寻址运算法则的一部分。由于采用分布式的数据结构和数据存储, 该系统可以使用RAID算法在存储系统中处理文件组织和数据冗余。 因此,它采用分块技术将目录数据、文件数据和数据结构跨越存放在多个存储节点上。由于文件数据分块冗余存放在多个存储节点上, 使得存储系统中的某一个存储节点发生错误时仍然可以继续操作。 同时, 通过增加存储节点的数量, 可以在系统结构上增加物理数据通道的并行度来提高系统的性能。
文件I/O与块I/O
图3 表示来自网络用户的文件I/O与块I/O在目标设备上的数据流向。 对于文件I/O的目标设备而言,Linux中的虚拟文件系统(VFS)分别管理向网络用户提供文件共享的网络文件系统和控制本地存储设备上的数据组织的本地磁盘文件系统。当用户空间的应用程序接收到来自网络用户的文件I/O请求时, 会将其交给VFS, 并由VFS 找到相应的磁盘文件系统, 然后由磁盘文件系统通过查找索引结点信息将文件I/O请求转换成块I/O, 最后通过卷管理器和块设备驱动程序来访问相应的数据。对于块I/O的目标设备, 可以不需要任何文件系统, 因为来自网络用户的块I/O请求本身就包含了请求数据在目标设备上的块地址信息(此即文件组织系统中的数据结构) , 因此, 当该设备通过TCP/IP协议栈接收到网络用户的I/O请求后, 可以直接将该I/O请求转交给卷管理器, 然后通过磁盘的设备驱动程序就可以访问相应的数据。
由上面的分析以及图3可知, 块I/O相对于文件I/O避免了用户空间和系统空间的切换, 避免了所有的I/O请求及其数据穿越网络文件系统、虚拟文件系统以及本地磁盘文件系统的开销, 同时还避免了磁盘文件系统将文件I/O转换成块I/O时查询索引结点的开销。因此, CMDS海量存储系统图4CMDS海量存储系统软件结构采用块级I/O, 直接通过数据的物理地址信息来访问存储设备(Net-RAID群) , 使数据检索与访问的速度优于采用文件I/O时的速度。
CMDS海量存储系统的软件结构与工作流程
CMDS海量存储系统软件结构如图4所示。它的主要功能是实现服务器、海量存储系统和客户端三者之间的通信和协同。CMDS软件可以分为三个层次:通道控制层、命令控制层和网络通讯层。
分为驻留服务器的和驻留在Net-RAID群底层的通道控制器。这一层负责服务器与Net-RAID群间的命令和控制信息的传递。
服务器中的通道控制器用于建立服务器与Net-RAID群的命令通道。在传统的存储服务模式下, 它将上层系统解析后的所有I/O命令发至存储设备, 并接受存储设备执行后的返回结果。而对于CMDS海量存储系统, 驻留在服务器中的通道控制器只执行其中涉及控制文件系统结构和文件属性的I/O任务; 并且, 服务器端的通道控制器直接利用服务器现有的SCSI通道驱动程序。Net-RAID群中的通道控制器, 负责接收来自服务器主从外设通道的所有I/O命令和消息, 将执行结果回送给服务器。
命令控制层
这一控制层是该海量存储系统的核心层。它分为服务器中的命令解析器和Net-RAID 群中的命令执行器两部分。主要用于解析网络用户的I/O请求, 获得文件所在磁盘阵列的位置信息和文件数据的存储地址组, 实现请求服务。驻留在服务器端的命令解析器由用户请求处理、地址解析、访问控制等模块组成, 它根据记载的用户信息, 对用户请求进行认证, 判定其合法性和请求权限, 依据请求的类型分别处理。对于用户的文件读写请求, 经地址解析后生成相应的存储地址信息。地址解析完成后, 将用户授权通过通道控制层通知Net-RAID群, 将授权字、Net-RAID 群地址和数据存储地址组通过网络通讯层通知客户端。
驻留在Net-RAID群中的命令执行器由I/O调度、命令分解/合并、Buffer管理等模块组成, 按照一定的优化策略, 动态的对来自外设通道和网络通道的I/O命令进行分解、合并和调度, 执行实际的磁盘I/O操作。操作完成后, 依据不同的情况分别经由网络通信层与客户交换文件数据, 或者经由通道控制层给服务器回送执行结果。
网络通讯层
此层用以处理多个节点的命令和数据的网络传输。服务器端的网络通讯层接受客户的服务请求, 传送给命令控制层并将命令控制层的分析结果反馈给客户端; 客户端的网络通讯层负责向服务器提交请求并接收服务器返回的结果, 它还负责建立与Net-RAID 群的网络连接;Net-RAID 群的网络通讯层与客户端一起, 完成Net-RAID 群与客户端之间直接传送数据的任务。
由于命令与数据分流, CMDS海量存储系统采用定制的三方协议, 其文件请求服务的工作流程有别于传统的工作模式。图5所示为读文件请求的工作流程, 写文件请求的工作流程与此类似, 此处略。
为了获得CMDS海量存储系统的性能参数, 我们构造了一个系统原型, 由文件服务器和两台EIDE磁盘阵列组成, 系统配置如表1所示。每台磁盘阵列配2块磁盘, 分别挂接在两个IDE接口上。网络环境为
网络用户采用三台PC机, 配置均为:CPU:Celeron 2GHZ,MEM:128MB, 硬盘:ST
表2表示三个用户, 每个用户一个进程, 测试文件大小为124MB时系统的平均数传率比较。图6为多用户系统的集合I/O带宽比较。可见, CMDS海量存储系统的平均数传率和集合I/O带宽均高于传统的存储系统, 而且, 用户数越多, 性能提高越明显。最好情况下, 系统的读写集合I/O带宽分别提高82%和107%。由于CMDS海量存储系统的两个存储结点提供了两个
CMDS海量存储系统中, 文件服务器上CPU和内存的开销也明显要低于传统系统, 主要是由于CMDS海量存储系统实行了命令与数据分流, 避免了大量的数据在存储结点和文件服务器之间的往返拷贝, 将高性能的存储设备和网络带宽充分提供给网络用户, 而不被传统文件服务器瓶颈所限制。
从表2可以发现, 两个系统的内存的利用率几乎都在80%以上, 这主要是由于Linux系统的内存管理采用贪婪调度算法, 它尽量将内存分配给系统使用, 不够时再进行调度和再分配。因此, 即使传统系统中内存的利用率一直在97%左右, 在当前的负载情况下, 内存也不会成为系统的瓶颈。传统系统中网络的集合带宽几乎达到峰值, 很明显, 网络通道成为整个系统的瓶颈, 如果提高网络通道的带宽, 文件服务器上的内存就很有可能成为系统的瓶颈。CMDS海量存储系统中由于采用了两个网络通道, 在当前的负载情况下, 应该还有提升的空间, 而且其内存的利用率也还没有达到饱和。
随着体系结构和系统硬件的改变, 系统的瓶颈总是在不断转移。我们曾做过这样的试验, 服务器采用PIII500MHZ的CPU, 64MB内存, SYM
当使用峰值带宽为40MB/s的SYM
表3表示三个用户, 每个用户两个进程, 测试文件大小为124MB时系统的平均数传率比较。图7表示同等测试环境下系统的集合I/O带宽。在两个进程和四个进程的情况下,CMDS海量存储系统的集合带宽比传统系统要略差, 主要是由于网络用户和多个存储节点之间直接进行数据交换, 必须要在网络用户端进行数据的整合和分配, 因此存在一定的开销。在网络用户端单进程的情况下, 该影响还不明显, 但多个进程之后, 会导致系统性能的下降。当三个用户六个进程时,传统系统由于受文件服务器上网络通道带宽的限制, 其性能又明显低于CMDS海量存储系统。如果对网络用户端的软件进行优化(比如减少内存拷贝的开销), 则可以降低其影响。
总 结
CMDS海量存储系统使文件服务器与存储设备的关系由原来的主从关系转变为相互依存的对等关系, 并且存储设备具有了新的自主功能。其文件集中管理、数据分布存储的体系结构同时具有集中式存储和分布式存储两者的优点, 不仅易于管理, 而且高性能、高可扩展。它还具有存储空间的单一逻辑视图、流水命令响应与并行数据I/O、负载动态迁移和高可用性等特点。
另一方面, CMDS海量存储系统也是一个全新的、不断完善的系统;今后研究的重点包括以下几个方面的内容:首先,设法屏蔽上层各种不同的应用, 实现该系统与现有存储系统的无缝连接;其次, 实现存储空间的在线动态扩容、数据的动态迁移等是今后需要研究的课题;另外, 如何保证在传输过程中的数据安全以及数据的一致性也是一个待解决的问题。