NFS网络文件系统

一、基础概念

NFS:Network File System 网络文件系统,Linux/Unix系统之间共享文件的一种协议
NFS 的客户端主要为Linux
支持多节点同时挂载以及并发写入

提供文件共享服务
为集群中的 Web Server 配置后端存储

1、安装NFS服务,需要安装两个软件,分别是:
RPC主程序:rpcbind
NFS 其实可以被视为一个 RPC 服务,因为启动任何一个 RPC 服务之前,我们都需要做好 port 的对应 (mapping) 的工作才行,这个工作其实就是『 rpcbind 』这个服务所负责的!也就是说, 在启动任何一个 RPC 服务之前,我们都需要启动 rpcbind 才行! (在 CentOS 5.x 以前这个软件称为 portmap,在 CentOS 6.x 之后才称为 rpcbind 的!)。
NFS主程序:nfs-utils
就是提供 rpc.nfsd 及 rpc.mountd 这两个 NFS daemons 与其他相关 documents 与说明文件、执行文件等的软件!这个就是 NFS 服务所需要的主要软件。

2、NFS的相关文件:
    主要配置文件:/etc/exports
    这是 NFS 的主要配置文件了。该文件是空白的,有的系统可能不存在这个文件,主要手动建立。NFS的配置一般只在这个文件中配置即可。
    NFS 文件系统维护指令:/usr/sbin/exportfs
    这个是维护 NFS 分享资源的指令,可以利用这个指令重新分享 /etc/exports 变更的目录资源、将 NFS Server 分享的目录卸除或重新分享。
    分享资源的登录档:/var/lib/nfs/*tab
    在 NFS 服务器的登录文件都放置到 /var/lib/nfs/ 目录里面,在该目录下有两个比较重要的登录档, 一个是 etab ,主要记录了 NFS 所分享出来的目录的完整权限设定值;另一个 xtab 则记录曾经链接到此 NFS 服务器的相关客户端数据。
    客户端查询服务器分享资源的指令:/usr/sbin/showmount
    这是另一个重要的 NFS 指令。exportfs 是用在 NFS Server 端,而 showmount 则主要用在 Client 端。showmount 可以用来察看 NFS 分享出来的目录资源。

查看状态nfsstat

nfsstat
Server rpc stats:
calls      badcalls   badclnt    badauth    xdrcall
0          0          0          0          0

修改默认端口2049

sudo vim /etc/services

nfs             12049/tcp        nfsd shilp      # Network File System
nfs             12049/udp        nfsd shilp      # Network File System
nfs             12049/sctp       nfsd shilp      # Network File System

重启nfs-server,查看端口号修改成功

rpcinfo -p

rpcinfo -p
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100024    1   udp  56175  status
    100024    1   tcp  47397  status
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100005    2   udp  20048  mountd
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp  12049  nfs
    100003    4   tcp  12049  nfs
    100227    3   tcp  12049  nfs_acl
    100003    3   udp  12049  nfs
    100003    4   udp  12049  nfs
    100227    3   udp  12049  nfs_acl
    100021    1   udp  39908  nlockmgr
    100021    3   udp  39908  nlockmgr
    100021    4   udp  39908  nlockmgr
    100021    1   tcp  33948  nlockmgr
    100021    3   tcp  33948  nlockmgr
    100021    4   tcp  33948  nlockmgr

二、配置过程

1、关闭防火墙

nfs 192.168.122.241      web1 192.168.122.150    web2 192.168.122.8      

sed -ri '/^SELINUX=/cSELINUX=disabled' /etc/selinux/config
setenforce 0
systemctl stop firewalld
systemctl disable firewalld

2、nfs(server端)

centos版: 

##安装主程序
yum -y install nfs-utils rpcbind

##配置共享可挂载目录
vim /etc/exports
/webdata              192.168.122.0/24(rw) (122这个网段)

/opt/data 192.168.2.0 (rw,sync,no_subtree_check,no_root_squash)

配置如上,所有客户端用户操作 NFS 目录文件,
有服务端 uid$gid 为 0 即 root 用户的权限。
此时对文件的读写都是:root。缺陷:权限控制过于笼统,容易误操作

##重启nfs
systemctl start nfs-server
systemctl enable nfs-server

##将配置文件中的目录全部重新export一次!无需重启服务
sudo exportfs -vv
/webdata 192.168.122.0/24(rw,wdelay,no_root_squash,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash 

注:/etc/exports格式如下

<输出目录> [客户端1 选项(访问权限,用户映射,其他)] [客户端2 选项(访问权限,用户映射,其他)]

客户端是指网络中可以访问这个NFS输出目录的计算机客户端常用的指定方式:

指定ip地址的主机:192.168.0.200

指定子网中的所有主机:192.168.0.0/24   192.168.0.0/255.255.255.0

指定域名的主机:david.bsmart.cn

指定域中的所有主机:.bsmart.cn

所有主机:

选项用来设置输出目录的访问权限、用户映射等。 NFS主要有3类选项:

- ro: 只读
- rw: 读写(还需要配置共享目录有读写权限)
- sync: 数据同步写入NFS服务器端的硬盘中
- async: 数据先写到缓存区,再写到磁盘里中
- root_squash: NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,拥有匿名用户权限,通常他将使用nobody或nfsnobody身份
- no_root_squash: NFS客户端连接服务端时如果使用的是root的话,那么对服务端分享的目录来说,也拥有root权限。显然开启这项是不安全的
- all_squash: 不论NFS客户端连接服务端时使用什么用户,对服务端分享的目录来说都是拥有匿名用户权限
- anonuid:指定匿名用户的UID值,通常是nobody或nfsnobody,可以在此处自行设定 - anongid: 指定匿名用户的GID值
- all_squash : 所有访问用户都映射为匿名用户或用户组。
- subtree_check(默认):若输出目录是-一个子目录,则nfs服务器将检查其父目录的权限。
- no_subtree_check:即使输出目录是一一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率。
- anonuid=xxx : 指定NFS服务器/etc/passwd文件中匿名用户的UID
- anongid=xxx : 指定NFS服务器/etc/ passwd文件中匿名用户的GID

debian安装nfs

##服务端
sudo apt-get install nfs-kernel-server
sudo /etc/init.d/rpcbind restart  #apt会自动安装nfs-common(客户端)、rpcbind等13个软件包
sudo systemctl restart nfs-kernel-server
/data/nfs 192.168.40.0/24(rw,sync,no_subtree_check,no_root_squash)

##客户端
apt install nfs-common

##挂载
192.168.40.130:/data/nfs      /media/share nfs4 defaults,user,exec  0 0

##重启nfs服务
sudo /etc/init.d/nfs-kernel-server restart  

##可看服务端可用挂载
showmount -e 192.168.40.130
Export list for 192.168.40.130:
/data/nfs 192.168.40.0/24,172.16.1.0/24

##测试使用没问题
 df -Th | grep nfs
192.168.40.130:/data/nfs    nfs4       77G  8.3G   65G  12% /media/share

3、web1 客户端

yum -y install nfs-utils httpd
systemctl start httpd
systemctl enable httpd

1. 查看存储端可用目录

showmount -e 192.168.122.241    // 查询NFS服务器可用目录
Export list for 192.168.122.241:
/webdata 192.168.122.0/24

2. 手动挂载

mount -t nfs 192.168.122.241:/webdata /var/www/html/umount /var/www/html/

3. 自动挂载到网站主目录

vim /etc/fstab
192.168.122.241:/webdata    /var/www/html   nfs   defaults,_netdev,nfsvers=3  0 0
加上_netdev意思是这个是网络设备,在网络服务启动后才挂载
nfsvers=3 -- 指定使用那个版本的NFS协议

方法二:指定传输速率(限定传输时一次读写的数据大小)
mount -t nfs -o intr,nolock,rsize=1024,wsize=1024 192.168.14.223:/nfs_root /mnt

跟踪了fs/nfs/nfsroot.c的代码,发现在nfs作为根文件系统时,参数可以直接写在“nfsroot=”后面,每个参数用逗号隔开,如:
nfsroot=192.168.10.1:/rootfs,proto=tcp,nfsvers=3,nolock

mount -a 

4. 查看挂载

df  -Th
192.168.122.152:/webdata 7923136 692416 6821568 10% /var/www/html

ls /var/www/html/
index.html

5、autofs(自动挂载服务)

实现nfs的动态自动挂载 ,集群间网络文件的共享

/etc/auto.master这个文件指定了自动挂载的挂载点和挂载选项。autofs.service 会读取这些配置并根据需要启动、停止或重新加载 autofs

cat /etc/auto.master
/- /etc/aa.mount --timeout 30

cat /etc/aa.mount 
/mnt/backup_data/node3 -fstype=nfs,rw,soft,sync node3:/hh/backup_data

  

 

 

 

 

 

 https://mp.weixin.qq.com/s/6t6b5bQMiQQ41LV3njVsag  不错的文章



posted @ 2019-08-06 19:35  凡人半睁眼  阅读(352)  评论(0编辑  收藏  举报