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 不错的文章