专利名称::内存-网络内存-磁盘高速可靠存储系统及其读写方法
技术领域:
:内存—网络内存—磁盘高速可靠存储系统及其读写方法属于计算机存储系统结构
技术领域:
。
背景技术:
:提高计算机系统应用的可靠性和执行效率是计算机领域研究的重要课题,其中牵涉到的技术问题集中在两个方面首先是提高应用程序可靠性的各种措施,这包括针对IO密集型与计算密集型应用的不同技术;另一个则是计算机存储系统的读写性能问题,包括内部存储系统的层次结构设计、各种不同的存储设备研制。但在传统的计算机应用环境中,这两方面性能的提高总是存在着相互矛盾的关系,这在很大程度上与当前计算机系统存储层次的不足有关。CPU,内存,磁盘是构成当前计算机处理与存储体系的三个主要层次,但各个层次的发展是不均衡的,根据Moore定律,CPU性能和内存容量每18个月就可翻一番。但是作为外存的主要设备——硬磁盘,由于机械运动的本质特征导致性能的提高非常有限,每年提高约7%,这一矛盾已日渐突出(硬盘的访问时间主要由数据定位,寻道与旋转延迟、数据读写组成,其中寻道与旋转指的是磁头移动到硬盘的相应位置以便进行数据访问。因为这两者是机械操作,其性能与数据定位与访问操作相差两个数量级以上,这就阻碍了磁盘访问性能的提高)。为缓和存储层次间的性能差异,最普遍的一种解决方案是将本机的一部分内存划分出来,作为磁盘缓冲存储器,从而来降低磁盘访问的延迟对系统性能的影响。因此,应用程序对磁盘的写操作实际上被转换化对缓冲存储器的写操作,而由操作系统根据系统运行状态适时地将这些数据写入磁盘。这样可以将多次的磁盘写操作简化成一次操作,从而减少磁盘访问次数,提高整体性能。这种写操作一般被称为异步写。但是这种方案对系统的可靠性带来了负面影响——一旦计算机出现故障,缓冲存储器的数据是必然丢失的,这就带来了数据可靠性与性能之间的矛盾。如数据库应用不得不牺牲性能而通过慢速的同步写(与异步写不同,同步写不使用缓冲存储器,而是直接将数据写入硬盘的相应位置后才算完成操作,因此性能很低,通常是异步写的百分之一或千分之一)将关键的日志数据写到磁盘。我们注意到,在处理器速度提升的同时,局域网络的带宽和传输速率也在飞速提升。因此,可以通过网络,利用远端的机器的内存来模拟本机内存,提高性能。远端的内存有以下几点优点首先,它的访问速度比本机硬盘要快。现在的网络传输速率已经达到了100Mbits/sec,在OC-3上的ATM155Mbits/sec的网络也很常见,甚至1000Mbits/sec的myrinet或者千兆以太网也已经出现,内存访问又非常的快,并且可以任意随机读写,没有硬盘寻道时间长这个致命的弱点。只要保证每次传输块的大小适当,完全可以保证速度上超过本机的硬盘。本项发明就是针对当前计算机存储体系结构中的问题,提出利用局域网络内部空闲结点内存来模拟本地资源,以达到同时提高数据处理效率与系统数据可靠性的目的。
发明内容本发明在于提供一种内存—网络内存—磁盘高速可靠存储系统及其读写方法,以便充分利用局域网条件下各个计算机结点的空闲内存资源,以同时提高网络忙碌结点的磁盘访问性能和应用可靠性,解决当前计算机存储结构层次中存在的问题。LND系统充分利用局域网内部的网络带宽与空闲结点上的内存资源,为I/O密集型应用程序——如WebServer和数据库事务处理服务,提供了一个高性能的分布式存储层次。其主要的创新点如下1.利用局域网内部空闲结点上的内存作为存储资源的扩展。2.提出利用组通信协议实现结点间通信的新思想,有效地提高了系统的效率和可靠性。3.采用了虚设备概念——LND系统将空闲结点的内存组织成一个虚拟磁盘设备,这样使用LND的忙碌结点计算机在把该虚设备映射到本地的某个目录之后,用户对该目录的读写会自动转换为对远端内存的读写,并且对于应用程序是完全透明的。本发明所述的系统,其特征在于它是通过网络,利用远端的机器的内存来模拟本机磁盘以同时提高数据处理效率与系统数据可靠性的一种高性能分布式存储系统(LND),它含有LND客户端它是一个通过运行应用程序来使用空闲结点计算机空闲资源的忙碌结点计算机;LND服务器它是多个提供本地资源即本地内存的较空闲结点计算机;上述LND客户端和LND服务器由百兆或十兆以太网互联。本发明所述方法的特征在于它利用空闲结点计算机的内存组成一个虚拟磁盘设备,忙碌结点计算机把该虚设备映射到本地的某个目录,并使客户端对该目录的读写自动转换为对远端空闲结点计算机内存的读写,它依次含有如下步骤(1),启动远端的LND_Server程序,根据预先设定的大小在本地分配一块内存在其上建立具有默认格式的文件系统,然后等待客户端发来的读写请求;(2),启动客户端地LND_Client程序,它根据预先设定的配置,向LND_Server发送注册请求,取得在该空闲结点共享的内存大小等信息,进行身份认证;(3),LND_Server进行自身初始化;(4),用LND_Client进行LND虚拟磁盘设备初始化,形成一个文件目录;(5),接着客户端LND_Client是用与一般文件系统完全一致的系统调用对LND虚拟磁盘设备进行操作;(6),当LND虚拟磁盘设备收到客户端发出的命令时,对目的地址进行寻址,找到和目的地址对应的LND服务器;(7),LND_Client通过自定义的可靠的组播协议把数据读入相应的服务器,同时用异步读写模式写入本机的磁盘作为本地备份;(8),当受到LND的确认信息之后,系统调用返回。所述的组播协议依次含有如下步骤在客户端(1),LND_Client收到写命令之后,查找写入的扇区属于哪个服务器,把顺序号Sequence和上次收到确认后的服务器编号,写入地址信息以及数据内容发送到该组的组播地址;(2),再把文件内容异步写入本地硬盘作备份;并等待服务器确认;(3),收到本组任何一个服务器发出的对本次序号的确认后,LND_Client返回;(4),否则重传;(5),重传一定次数还未收到确认消息把本地硬盘写入改为同步模式;在服务器端(1),在每台LND_Server进程启动后,加入服务器自己所属组的组播地址,并开始接收数据;(2),若接收数据的序号Sequence为上次接收顺序号LastSeq+1,则直接把本次顺序号确认,重发回客户端;(3),若Sequence>LastSeq+1,便向LastServer服务器索要以LastSeq+1到Sequence-1这些未收到的数据,最好返回确认;所述的备份是分组镜像的冗余式远端备份。本发明与作为存储器用的SCSI(小型计算机系统接口)设备的同步写性能相比较,在100M以太网的连接环境下,LND是SCSI得写性能的3-8倍;在10M以太网环境下,前者也是后者的1.5-3倍。图1,本发明所述的系统的结构图,即LND系统模型。图2,本发明所述系统的流程框图。具体实施例方式LND系统由一个LND客户端(也即使用空闲资源的忙碌结点)和多个LND服务器(提供本地内存的较空闲结点)组成,LND服务器与客户端由百兆或十兆以太网互联。用户的应用程序运行在LND客户端,通过访问客户端上的LND设备来获得磁盘同步写操作的高性能和高可用性。LND设备是以一个虚拟的块设备形式提供给用户的。块设备的优点是接口完全透明,用户对块设备的操作和对普通硬盘的操作完全相同,可以对其进行分区,格式化,并在上边建立任意的文件系统。这样透明的接口能够保证用户的应用程序不加任何的改动就能获得LND系统的所有优点。整个LND设备的地址空间是由系统的配置和LND服务器所贡献的内存大小决定的。当系统需要更高的可用性时,可以选择将两个或更多LND服务器组成镜像模式互相备份,而当系统需要更多的空间和性能的时候,则可以去除镜像模式,提高速度和容量。整个LND系统的运行环境由计算机结点、网络与LND软件三者构成。所支持的网络为10M/100M/1000M以太网;支持的计算机结点数从2到128不等;同时LND软件分成客户端与服务器端两种,分别称为LND_Client与LND_Server。一个最简单的LND系统配置可以由两台联网计算机构成,其中一台运行LND_Server提供空闲内存;一台运行对磁盘性能要求较高的应用,其利用LND_Client使用这些内存。整个LND系统的运行过程如下首先启动LND_Server,其根据预先设定的大小在本地分配一块内存,并在其上建立文件系统(默认格式为ext3),然后等待客户端发来的请求。LND_Client启动后,根据预先设定的配置,向LND_Server发送注册请求,取得该结点上共享出来的内存大小等信息,并进行身份认证。LND_Server进行自身的初始化,建立相应的数据结构。LND_Client进行LND设备的初始化,其在本级用户看来就是增加了一个文件目录,对此目录的访问将自动转换为对LND_Server上共享内存的访问。具体的访问流程如下首先客户端上的应用程序使用与一般文件系统完全一致的系统调用对LND设备进行操作。当LND设备收到用户发出的命令时,首先对目的地址进行寻址,找到和目的地址对应的LND服务器。其次LND_Client通过我们自定义的可靠的组播协议,将数据传送到相应的服务器,同时采用异步写模式写入本机的硬盘。当收到LND服务器的确认信息之后,系统调用返回。当然在这种最简单配置下,系统的可靠性是得不到保证的LND服务器一旦出现故障,数据也会丢失。LND系统提供了分组镜像和本地备份的方式来实现系统的可靠性。镜像是最简单实用的冗余方式。这种模式下,我们先把所有的LND服务器分成n组,每个组分别映射到LND设备的不同地址空间。假设每个组有m台机器,则这m台机器互相做镜像备份。需要指出的是,上面所指的机器实际上是逻辑上的概念,并不一定必须有m*n台机器,空闲内存多的机器可以运行多个LNDDaemon进程。当然,同组的服务器必须在物理上做到分布,这样才能保证可靠性。这样,LND_Client对LND_Server的写操作就转变为同时对m个处于同组的LND服务器的写操作,即进行数据备份。为减少写数据的网络传送开销,LND利用了Multicast机制,在不可靠的UDP协议基础上,建立了自己的可靠组通信协议,完成数据传送。由于在Multicast中数据发送是“并行”的,无需对同组的服务器分别发送,因此减少了发送时间。镜像的另一个优点是可用性较高。当一个服务器组中的任何一台机器出现故障之后,系统仍然可以在不降低性能的前提下继续运行。通信协议保证了在绝大多数时间内镜像数据的一致性,并保证在任意时刻,LND设备上的每块数据至少保存在两台机器的内存中。这样的可靠性足以满足绝大多数应用程序的要求。表2列出了系统可能遇到的故障类型以及LND系统相应的容错能力。前三种故障不影响数据的可靠性,并且重构时间很短。对于第四种情况,假设每台机器平均每周崩溃一次,每组服务器有两台机器,那么客户端和所有服务器同在同一分钟内一起崩溃的时间间隔大约为200万年,可以认为这种情况不会出现。表1.LND系统容错能力表LND的客户端是一个块设备驱动程序和一个后台用户层进程,它处理了所有的针对LND虚设备的输入输出,并将这些请求传送到服务器端的LND_Server中。同时客户端采用了我们自己设计的简单的组通信协议。为了叙述方便,假定LND系统中的服务器共n组,并且每组的服务器个数为m。每个组拥有一个组播地址。客户端的LND_Client收到写命令之后,首先查找出写入的扇区属于哪个组,把顺序号seq,上次收到确认的服务器编号,写入地址信息以及数据内容发送到该组的组播地址。对于每个组来说,顺序号是唯一且递增的,它标识着该组每一次写操作。然后,将内容异步写入本地硬盘,并等待LND服务器的确认。当收到本组任何一个服务器发送来的对本次顺序号seq的确认之后,LND_Client即可成功返回。如果超过一定时间仍未收到确认信息,则认为丢包并重传数据。重传次数超过一定次数仍未收到任何确认则认为本组所有服务器均发生故障,将本地硬盘写入改为同步模式,待本次数据写入磁盘后返回。在服务器端,每台的LND_Server进程启动之后首先加入自己所属组的组播地址,并开始接收数据。如果数据接受数据的顺序号seq为上次接收顺序号lastSeq加1,则表示没有丢包,直接将本次顺序号进行确认发回客户端。如果seq>lastSeq+1,那么就向LastServer索要从lastSeq+1到seq-1这些未收到的数据。最后返回确认。LND的源程序由三部分组成。LND_Daemon,LND_Client和LND_Server。其中LND_Daemon和LND_Client运行在客户端,LND_Server运行在服务器端。LND_Client是设备驱动程序,可以编译成module动态的加入内存执行。其中实现了设备驱动程序所必须的lnd_request(),lnd_release,lnd_ioctl(),lnd_open(),lnd_fops(),lnd_init(),init_module(),clean_module()。它将捕获用户对NRD虚设备所有的读写控制等操作,并将其发送到LND_Daemon。后者是是运行在用户态的客户端进程,由于在核心态能够调用的函数非常有限,功能实现比较复杂,也容易出错,所以LND把和网络有关的功能在LND_Daemon中实现了。这可以最大限度的减少操作系统移植时需要的改动,并且避免对操作系统核心代码的修改。我们用socket实现了组通信协议,并且实现了以下几个函数restore_lnd_server()功能将崩溃的服务器中的数据恢复;lnd_cleaner()功能冗余清除;lnd_malloc()功能分配内存,如果发生错误则返回错误代码;lnd_client_sighandler()功能捕获SIGINT信号,进行清除工作;LND_Server是运行在服务器端的进程,运行时处于用户态。其中最主要的函数就是handle_request(),主要处理以下几个事件NRD_REQ_BLOCK_WRITE客户端的写请求NRD_REQ_BLOCK_READ客户端的读请求NRD_REQ_STATS获取服务器端的内存使用情况NRD_REQ_STOP_SERVER停止网络内存服务。在三台PII400、内存为256兆的,配置有SCSI硬盘的,以100M网络以太网互连的结点机上搭建了LND系统,三台节点均运行RedhatLinux6.2。其中一台作为客户(运行LND_Client),另两台作为服务器(运行LND_Server,采用服务器镜像方式)。在客户端上运行Lmbench(C.Staelin,lmbenchPortableToolsforPerformanceAnalysis,USENIXAnnualTechnicalConference.1996)测试程序(用以测试设备的块写入性能),分别在本地磁盘目录与LND虚设备的加载目录中进行10000次数据块同步写入操作,数据块的大小分别为1K、2K、4K、8K,(表2),从而比较SCSI设备与LND虚设备的同步写性能。从表中可以看出,在100M以太网的连接环境下,LND的写性能是SCSI的3~8倍;而即便在10M以太网环境下,前者也是后者的1.5~3倍。表2.LND设备的同步写性能权利要求1.内存—网络内存—磁盘高速可靠存储系统,其特征在于它是一种分布式存储系统,缩写为LND,它含有LND客户端它是一个忙碌的计算机结点;LND服务器它是多个具有本地空闲内存的结点计算机;上述LND客户端和LND服务器由百兆或十兆以太网互联。2.内存—网络内存—磁盘高速可靠存储系统的读写方法,其特征在于它利用空闲结点计算机的内存组成一个虚拟磁盘设备,而忙碌结点计算机把该虚拟磁盘映射到本地的某个目录,并使客户端对该目录的读写自动转换为对远端空闲结点计算机内存的读写,它依次含有如下步骤(1),启动远端的LND_Server程序,根据预先设定的大小在本地分配一块内存,在其上建立具有默认格式的文件系统,然后等待客户端发来的读写请求;(2),启动客户端的LND_Client程序,它根据预先设定的配置,向LND_Server发送注册请求,取得在该空闲结点对外提供共享的内存大小信息,进行身份认证;(3),LND_Server进行自身初始化;(4),用LND_Client进行LND虚拟磁盘设备初始化,形成一个文件目录;(5),接着客户端LND_Client使用与一般文件系统完全一致的系统调用对LND虚拟磁盘设备进行操作;(6),当LND虚拟磁盘设备收到客户端发出的命令时,对目的地址进行寻址,找到和目的地址对应的LND服务器;(7),LND_Client通过可靠的组播协议把数据读入相应的服务器,即数据在服务器端的存储采用的是分组镜像的冗余式远端备份;同时用异步读写模式写入本机的磁盘作为本地备份;(8),当收到LND服务器的确认信息之后,系统调用返回。3.根据权利要求2所述的内存—网络内存—磁盘高速可靠存储系统的读写方法,其特征在于所述的组播协议依次含有如下步骤在客户端(1),LND_Client收到写命令之后,查找写入的扇区属于哪个服务器,把顺序号Sequence和上次收到确认后的服务器编号,写入地址信息连同数据内容发送到改组的组播地址;(2),再把内容写入本地硬盘作备份;并等待服务器确认;(3),收到本组任何一个服务器发出的对本次序号的确认后,LND_Client返回;(4),否则重传;(5),如果重传一定次数还未收到确认消息,就把本地硬盘写入改为同步模式;在服务器端(1),在每台LND_Server进程启动后,加入服务器自己所属组的组播地址,并开始接收数据;(2),若接收数据的序号Sequence为上次接收顺序号LastSeq+1,则直接把本次顺序号确认,重发回客户端;(3),若Sequence>LastSeq+1,便向LastServer服务器索要从LastSeq+1到Sequence-1这些未收到的数据,最后返回确认。4.根据权利要求2所述的内存—网络内存—磁盘高速可靠存储系统的读写方法,其特征在于所属的默认格式为ext3。全文摘要内存—网络内存—磁盘高速可靠存储及其读写方法属于计算机存储系统结构
技术领域:
。其特征在于它是通过网络,利用远端机器的内存来模拟本机硬盘以同时提高数据处理效率与系统数据可靠性的一种高性能的分布式存储系统,简称为LND。它含有一个客户端,即忙碌的结点计算机;多个服务器,它们是提供本地内存的较空闲结点计算机,两者经以太网互联;LND系统把空闲结点的内存组成一个虚拟磁盘,而客户端把它映射到本地的某个目录,以便把该目录的读写自动转换成对远端内存的读写;它还用组通讯协议实现结点间通讯。它的同步写操作性能优于把SCSI硬盘做磁盘的系统。文档编号G06F12/00GK1564517SQ20041000346公开日2005年1月12日申请日期2004年3月26日优先权日2004年3月26日发明者郑纬民,张悠慧,毛昀申请人:清华大学