Linux NFS存储服务详解

NFS存储服务概念介绍
  • NFS是Network File System的缩写,网络文件共享系统

  • 主要功能是通过网络(一般是局域网)让不同的主机系统主机系统之间可以共享文件或目录

  • 存储服务的种类

    • FTP(文件传输协议):权限麻烦
    • samba:windows——>linux之间数据传输,linux部署samba
    • NFS:linux——>linux之间数据传输
  • 分布式存储解决存储服务器压力

    • Moosefs(mfs),比较落伍,初学者学习比较简单
    • GlusterFS
    • FastDFS,企业应用较多
NFS存储服务作用
  • 实现数据的共享存储
  • 便于数据操作管理
  • 节省购买服务器磁盘开销
NFS服务部署流程
  • RPC:远程过程调用程序(中介)

    • 因为NFS会有多个随机端口
    • RPC端口固定111,用来管理nfs端口来解决客户端的请求,不然客户端不知道访问哪个端口
  • NFS服务端(房源)

    • 下载安装软件

      #查询是否安装
      rpm -qa | grep "nfs|rpc"
      
      #安装
      yum install -y nfs-utils rpcbind
      
      安装好nfs会自动创建好nfsnobody用户
      
    • 编写配置文件

      vim /etc/exports
      
    • 配置格式:01 02(03)

      • 01:设置数据存储的目录
      • 02:设置网络一个白名单
        • 允许那些主机连接到存储服务器进行数据存储
      • 03:配置存储目录的权限信息、存储目录的一些功能
    • 配置内容

      /data 172.16.1.0/24(rw,sync)
      
    • 服务环境配置

      mkdir /data
      chown -R nfsnobody.nfsnobody /data
      
    • 启动服务程序(先启动rpc、在启动nfs)

      #rpc
      systemctl start rpcbind.service
      systemctl enable rpcbind.service
      
      #检查
      netstat -nptl | grep rpc
      
      #nfs
      systemctl start nfs
      systemctl enable nfs
      
      netstat -nptl | grep nfs
      
      nfs启动后系统看不到端口号,交给rpc处理了
      
  • 客户端(租客)

    • 安装nfs,让系统挂载远程时可以识别到nfs文件系统

      yum install -y nfs-utils
      
    • 实现远程挂载共享目录

      mount -t nfs 172.16.1.31:/data /mnt
      
      -t:type 	挂载存储类型
      
      #检查
      df -h | grep mnt
      
      #创建数据
      touch 1.txt
      
      #然后服务端和客户端都有这个文件
      #别的服务器在挂载,也会看到这个创建的文件
      
NFS工作原理
  • 服务端

    • 启动rpc服务,开启111端口
    • 启动nfs服务
    • 实现nfs服务进程和端口号注册信息

    PS:检查nfs服务进程与端口注册信息

    rpcinfo -p ip地址(本机:localhost)
    
  • 客户端

    • 建立TCP网络链接
    • 客户端执行挂载命令,进行远程挂载
    • 可以数据远程传输存储
查看相关进程
ps -ef | grep -E "nfs|rpc"

#检查数据存储一致性
rpc statd

#磁盘配额进程
rpc.rquotad

#权限管理验证等(NFS mount daemon)
rpc.mountd

#NFS主进程
nfsd

#name mapping daemon 用户压缩/用户映射(记录)
rpc.idmapd
exports服务端详细配置说明
  • 实现多个网段主机可以进行挂载

    #第一种方法
    /data 172.1.1.0/24(rw,sync) 10.0.0.0/24(rw,sync)
    
    #第二种方法
    /data 172.1.1.0/24(rw,sync)
    /data 10.0.0.0/24(rw,sync)
    
  • 共享目录的权限和哪些因素有关

    • 和存储目录的本身权限有关(要是nfsnobody.nfsnobody)
    • 配置文件里面的权限(要是rw)
      • rw:读写
      • ro:只读
      • async:异步方式存储数据
        • 放入内存中
          • 优点:传输数据快
          • 缺点:数据传输不可靠,易丢失数据
      • sync:同步方式存储数据
        • 放入硬盘中
          • 优点:传递数据可靠,不易丢失数据
          • 缺点:数据传输慢
      • no_root_squash:不要将root用户身份进行转换,客户端是root,创建的文件身份也是root
      • root_squash:将root 用户身份进行转换为nfsnobody
      • all_squash:将普通用户身份都进行转换为nfsnobody
      • no_all_squash:不将普通用户身份进行转换,但需要将目录权限进行修改,其他用户加上w权限(有rw)
    (rw,sync,all_squash)
    
