• nfs实现共享目录对于集群高可用风险,nfs客户端容易卡死


    目录

    背景说明

    解决办法

    执行步骤

    数据移动

    取消挂载

    停nfs服务(客户端)

    卸载nfs(客户端)

    重启主机(客户端)

    卸载nfs(服务端)


    背景说明

    nfs可以完成集群多个主机之间共享目录,如图所示:

    服务器集群中/new目录为共享目录,里面放置有各种安装软件及配置文件。

    想要实现服务器集群高可用,要求当集群某一主组件挂掉的时候,需要有另一从组件完成替换,并继续提供服务,并且当集群中其中任何一台主机关机的时候,其他主机依然能够提供服务,对于用户来说没有任何影响。

    但是nfs对于高可用来说存在一个隐患:客户端nfs中有一个内核级别的线程,nfsv4.1-svc,该线程会一直和nfs服务端进行通信,且无法被kill掉。(停止客户端Nfs服务,设置开机不自启动,并卸载nfs,重启主机才能让该线程停掉)。

    一旦nfs服务端停掉,或者所在主机关机,那么nfs客户端就会找不到nfs服务端,导致nfs客户端所在主机一直处于卡死状态,表现为无法ssh到该主机,不能使用 df -h 等命令,会对客户造成比较严重的影响。

    解决办法

    如果想要高可用,那么可能就不需要使用Nfs来实现共享目录,而是将/new目录设置为主机本地目录

    执行步骤

    数据移动

    • 在nfs服务端所在主机上,通过scp,将 /new 目录复制到nfs客户端所在主机上,但是目录名字需要修改一下,执行如下命令(建议后台执行,因为有时候该目录比较大,或者压缩后再发送):
      • scp -r /new root@其他主机名://new_tmp

    取消挂载

    • 由于nfs客户端都是挂载在nfs服务端所在主机的 /new 上,需要取消挂载,执行如下命令:
      • umount -v  /new
    • 取消挂载以后, /new 变为了空目录,删除 /new 目录,将 /new_tmp 目录重命名为 /new

    停nfs服务(客户端)

    • 停止nfs服务,执行如下命令:
      • systemctl stop nfs
    • 取消nfs服务开启启动,执行如下命令:
      • systemctl disable nfs
    • 观察nfs状态,分别执行如下命令:
      • systemctl status nfs
      • ps -ef | grep nfs
    • 可以观察到nfs线程并没有停干净

    卸载nfs(客户端)

    • 搜索nfs的rpm包,执行如下命令:
      • rpm -qa | grep nfs
    • 卸载nfs rpm包,执行如下命令:
      • rpm -e --nodeps libnfsidmap-0.25-19.el7.x86_64
      • rpm -e --nodeps nfs-utils-1.3.0-0.66.el7.x86_64
      • rpm -e --nodeps nfs4-acl-tools-0.3.3-20.el7.x86_64
    • 再次查看nfs是否卸载完全
      • rpm -qa | grep nfs
    • 观察 nfsv4.1-svc 线程是否还存活,执行如下命令:
      • ps -ef | grep nfs
    • 可以观察到此时 nfs该线程还存在,所以当nfs服务端停止的时候,还是会存在当前主机卡死的情况

    重启主机(客户端)

    • 依次重启之前nfs客户端所在主机,执行如下命令:
      • reboot
    • 每重启一台主机之后,观察nfs进程是否还存在,执行如下命令:
      • ps -ef | grep nfs

    卸载nfs(服务端)

    • 停止nfs服务端,执行如下命令:
      • systemctl stop nfs
    • 禁止nfs服务开启启动,执行如下命令:
      • systemctl disable nfs
    • 查看nfs服务是否停止,执行如下命令:
      • systemctl status nfs
    • 卸载nfs rpm,执行如下命令:
      • rpm -e --nodeps libnfsidmap-0.25-19.el7.x86_64
      • rpm -e --nodeps nfs-utils-1.3.0-0.66.el7.x86_64
      • rpm -e --nodeps nfs4-acl-tools-0.3.3-20.el7.x86_64
    • 查看nfs rpm包是否还存在,执行如下命令:
      • rpm -qa | grep nfs
  • 相关阅读:
    Android开发笔记——快速入门(从入门ACT到Fragment放肆)
    深度学习之语义分割算法(入门学习)
    Nginx监控与告警:确保服务稳定运行
    伦敦金周末可以交易吗,黄金休市时间是那些?
    JavaEE - CORS跨域
    【ASeeker】Android 源码捞针,服务接口扫描神器
    vie的刷新机制
    Service Worker是什么?
    pytorch模型(.pt)转onnx模型(.onnx)的方法详解(1)
    006_Makefile Study(1)
  • 原文地址:https://blog.csdn.net/lx__angel/article/details/128121065