发明内容
本发明的主要目的为提供一种虚拟机读写请求处理的方法和装置,在存储访问异常时,能有效避免虚拟机系统崩溃。
本发明提出一种虚拟机读写请求处理的方法,包括步骤:
接收虚拟机操作系统输出的读写请求;
记录所述读写请求的相关信息,并发送所述读写请求至宿主机系统,由所述宿主机系统转发给存储服务器;
当接收到所述宿主机系统返回请求失败的响应,且请求失败的原因是可恢复型问题时,获取记录的所述读写请求的相关信息;
在可恢复型问题解决后,根据所述读写请求的相关信息,重新发送所述读写请求至宿主机系统,由所述宿主机系统转发给存储服务器。
优选地,所述在可恢复型问题解决后,根据所述读写请求的相关信息,重新发送所述读写请求至宿主机系统的步骤之前还包括:
当接收到所述宿主机系统返回请求失败的响应,且请求失败的原因是可恢复型问题时,控制所述虚拟机进入休眠模式,并发送提示消息至人机交互端,提示有可恢复型问题待解决;
在可恢复型问题解决后,唤醒所述虚拟机。
优选地,所述记录读写请求的相关信息,并发送所述读写请求至宿主机系统,由所述宿主机系统转发给存储服务器的步骤之后还包括:
当接收到所述宿主机系统返回请求失败的响应,且请求失败的原因是不可恢复型问题时,转发所述请求失败的响应至所述虚拟机操作系统,读写操作失败。
优选地,所述可恢复型问题包括网络中断、或未与所述存储服务器建立连接、或所述存储服务器正在重启、或所述存储服务器存储空间不足;
所述不可恢复型问题包括所述存储服务器的磁盘损坏。
优选地,所述记录读写请求的相关信息,并发送所述读写请求至宿主机系统,由所述宿主机系统转发给存储服务器的步骤之后还包括:
当接收到所述宿主机系统返回请求成功的响应时,转发所述请求成功的响应至所述虚拟机操作系统,所述虚拟机操作系统执行正常的读写操作。
本发明还提出一种虚拟机读写请求处理的装置,包括:
请求接收模块,用于接收虚拟机操作系统输出的读写请求;
记录模块,用于记录所述读写请求的相关信息;
请求发送模块,用于发送所述读写请求至宿主机系统,由所述宿主机系统转发给存储服务器;
记录获取模块,用于当接收到所述宿主机系统返回请求失败的响应,且请求失败的原因是可恢复型问题时,获取记录的所述读写请求的相关信息;
所述请求发送模块还用于,在可恢复型问题解决后,根据所述读写请求的相关信息,重新发送所述读写请求至宿主机系统,由所述宿主机系统转发给存储服务器。
优选地,所述虚拟机读写请求处理的装置还包括:
休眠模块,用于当接收到所述宿主机系统返回请求失败的响应,且请求失败的原因是可恢复型问题时,控制所述虚拟机进入休眠模式;
提示模块,用于发送提示消息至人机交互端,提示有可恢复型问题待解决;
唤醒模块,用于在可恢复型问题解决后,唤醒所述虚拟机。
优选地,所述虚拟机读写请求处理的装置还包括响应转发模块,用于当接收到所述宿主机系统返回请求失败的响应,且请求失败的原因是不可恢复型问题时,转发所述请求失败的响应至所述虚拟机操作系统,读写操作失败。
优选地,所述可恢复型问题包括网络中断、或未与所述存储服务器建立连接、或所述存储服务器正在重启、或所述存储服务器存储空间不足;
所述不可恢复型问题包括所述存储服务器的磁盘损坏。
优选地,所述响应转发模块还用于,当接收到所述宿主机系统返回请求成功的响应时,转发所述请求成功的响应至所述虚拟机操作系统,所述虚拟机操作系统执行正常的读写操作。
本发明的虚拟机进程在进行读写请求处理操作时,对于读写请求失败原因为可恢复型问题的情况,并不立即将操作结果发送给虚拟机操作系统,而是在可恢复型问题解决后重新提交请求,直至请求提交成功后,才将操作结果返回给虚拟机操作系统,确保了虚拟机操作系统持续维持正常工作,有效避免了系统崩溃或蓝屏的情况发生。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,图1为本发明虚拟机读写请求处理的方法的第一实施例的流程图。本实施例提到的虚拟机读写请求处理的方法,包括步骤:
步骤S10,接收虚拟机操作系统输出的读写请求;
本实施例可一并参照图7所示的虚拟机与存储服务器交互的结构示意图,本实施例的硬件结构可包括宿主机和存储服务器。宿主机为安装虚拟机软件的物理机,宿主机系统即宿主机上运行的操作系统,例如Linux;存储服务器是用于保存数据的服务器,例如nfs,iscsi等通过网络访问的共享存储。一台高性能的物理机可以运行多个虚拟机,每一个虚拟机都包含一个虚拟机进程,例如KVM进程,上面运行了一个对应的虚拟机操作系统,例如Guest机操作系统。虚拟机操作系统里面进行读写操作时,例如编辑word文档并且保存,需要将读写请求发送给虚拟机进程,然后由虚拟机进程提交给物理机的宿主机系统,例如Linux内核。
步骤S20,记录读写请求的相关信息;
在虚拟机进程将读写请求提交给宿主机系统之前,虚拟机进程还将读写请求的相关信息记录下来,记录的读写请求的相关信息可包括读写操作扇区、读写偏移信息和读写操作文件信息等,以便于在需要重新提交读写请求时,能够获取到准确的信息。
步骤S30,发送读写请求至宿主机系统,由宿主机系统转发给存储服务器;
虚拟机进程将已记录的读写请求发送至宿主机系统,由宿主机系统通过网络发送给对应的存储服务器。
步骤S40,当接收到宿主机系统返回请求失败的响应,且请求失败的原因是可恢复型问题时,获取记录的读写请求的相关信息;
存储服务器在接收读写请求后,向宿主机系统返回读写操作响应,如果读写请求接收失败,则宿主机系统会接收到存储服务器返回的读写请求失败的响应,或根据读写请求发送情况,自己生成一个读写请求失败的响应。宿主机系统将请求失败的响应返回给虚拟机进程,由虚拟机进程根据请求失败原因进行相应操作。
请求失败原因包括可恢复型问题和不可恢复型问题。不可恢复型问题包括存储服务器的磁盘损坏,可能需要更换新的磁盘,这种问题解决起来比较麻烦,耗费时间较长。而可恢复型问题可包括网络中断、或未与存储服务器建立连接、或存储服务器正在重启、或存储服务器存储空间不足等,这些问题在等待一段时间后可自动修复或经人工修复,例如网络中断的问题,可由网络监控相关人员修复网络,存储服务器正在重启的问题,在存储服务器重启完毕后可继续进行网络数据传输。
步骤S50,在可恢复型问题解决后,根据读写请求的相关信息,重新发送读写请求至宿主机系统,由宿主机系统转发给存储服务器。
对于可恢复型问题,由于只是短暂的数据交互阻碍,可在等待一段时间后重新提交请求。虚拟机进程可每间隔一段时间,根据读写请求的相关信息,重新构建读写请求,并发送给宿主机系统,进行间歇的尝试提交请求,直至请求提交成功;或在问题解决前暂不提交,在接收到宿主机系统发回的问题已解决的消息后,再向宿主机系统发送读写请求,以提高请求发送的成功率。虚拟机进程接收到宿主机系统返回的请求发送成功的响应后,才将操作结果返回给虚拟机操作系统,如此一来,对于虚拟机操作系统来说,并不知道底层发生过错误,虚拟机操作系统可以持续地维持正常工作,有效避免了系统崩溃或蓝屏的情况发生。
本发明的虚拟机进程在进行读写请求处理操作时,对于读写请求失败原因为可恢复型问题的情况,并不立即将操作结果发送给虚拟机操作系统,而是在可恢复型问题解决后重新提交请求,直至请求提交成功后,才将操作结果返回给虚拟机操作系统,确保了虚拟机操作系统持续维持正常工作,有效避免了系统崩溃或蓝屏的情况发生。
如图2所示,图2为本发明虚拟机读写请求处理的方法的第二实施例的流程图。本实施例以图1所示实施例为基础,在步骤S50之前还包括:
步骤S41,控制虚拟机进入休眠模式,并发送提示消息至人机交互端,提示有可恢复型问题待解决;
步骤S42,在可恢复型问题解决后,唤醒所述虚拟机。
本实施例对于请求失败的原因是可恢复型问题的情况,由于此时数据无法转发给存储服务器,此时虚拟机若继续工作,将会造成过多的数据堆积,进而产生错误的数据传输问题,因此,在遇到可恢复型问题时,暂时控制虚拟机进入休眠模式,中断与虚拟机之间的数据传输,在问题解决后,再重新唤醒虚拟机,恢复与虚拟机读写操作。同时,为了能够及时解决问题,可提供一个面向工作人员的人机交互端,虚拟机进程在发现问题时,根据问题类型生成提示消息,将提示消息发送给人机交互端,提示工作人员及时解决该问题。在发送提示消息时,如果人机交互端设置在虚拟机所在物理机内时,可由虚拟机进程直接发送给人机交互端,如果人机交互端设置在其他物理机或服务器上,虚拟机进程可将提示消息发送给宿主机系统,由宿主机系统将提示消息通过网络发送给人机交互端。由于增加了提示消息,能够及时解决可恢复型问题,尽早恢复读写操作,提高读写效率。
如图3所示,图3为本发明虚拟机读写请求处理的方法的第三实施例的流程图。本实施例以图1所示实施例为基础,在步骤S30之后还包括:
步骤S60,当接收到宿主机系统返回请求失败的响应,且请求失败的原因是不可恢复型问题时,转发请求失败的响应至虚拟机操作系统,读写操作失败。
当请求失败的原因是不可恢复型问题时,存储服务器的磁盘损坏,可能需要更换新的磁盘,这种问题解决起来比较麻烦,耗费时间较长,则直接将失败的响应返回给虚拟机操作系统,告知虚拟机操作系统当前存储服务器的磁盘已坏,不能继续执行读写操作,应及时更换存储服务器,以便于正常的读写操作,避免了虚拟机操作系统发生系统崩溃或蓝屏。
步骤S70,当接收到宿主机系统返回请求成功的响应时,转发请求成功的响应至虚拟机操作系统,虚拟机操作系统执行正常的读写操作。
对于读写操作成功的响应,虚拟机进程直接返回给虚拟机操作系统,虚拟机操作系统可执行正常的读写操作。
本实施例在读写请求失败时,对于可恢复型问题和不可恢复型问题采用不同的处理方式,确保了虚拟机操作系统持续维持正常工作,有效避免了系统崩溃或蓝屏的情况发生。
如图4所示,图4为本发明虚拟机读写请求处理的装置的第一实施例的结构示意图。本实施例提出的虚拟机读写请求处理的装置,包括:
请求接收模块10,用于接收虚拟机操作系统输出的读写请求;
记录模块20,用于记录读写请求的相关信息;
请求发送模块30,用于发送读写请求至宿主机系统,由宿主机系统转发给存储服务器;
记录获取模块40,用于当接收到宿主机系统返回请求失败的响应,且请求失败的原因是可恢复型问题时,获取记录的读写请求的相关信息;
请求发送模块30还用于,在可恢复型问题解决后,根据读写请求的相关信息,重新发送读写请求至宿主机系统,由宿主机系统转发给存储服务器。
本实施例可一并参照图7所示的虚拟机与存储服务器交互的结构示意图,本实施例的硬件结构可包括宿主机和存储服务器。宿主机为安装虚拟机软件的物理机,宿主机系统即宿主机上运行的操作系统,例如Linux;存储服务器是用于保存数据的服务器,例如nfs,iscsi等通过网络访问的共享存储。一台高性能的物理机可以运行多个虚拟机,每一个虚拟机都包含一个虚拟机进程,例如KVM进程,上面运行了一个对应的虚拟机操作系统,例如Guest机操作系统。虚拟机操作系统里面进行读写操作时,例如编辑word文档并且保存,需要将读写请求发送给虚拟机进程,然后由虚拟机进程提交给物理机的宿主机系统,例如Linux内核。
在虚拟机进程将读写请求提交给宿主机系统之前,虚拟机进程还将读写请求的相关信息记录下来,记录的读写请求的相关信息可包括读写操作扇区、读写偏移信息和读写操作文件信息等,以便于在需要重新提交读写请求时,能够获取到准确的信息。虚拟机进程将已记录的读写请求发送至宿主机系统,由宿主机系统通过网络发送给对应的存储服务器。
存储服务器在接收读写请求后,向宿主机系统返回读写操作响应,如果读写请求接收失败,则宿主机系统会接收到存储服务器返回的读写请求失败的响应,或根据读写请求发送情况,自己生成一个读写请求失败的响应。宿主机系统将请求失败的响应返回给虚拟机进程,由虚拟机进程根据请求失败原因进行相应操作。
请求失败原因包括可恢复型问题和不可恢复型问题。不可恢复型问题包括存储服务器的磁盘损坏,可能需要更换新的磁盘,这种问题解决起来比较麻烦,耗费时间较长。而可恢复型问题可包括网络中断、或未与存储服务器建立连接、或存储服务器正在重启、或存储服务器存储空间不足等,这些问题在等待一段时间后可自动修复或经人工修复,例如网络中断的问题,可由网络监控相关人员修复网络,存储服务器正在重启的问题,在存储服务器重启完毕后可继续进行网络数据传输。
对于可恢复型问题,由于只是短暂的数据交互阻碍,可在等待一段时间后重新提交请求。虚拟机进程可每间隔一段时间,根据读写请求的相关信息,重新构建读写请求,并发送给宿主机系统,进行间歇的尝试提交请求,直至请求提交成功;或在问题解决前暂不提交,在接收到宿主机系统发回的问题已解决的消息后,再向宿主机系统发送读写请求,以提高请求发送的成功率。虚拟机进程接收到宿主机系统返回的请求发送成功的响应后,才将操作结果返回给虚拟机操作系统,如此一来,对于虚拟机操作系统来说,并不知道底层发生过错误,虚拟机操作系统可以持续地维持正常工作,有效避免了系统崩溃或蓝屏的情况发生。
本发明的虚拟机进程在进行读写请求处理操作时,对于读写请求失败原因为可恢复型问题的情况,并不立即将操作结果发送给虚拟机操作系统,而是在可恢复型问题解决后重新提交请求,直至请求提交成功后,才将操作结果返回给虚拟机操作系统,确保了虚拟机操作系统持续维持正常工作,有效避免了系统崩溃或蓝屏的情况发生。
如图5所示,图5为本发明虚拟机读写请求处理的装置的第二实施例的结构示意图。本实施例在图4所示实施例的基础上,增加了以下模块:
休眠模块50,用于当接收到宿主机系统返回请求失败的响应,且请求失败的原因是可恢复型问题时,控制所述虚拟机进入休眠模式;
提示模块60,用于发送提示消息至人机交互端,提示有可恢复型问题待解决;
唤醒模块70,用于在可恢复型问题解决后,唤醒虚拟机。
本实施例对于请求失败的原因是可恢复型问题的情况,由于此时数据无法转发给存储服务器,此时虚拟机若继续工作,将会造成过多的数据堆积,进而产生错误的数据传输问题,因此,在遇到可恢复型问题时,暂时控制虚拟机进入休眠模式,中断与虚拟机之间的数据传输,在问题解决后,再重新唤醒虚拟机,恢复与虚拟机读写操作。同时,为了能够及时解决问题,可提供一个面向工作人员的人机交互端,虚拟机进程在发现问题时,根据问题类型生成提示消息,将提示消息发送给人机交互端,提示工作人员及时解决该问题。在发送提示消息时,如果人机交互端设置在虚拟机所在物理机内时,可由虚拟机进程直接发送给人机交互端,如果人机交互端设置在其他物理机或服务器上,虚拟机进程可将提示消息发送给宿主机系统,由宿主机系统将提示消息通过网络发送给人机交互端。由于增加了提示消息,能够及时解决可恢复型问题,尽早恢复读写操作,提高读写效率。
如图6所示,图6为本发明虚拟机读写请求处理的装置的第三实施例的结构示意图。本实施例在图4所示实施例的基础上,增加了响应转发模块80,用于当接收到宿主机系统返回请求失败的响应,且请求失败的原因是不可恢复型问题时,转发请求失败的响应至虚拟机操作系统,读写操作失败。
进一步的,响应转发模块80还用于,当接收到宿主机系统返回请求成功的响应时,转发请求成功的响应至虚拟机操作系统,虚拟机操作系统执行正常的读写操作。
当请求失败的原因是不可恢复型问题时,存储服务器的磁盘损坏,可能需要更换新的磁盘,这种问题解决起来比较麻烦,耗费时间较长,则直接将失败的响应返回给虚拟机操作系统,告知虚拟机操作系统当前存储服务器的磁盘已坏,不能继续执行读写操作,应及时更换存储服务器,以便于正常的读写操作,避免了虚拟机操作系统发生系统崩溃或蓝屏。对于读写操作成功的响应,虚拟机进程直接返回给虚拟机操作系统,虚拟机操作系统可执行正常的读写操作。
本实施例在读写请求失败时,对于可恢复型问题和不可恢复型问题采用不同的处理方式,确保了虚拟机操作系统持续维持正常工作,有效避免了系统崩溃或蓝屏的情况发生。
以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。