防高可用切换时读写异常的nfs服务端控制方法及装置与流程

文档序号:38025175发布日期:2024-05-17 12:59阅读:8来源:国知局
防高可用切换时读写异常的nfs服务端控制方法及装置与流程

本发明涉及nfs(network file system,网络文件系统)网络存储,尤其涉及一种防高可用切换时读写异常的nfs服务端控制方法及系统。


背景技术:

1、nfs包括客户端、服务端和存储端,通常分别分布在不同的服务器上,彼此通过网络连接。读写过程中,若服务端出现故障,都会导致应用数据无法读写文件。为了保证文件系统中服务端的可靠性,通常会使用多台服务器加上keepalived、haproxy等技术配置高可用的服务端。利用高可用的服务端,若正在提供服务的服务端节点出现故障,通过自动将服务切换到其他节点,保证文件系统的可用。但是对于配置高可用的服务端,在服务端进行高可用切换、启动服务之前,需要连接存储端、检查存储端是否可正常读写和挂载存储端文件系统,然后再启动服务,之后服务端会进入一段宽限期,宽限期结束后才能正常读写文件,使得在服务端高可用切换时会存在服务端不可用的一段时间,这段时间内若客户端读写文件就会出现i/o中断或客户端卡死,导致客户端应用无法读写文件或者丢失数据。

2、针对于上述技术问题,现有技术中通常是当服务端出现故障后,客户端阻塞一段时间等待服务端恢复,该类方法可以阻止i/o中断,但超过阻塞时间后若服务端仍然未恢复,那么仍然会出现i/o中断的情况,若一直阻塞,则仍然会导致客户端文件系统卡死或应用程序业务数据丢失。即便考虑在一个nfs文件系统中的服务端配置主备服务,通常都是将一个客户端连接一个服务端,即先将客户端连接至主服务端,当主服务端发生故障后,再将客户端重连到备服务端,将客户端从主服务端重连到备服务端的过程中仍然会造成客户端阻塞一段时间进而可能会出现i/o中断、客户端文件系统卡死或应用程序业务数据丢失等情况。


技术实现思路

1、本发明要解决的技术问题就在于:针对现有技术存在的技术问题,本发明提供一种实现操作简单、可靠性高的防高可用切换时读写异常的nfs服务端控制方法及系统,能够防止nfs服务端高可用切换时客户端读写异常以及业务中断,提升文件系统的可靠性。

2、为解决上述技术问题,本发明提出的技术方案为:

3、一种防高可用切换时读写异常的nfs服务端控制方法,步骤包括:

4、将原始nfs文件系统作为主文件系统,配置一个独立的nfs文件系统作为备文件系统并指定所述备文件系统的服务端地址和导出目录;

5、当需要完成客户端的文件或目录操作时,判断主文件系统的运行状态以及高可用切换状态,根据状态判断结果控制启动所述主文件系统和/或备文件系统执行操作,其中当所述主文件系统服务端正常运行不需要进行高可用切换时,控制仅由所述主文件系统执行读取类型操作,以及同时由所述主文件系统、备文件系统执行修改类型操作;当判断到主文件系统出现异常时进行高可用切换,断开所述主文件系统,并启动所述备文件系统执行所需操作。

6、进一步的,配置主文件系统、备文件系统前还包括挂载主文件系统、备文件系统的步骤,包括:

7、客户端挂载所述主文件系统时,输入配置参数以指定备文件系统的服务端地址和导出目录;

8、客户端内核模块解析输入的所述配置参数,获取备文件系统的服务端地址和导出目录,以及挂载备文件系统所需的参数;

9、客户端内核模块通过调用指定版本的nfs模块的try_mount函数指针挂载主文件系统;

10、若主文件系统挂载成功,继续调用try_mount函数指针挂载备文件系统,如果挂载失败则结束挂载过程;

11、若备文件系统挂载成功,将主文件系统、备文件系统的目录项dentry提交给主备文件系统管理模块以进行管理。

12、进一步的,所述根据状态判断结果控制启动所述主文件系统和/或备文件系统执行操作包括:

13、在主文件系统中完成客户端的文件或目录操作;

14、判断在主文件系统中操作完成状态以及操作类型;

15、若在主文件系统中操作成功且属于读取类型操作则返回操作的结果;

16、若在主文件系统中操作失败或操作类型属于修改类型操作,获取操作文件或目录的绝对路径以及在备文件系统中的目录项,根据获取的信息在备文件系统中完成对应的操作;

17、所述读取类型操作包括读文件、查找文件、获取文件权限、获取文件属性、获取目录权限、获取目录属性、读取目录中任意一种;修改类型操作包含打开文件、写文件、删除文件、重命名文件、设置文件权限、设置文件属性、删除目录、创建目录、关闭目录、重命名目录、设置目录权限、设置目录属性中任意一种。

18、进一步的,当完成客户端的文件或目录操作时,如果在客户端打开文件则同时在主文件系统、备文件系统中打开相同的文件,步骤包括:

19、在主文件系统中打开文件,根据主文件系统中文件的文件索引节点inode获取备文件系统中文件的文件索引节点inode和目录项dentry;

20、在备文件系统打开文件,保存备文件系统打开文件的上下文指针;

21、判断主文件系统中的文件是否打开成功,若打开成功返回主文件系统的打开文件的上下文指针;

22、若主文件系统的文件打开失败,判断备文件系统中的文件是否打开成功,若打开成功返回备文件系统的打开文件的上下文指针,若备文件系统的文件也打开失败返回错误。