企业中如何配置nfs各种squash参数
  • 保证网站存储服务器用户数据安全性

    • no_all_squash是必须要配置的(不可以配置all_squash)

      • 否则任何一个用户都可以删除存储服务器里面的数据

      • 但同时也不能添加数据

    • root_squash也需要配置,默认将root用户转为nfsnobody。但是存储目录权限已经改为www,这样就算客户端是root用户,要存删数据也不可以。www是虚拟用户不可以登录

      #只想让www用户可以添加数据
      
      存储服务器和客户端都要有www用户,同时他们的uid要是一样的
      
      #查看客户端www的uid
      id www
      uid:1002
      
      #查看服务端uid是否存在
      grep 1002 /etc/passwd
      grep 1002 /etc/group
      
      #删除存在uid为1002的用户
      userdel -r rsync
      
      #添加www用户并且uid为1002
      useradd -u 1002 -M -s /sbin/nologin
      id www
      
      chown -R www.www /data
      
      www用户就可以存储数据了
      
  • 以上配置就是默认配置

    • 如何查看默认配置

      #记录nfs的默认配置,不是配置文件。修改了没有任何影响
      cat /var/lib/nfs/etab
      
  • 如何让客户端 root用户可以操作管理www用户管理的data目录

    grep anonuid /var/lib/nfs/etab
    anonuid=65534,anongid=65534
    
    grep 65534 /etc/passwd
    nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
    
    anonuid可以指定的映射用户
    
    #将之前默认修改客户端的用户nfsnobody为www
    vim /etx/exports
    /data 172.16.1.0/24(rw,sync,anonuid=1002,anongid=1002)
    
    systemctl restart nfs
    
企业中如何编辑nfs配置文件
  • 通用方法

    /data 172.16.1.0/24(rw,sync)
    
    默认是 no_all_squash root_squash
    
  • 特殊情况(部分人员不能操作存储目录,可以看目录中的数据)

    /data 10.0.0.0/24(ro,sync)
    
  • 修改默认的匿名用户

    /data 10.0.0.0/24(ro,sync,anonuid=xxx,anongid=xxx)
    
nfs服务问题:nfs服务重启挂载后创建数据比较慢
  • 服务重启方式不正确
  • 服务重启的两种方式:
    • systemctl restart nfs
      • 不管有没有其他的客户端数据传输直接全部断开连接
      • 然后全部重新连接重新传,用户感受不好
    • systemctl reload nfs这个更好一点,平滑重启
      • 有数据连接的有数据传输接着传,等传完了再断开重新连接
      • 没有数据连接的强制断开
如何实现自动挂载
  • 利用rc.local,这个文件要有执行权限

    echo "mount -t nfs 172.16.1.31:/data /mnt" >>/etc/rc.local
    
  • 利用/etc/fstab

    172.16.1.31:/data /mnt nfs defaults 0 0
    

    实现fstab文件自动挂载的特殊服务

    • centos6:根据系统服务启动顺序
      • 按照顺序依次启动(所有服务时间累加)
      • 先加载/etc/fstab,如果是挂载的外网目录。如果网络服务没有开启就不能实现自动挂载
      • autofs服务程序:开机自动启动,服务器启动好后,再重新加载fstab文件
    • centos7:根据系统服务启动顺序
      • 服务并行启动(取决于最慢的服务)
      • 但也先加载/etc/fstab,在加载network服务
      • remote-fs.target服务需要开启,开启后就可以自动挂载
  • 如何看开机已经自启的服务

    ll /etc/systemd/system/multi-user.target.wants
    
客户端mount命令参数-o 后面指定
参数解释
rw实现挂载后挂载点目录可读可写
ro实现挂载后挂载点目录只可读
suid在共享目录中可以让setuid权限位生效(默认)
chmod u+s 文件,这个文件所有用户身份都可以有全部的权限。
nosuid在共享目录中可以让setuid权限位不生效,建议设置这个,提高共享目录的安全性
exec共享目录中的执行文件可以直接执行(默认)
noexec共享目录中的执行文件不可以直接执行,提高共享目录的安全性
auto可以实现自动挂载,
172.16.1.31:/data /mnt nfs auto 0 0
mount -a 可以实现fstab批量挂载
noauto不可以实现自动挂载
nouser禁止普通用户可以卸载挂载点
user允许普通用户可以卸载挂载点
客户端如何卸载
  • 强制卸载挂载点

    umount -lf /mnt
    
    l:不退出挂载点目录也可以进行卸载
    f:强制进行卸载操作
    
总结
  • NFS存储服务器概念
  • NFS存储工作原理
  • NFS存储服务部署
  • NFS服务端详细配置说明
    • 服务端配置参数 xxx_squash
  • NFS客户端详细配置说明
    • 如何实现自动挂载
    • 客户端挂载参数说明 man mount
    • 如何强制卸载共享目录
NFS服务挂载不上排查方法
  • 服务端

    • 检查nfs进程信息是否注册

      rpcinfo -p localhost 
      
      • 服务启动顺序不对,没有启动nfs服务
    • 检查有没有可用的存储目录

      showmount -e 172.16.1.41
      
      • 配置文件编写有问题,重启nfs服务
    • 在服务端进行挂载测试

      mount -t nfs localhost:/data /mnt
      
      • 是否能够在存储目录中创建或删除 数据
  • 客户端

    • 检查nfs进程信息是否注册

      rpcinfo -p localhost 
      
      • 服务启动顺序不对,没有启动nfs服务
    • 检查有没有可用的存储目录

      showmount -e 172.16.1.41
      
      • 配置文件编写有问题,重启nfs服务

      • 网络是否正常

        ping 172.16.1.41
        talnet 172.16.1.41 111
        
查看rpc启动开启的端口
[root@pert data]# rpcinfo -p | awk 'NR>1{print $4}' | uniq | xargs | sed 's# #,#g'
111,20048,39700,20048,48387,20048,2049,53531,43121
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
安装Linux NFS服务需要以下步骤: 1. 首先,使用yum命令安装NFS相关的安装包。可以使用以下命令安装nfs-utils: ``` yum install nfs-utils ``` 2. 创建需要共享的目录,并设置适当的权限。可以使用以下命令创建目录并设置权限: ``` mkdir /mnt/nfs chmod a+w /mnt/nfs ``` 3. 修改/etc/exports文件,将需要共享的目录和客户端添加进来。可以使用以下命令打开文件并进行编辑: ``` vi /etc/exports ``` 在文件中添加以下内容:`/mnt/nfs *(rw,sync)`。这将允许所有客户端以读写方式访问该目录。 4. 启动NFS服务。可以使用以下命令启动服务: ``` /etc/init.d/nfs-kernel-server start ``` 5. 在客户端上挂载NFS共享目录。可以使用以下命令将远程共享目录挂载到本地目录: ``` mkdir /mnt/nfs mount 192.168.1.99:/mnt/nfs /mnt/nfs ``` 6. 在客户端每次启动时自动挂载NFS共享目录,可以编辑/etc/fstab文件,添加以下一行: ``` 192.168.1.99:/mnt/nfs /mnt/nfs nfs defaults 0 0 ``` 这将使得NFS共享目录在每次系统启动时都会自动挂载。 这样就完成了Linux NFS服务的安装和配置。请根据具体情况进行操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [LinuxNFS共享存储安装详细步骤](https://blog.csdn.net/kzhzhang/article/details/126646116)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* *3* [linux 下 安装 nfs 服务](https://blog.csdn.net/diyiday/article/details/125876198)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值