nfs:网络文件系统,主要功能是通过网络让不同主机之间可以共享文件或目录。数据重要,需要inotify+rsync实时备份。
NFS在传输数据时,使用的端口会随机选择。那么NFS客户端如何知道NFS服务端使用哪个端口呢?就是通过RPC(远程过程调用)协议来实现。
1、先启动RPC服务(rpcbind):rpc服务一定要在nfs服务之前启动
2、启动NFS服务
3、客户请求NFS服务
4、RPC返回端口到客户
5、客户拿着地址端口请求传输服务
1、查看nfs和rpc的软件包是否安装
rpm -qa nfs-utils rpcbind
如果没有安装,vi /etc/yum.conf,把keepcache改成1,保留yum仓库
yum install nfs-utils rpcbind -y
2、启动rpc
/etc/init.d/rpcbind start
netstat -lntup|grep rpc
rpcinfo -p localhost --查看有无nfs服务,确定有端口
3、启动nfs(主端口:2049) id nfsnobody
/etc/init.d/nfs start
rpcinfo -p localhost
若rpc服务关掉,执行rpcinfo -p localhost会报错
4、设置开机自启动
chkconfig nfs on
chkconfig rpcbind on
chkconfig --list rpcbind
chkconfig --list nfs
ls /etc/init.d/rc.d/rc3.d/|grep -E "nfs|rpc" --查看启动顺序
5、查看一下进程
ps -ef|egrep "rpc|nfs"
服务的作用:
1、rpc.statd --检查文件一致性
2、rpc.rquotad --磁盘配额进程
3、rpc.mountd --权限管理验证等
4、nfsd --nfs主进程,管理登入、ID身份判别
5、rpc.idmapd --名称映射
NFS服务端配置文件: /etc/exports (可通过man查看配置文件参数)
NFS共享的目录:为NFS服务端要共享的实际目录,要用绝对路径。注意共享目录的本地权限,如果需要读写共享,一定要让本地目录可以被NFS客户端的用户(nfsnobody)读写。
NFS客户端地址:这里所谓的客户端一般是前端的业务服务器,例如web服务。
权限参数集:对授权的NFS客户端的访问权限设置。
客户端地址 |
具体地址 |
说明 |
授权单一客户端访问NFS |
10.0.0.30 |
一般情况,生产环境基本不用 |
授权整个网段可访问NFS |
10.0.0.0/24 |
生产环境常见配置 |
/etc/exports配置说明:
1、创建/data
mkdir /data -p
2、改变属组,有写权限(必须授权)
chown -R nfsnobody:nfsnobody /data
3、编辑vi /etc/exports
#share /data by oldboy for kaifa at 20180925
/data 172.16.1.0/24(rw,sync) 加sync意思是直接写到磁盘,高并发用async(异步)
一定要是公司内网网段
4、重启nfs
/etc/init.d/nfs reload
相当于exportfs -rv,用于使加载的配置文件生效,还可管理当前NFS共享的文件系统目录列表
5、自我检测
showmount -e 172.16.1.31
如果屏幕输出出现/data 172.16.1.0/24,表示服务端配好了
也可以 mount -t nfs 172.16.1.31:/data /mnt,如果成功,证明服务端服务ok
记得卸载 umount /mnt
检查系统版本:cat /etc/redhat-relese (uname -r)
1、首先安装服务
rpm -qa nfs-utils rpcbind
yum install nfs-utils rpcbind -y
2、启动rpc,加入开机自启动
/etc/init.d/rpcbind start
chkconfig rpcbind on
chkconfig --list rpcbind
3、showmount -e 172.16.1.31
排错:
a、ping 172.16.1.31
b、telnet 172.16.1.31 111 --防火墙是否阻挡
4、挂载
mount -t nfs 172.16.1.31:/data /mnt
df -h --检查挂载是否成功
cat /proc/mounts --查看挂载
挂载成功后,客户端的mnt目录和服务端的data目录同步共享。
5、放入rc.local,开机自启动
echo "mount -t nfs 172.16.1.31:/data /mnt" >>/etc/rc.local
tail -1 /etc/rc.local
1、确保所有客户端服务器对NFS共享目录具备相同的用户访问权限
(客户端服务器用户uid相同,与服务端一致)
a、all_squash把所有客户端都压缩成固定的匿名用户(uid相同)
b、就是anonuid,anongid指定的uid和gid的用户
2、所有客户端和服务端都需要有一个相同的uid和gid的用户,即nfsnobody(uid必须相同)
了解--netfs服务开启后,可把它挂载到fstab文件里,正常挂载,否则不会成功
在NFS服务端通过cat /var/lib/nfs/etab查看NFS服务端配置参数的细节
在NFS客户端可以通过cat /proc/mounts 查看mount的挂载参数细节
如果追求挂载的性能,可以用如下参数
mount -t nfs -o fg,hard,intr,rsize=131072,wsize=131072,noexec,nosuid 10.0.0.7:/data/ /mnt
-noexec 不许执行 -nosuid 不加suid -fg 后台 -hard 响应延时 -instr 协助停止响应延时
-noatime 高并发时加此项,以提升I/O性能
##禁止更新目录及文件时间戳挂载,命令如下:
mount -t nfs -o noatime,nodiratime 10.0.0.7:/data /mnt
但是如果不考虑,选择默认值即可
mount -t nfs 10.0.0.7:/data/ /mnt
umount -lf /mnt --有suid时无法卸载,加lf可强制卸载
案例:
1、fstab修改错误导致系统无法启动故障
维护模式或救援模式:
mount -o rw,remount /
然后修改 /etc/fstab
2、文件系统只读故障修复(a、rsync的bug b、文件系统内部一致性导致)
维护模式或救援模式:
mount -o rw,remount /
1. 重启系统看是否可以自动修复。
2. 使用fsck -y /dev/sda1 进行自动修复。(用”-y”选项来执行该命令对硬盘进行检查和修复)
添加参数:fsck -y -C -t ext3 /dev/sda1 (一般情况下修复完成后,所有文件移动到 lost+found目录,文件名会被改变)
(-C 显示进度条 -t 指定文件系统类型 -y 默认自动yes修复)
3. 如果fsck修复完成后,启动系统依然自读。
查看分区结构:
[root@localhost ~]# more /etc/fstab
[root@localhost ~]# more /proc/mounts
[root@localhost ~]# mount
/dev/sda2 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
查看ro挂载的分区,如果发现有ro,就重新mount
umount /dev/sda1
mount /dev/sda1 /boot
如果发现有提示“device is busy”,找到是什么进程使得他busy(直接umount -lf)
fuser -m /boot 将会显示使用这个模块的pid
fuser -mk /boot 将会直接kill那个pid
然后重新mount即可。
4. 直接remount
[root@localhost ~]# mount -o rw,remount /dev/sda1
以下是优化选项说明:
/proc/sys/net/core/rmem_default:该文件指定了接收套接字缓冲区大小的默认值,默认设置:124928
/proc/sys/net/core/rmem_max:该文件指定了接收套接字缓冲区大小的最大值,默认设置:124928
/proc/sys/net/core/wmem_default:该文件指定了发送套接字缓冲区大小的默认值,默认设置:124928
/proc/sys/net/core/wmem_max:该文件指定了发送套接字缓冲区大小的最大值,默认设置:124928
上述文件对应的具体内核优化命令如下(服务器端):
cat >>/etc/sysctl.conf< net.core.wmem_default=8388608 net.core.rmem_default=8388608 net.core.rmem_max=16777216 net.core.wmem_max=16777216 EOF sysctl -p 企业生产场景NFS共享存储优化小节: 1、 硬件:sas/ssd硬盘,买多块,raid5/raid10.网卡吞吐量要大,至少千兆(多块bond) 2、NFS服务端配置: /data 10.0.0.2(rw,sync,all_squash,anonuid=65534,anongid=65534) 3、NFS客户端挂载优化配置命令: mount -t nfs -o noexec,nosuid,nodev,noatime,nodiratime,rsize=131072,wsize=131072 10.0.0.7:/data/ /mnt --兼顾安全性能 4、对NFS服务的所有服务器内核进行优化 cat >>/etc/sysctl.conf< net.core.wmem_default=8388608 net.core.rmem_default=8388608 net.core.rmem_max=16777216 net.core.wmem_max=16777216 EOF 执行sysctl -p生效 5、如果卸载的时候提示”umount:/mnt:device is busy“,需要退出挂载目录再进行卸载。如果是NFS Server宕机了,则需要强制卸载,可执行umount -lf /mnt 6、大型网站NFS网络文件系统的替代软件为分布式文件系统Moosefs(mfs)、GlusterFS(大片之类的大文件)、FastDFS 大中小型网站(访问量2000万/日pv以下)线上应用,都可以。门户网站也有应用,生产场景应该多把数据的访问往前推,即尽量把静态存储里的资源通过CDN或缓存服务器提供服务,如果没有缓存或者架构不好,存储服务器数量再多也扛不住,且用户体验很差。应用建议: