一、基础概念
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这个网段)
##重启nfs
systemctl start nfs-server
systemctl enable nfs-server
##将配置文件中的目录全部重新export一次!无需重启服务
sudo exportfs -rv
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值
ubantu版:
sudo apt-get install nfs-kernel-server
sudo /etc/init.d/rpcbind restart #apt会自动安装nfs-common(客户端)、rpcbind等13个软件包
sudo /etc/init.d/nfs-kernel-server restart 重启nfs服务
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