23、进一步的,所述根据主文件系统中文件的文件索引节点inode获取备文件系统中文件的文件索引节点inode和目录项dentry包括:

24、根据所述文件的文件索引节点inode获取文件的绝对路径;

25、根据所述文件的绝对路径,调用备文件系统的lookup函数获取到文件所在目录的文件句柄file handle;

26、使用备文件系统的目录项dentry和文件句柄file handle作为参数,调用nfs_fhget函数获取文件所在目录的文件索引节点inode;

27、使用文件所在目录的所述文件索引节点inode和目录名称作为参数,调用d_obtain_alias函数获取文件所在目录的目录项dentry;

28、使用所述文件所在目录的目录项dentry作为参数,调用d_alloc_parallel函数获取文件的目录项dentry。

29、进一步的,当完成客户端的文件或目录操作时,如果在客户端写文件则同时在主文件系统和备文件系统中写相同的文件,步骤包括:

30、客户端获取打开文件时保存的主备文件的上下文指针和文件索引节点inode;

31、创建主文件系统、备份文件系统的写缓存页请求;

32、将主文件系统、备份文件系统的写缓存页请求添加到所述写缓存页请求队列;

33、客户端从所述写缓存页请求队列中获取写缓存页请求,向主文件系统、备文件系统发送;

34、客户端接收到写请求响应时,判断写请求是否执行成功,若成功返回写成功,若失败则判断请求响应是来自主文件系统还是备文件系统,若是来自主文件系统,则记录主文件系统写失败,否则记录备文件系统写失败;

35、判断主文件系统、备文件系统是否同时写失败,若同时写失败返回错误;若有文件系统写成功,则屏蔽错误,将写缓存页请求从所述写缓存页请求列表中删除并释放,并提交写成功的数据。

36、进一步的,当完成客户端的文件或目录操作时,如果客户端读文件则同时读主文件系统、备文件系统中的相同文件,步骤包括:

37、客户端获取打开文件时保存的主文件系统、备文件系统的上下文指针和文件索引节点inode;

38、创建主文件系统、备份文件系统的读请求,将主文件系统、备份文件系统的的读请求添加到读请求队列;

39、客户端从所述读请求队列中获取读请求,向主文件系统发送读请求;

40、客户端接收到读请求响应时,判断是否读取成功,若读成功返回读取数据;若读取失败,判断请求响应是否来自主文件系统,若来自主文件系统,客户端向备文件系统发送读请求,若请求响应是来自备文件系统,则返回错误。

41、进一步的,当完成客户端的文件或目录操作时,如果客户端关闭文件则同时关闭主备文件系统中的相同文件,步骤包括:

42、获取主文件系统、备文件系统的文件上下文指针;

43、客户端关闭主文件系统中的文件,释放主文件系统文件上下文指针中的目录项dentry、文件系统超级块super block、mdsthreshold的引用和文件上下文指针本身的资源;

44、客户端关闭备文件系统中的文件,释放备文件系统文件上下文指针中的目录项dentry、文件系统超级块super block、mdsthreshold的引用和文件上下文指针本身的资源。

45、进一步的,还包括当客户端接收到主文件系统或备文件系统不同的错误响应时,根据错误码和错误码响应的次数判断主文件系统、备文件系统是否处于异常状态,若判断到处于异常状态,停止读写请求的发送;和/或在客户端空闲无读写操作时,客户端定时向主文件系统、备文件系统发送读写测试请求,根据所述读写测试请求的响应结果判定主文件系统、备文件系统的状态,根据状态判断结果确定是否向主文件系统、备文件系统发送读写请求一种用于实施上述防高可用切换时读写异常的nfs服务端控制方法的装置,包括:

46、主备文件系统挂载模块,用于解析用户态传入的挂载参数,根据参数挂载主文件系统、备份文件系统;

47、主备文件系统资源管理模块,用于管理主文件系统、备份文件系统资源;

48、主备读写控制模块,用于主文件系统、备份文件系统切换写时控制数据写入主文件系统或备文件系统;

49、主备文件操作同步模块,用于在主文件系统、备份文件系统中同步文件操作;

50、主备目录操作同步模块,用于在主文件系统、备份文件系统中同步各种目录操作;

51、主备文件系统卸载模块,用于卸载主备文件系统,释放主备文件系统相关的资源;

52、主备文件句柄获取模块,用于获取文件或目录的绝对路径、文件的句柄、文件节点和目录项。

53、与现有技术相比,本发明的优点在于:

54、1、本发明通过引入一个独立的nfs文件系统作为备文件系统,由原始nfs文件系统作为主文件系统,主文件系统服务端正常运行不需要进行高可用切换时,由主文件系统执行读取类型操作,修改类型操作则同时由主文件系统、备文件系统执行,当主文件系统出现故障时,则由备文件系统代替主文件系统完成客户端的所有请求,使得当发生高可用切换时,能够确保服务端正常进行数据读写,确保客户端在主文件系统完全失效的情况下文件和目录的读写正常、i/o不中断以及i/o无阻塞,有效提升文件系统的可靠性,避免服务端高可用切换情况下数据丢失和业务中断。

55、2、本发明通过采用备文件系统的方式,实现简单,无需修改应用软件,不仅可以解决高可用切换情况下服务端失效时的读写异常问题,还可实现数据的实时备份,提升文件系统的可靠性。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1