NFS 服务搭建配置

一、NFS介绍

NFS : network file system,中文意思网络文件系统,通过网络让不同主机之间共享文件。
NFS客户端,通过挂载的方式,将服务器端磁盘挂载到本地。

二、企业应用场景

作为公共文件系统,作为web的共享存储。
NFS:性能效率不太高,但是可以使用分布式文件系统代替Moosefs(mfs) glusterfs fastDFS

三、工作原理

1.通过服务器安装nfs服务端,共享文件夹
2.客户端挂在服务器端的目录
3.NFS通过网络传输数据
监听的端口,不同的启动端口不一样,依赖rpc
什么是rpc服务:nfs功能很多,不同的端口

NFS工作流程图:
1.先启动RPC服务
2.再启动NFS服务,并向RPC注册
3.客户通过请求RPC服务,得到NFS端口和地址
4.客户端向NFS端口和地址发出请求

四、服务器端配置

shell>yum -y undate 升级所有包,改变软件设置和系统设置,系统版本内核都升级
shell>yum -y upgrade 升级所有包,不改变软件设置和系统设置,系统版本升级,内核不改变
shell>yum -y install nfs-utils rpcbind #安装NFS服务器端
(1)启动rpcbind服务
shell>/etc/init.d/rpcbind restart #监听端口主端口111 其他端口894
shell>rpcinfo -p localhost #查看nfs的注册
shell>chkconfig rpcbind on
(2)启动nfs服务
shell>/etc/init.d/nfsd restart
shell>rpcinfo -p localhost #就可以查看注册的端口信息
shell>chkconfig nfs on
检查:
shell>ps -ef | grep "rpc|nfs"
rpc.statd ==>检查文件一致性
rpc.rquotad ==>磁盘配额进程(remote quota server)
rpc.mount ==>权限管理验证等
nfsd ==>NFS主进程,管理登录
rpc.lock
shell>man rpc.statd 可以使用man查看

注意:
nfs会自动创建一个nfsnobody, chatt -i /etc/password ,就会装不上
shell>cat /etc/rc.d/rc3.d/| grep -E "nfs|rpc" #服务启动顺序
S13rpcbind
S30nfs
shell>vim /etc/init.d/nfs
shell>chkconfig: - 30 60 #表示启动顺序

(3)配置共享目录
NFS默认的配置文件/etc/exports ,默认是空的
配置格式:
NFS共享的目录 NFS客户端的地址(参数1,参数2...)客户端地址2(参数1,参数2...)

配置命令:
shell>mkdir /data
shell>chown -R nfsnobody.nfsnobody /data
shell>vim /etc/exports
/data 192.168.200.*/24(rw,sync)
shell>/etc/init.d/nfsd reload //平滑加载 相当于 #exportfs -rv
reload让已经到达服务器的请求,继续处理,让新来的请求,拒绝门外。

服务器端测试:最好自己挂在以下测试服务端是否是好的
shell>showmount -e 127.0.0.1或本机IP 查看是否有共享目录
shell>cat /var/lib/nfs/etab #查看配置的参数,默认会加很多参数
shell>cat /proc/mounts 查看是否挂在了
shell>cat /var/lib/nfs/rmtab 客户端访问服务器exports的信息列表

shell>exportfs -o rw,sync x.x.x.x/24:/shared_dir //通过exportfs共享
shell>showmount -e x.x.x.x

五、客户端配置

(1)客户端配置
1.客户端只需要启动PRC服务
shell>yum -y install rpcbind nfs-utils
shell>/etc/init.d/rpcbind start
shell>chkconfig rpcbind on
shell>chkconfig rpcbind --list

(2)客户端挂载
shell>showmount -e 192.168.200.134
shell>mkdir /nfs_dir
shell>mount -t nfs 192.168.200.134:/data /nfs_dir //可以放在/etc/rc.local 建议放在rc.local

注意:放在/etc/fstab下会有问题,因为开机的NFS先挂在,再启网络,导致nfs无法挂在。
如果在开机启动服务里设置并启动了netfs服务,放入fstab里也是可以实现开机挂在的。
shell>vim /etc/fstab 配置自动挂载
192.168.200.134:/data /nfs_dir nfs default 0 0

(3) NFS挂载常用参数
参数介绍:
rw read-write,表示可读写权限
ro read-only,表示只读权限
sync 请求或写入数据时,数据同步写入到nfs server的硬盘后才返回。
async 异步写入,先写入缓冲区,再异步同步到磁盘,数据不保险
no_root_squash 访问nfsserver共享目录的用户如果是root的话,他对该共享目录具有root权限,这个配置一半用在无盘客户端准备的,用户避免使用
root_squash 如果访问nfs server 共享目录的用户时root,则它的权限将被压缩成匿名用户,同时uid和gid通常会变成nfsnobody账号身份
all_squash 不管访问nfsserver共享目录的身份如何,它的权限都被压缩成为匿名用户,同时它的uidhegid都会变成nfsnobody账号身份
anonuid 匿名uid
anongid 匿名gid

shell>cat /proc/mount //查看挂载后的参数
fg 后台挂载
soft 当NFSClient 以soft挂载server时,若网络不稳定,造成客户端与服务器无法传输
但有一个超时时间,超过这个超时时间就会不在重试,超时后可能数据会丢失,一般不建议是使用
hard 挂载模式硬盘时,刚好和soft相反,此时客户端会一直连接服务器,如服务器响应就继续连接
intr 当使用hard挂载的资源超时后,若指定intr参数,超时后会终止掉,不会造成nfs锁住
rsize、wsize 在传输数据的时候,一次读多少数据写多少数据,相当linux的block
proto=tcp 默认是使用TCP协议

精细化挂载
#mount -t nfs -o fg,hard,intr,rsize=13172,wsize=131072 192.168.200.134:/data /mnt
一般挂载
#mount -t nfs 192.168.200.134:/data /mnt

all_squash; 将所有用户转换成来宾账号, 适合公用目录
anonuid ,anongid;指定映射的来宾账号
root_squash;将root用户映射为来宾账号
rw ro 读写权限
dev nodev 是否保留文件的特殊功能,一般来说只有/dev才会有特殊配置,
exec noexec 是否具有执行文件的权限,如果想要挂载的仅是普通资源数据区(图片、附件)那么可以选择noexec
user nouser 是否运行用户进行文件的挂载与协助功能?如果要保护文件系统,最好不要提供用户进行挂载与卸载
auto no auto 这个auto是指mount -a 时会不会被挂载的项目,如果不需要这个分区随时被挂载,可以设为noaut
async 异步写入磁盘 sync 同步写入磁盘
atime noatime 每一次数据访问时,会同步更新访问文件的inode时间搓,是默认选项,高并发会影响性能
default (rw,suid,dev,exec,auto,nouser,async)默认情况大部分都是默认值(/etc/fstab)
remount 当文件系统变成只读,我们要进入单用户模式/救援模式 mount -o rw,remount
#mount -t nfs -o fg,hard,intr,rsize=13172,wsize=131072,nosuid,noexec 192.168.200.134:/data /mnt

在企业里面,一般来说,NFS服务器共享的只是普通静态数据(图片、附件、视频)不需要执行suid、exec等权限,挂载
的这个文件系统只能作为数据存取用,无法执行远程序,对客户端来讲增强了安全性,例如×××站点篡改,上传文件后执行
#mount -o nfs nosuid,noexec,nodev,rw 192.168.200.x:/data /mnt

六、NFS挂载优化参数

(1)硬件优化
使用磁盘整列,高性能存储
千兆、万兆网卡

(2)客户端优化
1)禁止更新项目及文件时间戳挂载,命令如下
#mount -t nfs noatime,nodiratime x.x.x.x:/data /mnt
2)安全加优化的挂载方法
#mount -o nfs nosuid,noexec,nodev,rw,noatime,nodiratime,intr,rsize=131072,wsize=131072 192.168.200.x:/data /mnt
3)默认的挂载方式
mount -t nfs x.x.x.x:/data /mnt centos6默认已经比较优化了

(3)服务器 NFS内核优化
#vim /etc/exports
/data/ x.x.x.x/24(rw,sync,squash,anonuid=65534,anongid=65534)

对NFS服务的所有服务器内核进行优化(读写缓存)
#cat /proc/sys/net/core/rmem_default 指定了接收套接字缓冲区大小的默认值(字节为单位)默认:124928
调整到8388608
#cat /proc/sys/net/core/wmem_default 指定了发送套接字缓冲区大小的默认值(以字节为单位),默认设置 124928
调整到8388608
#cat /proc/sys/net/core/rmem_max 该文件指定了接收套接字缓冲区大小的最大值(字节为单位)默认:124928
调整到 16777216
#cat /proc/sys/net/core/wmem_max 该文件指定了接收套接字缓冲区大小的最大值(字节为单位)默认:124928
整到 16777216

#sysctl -p 生效
如果卸载的时候提示“umount:/mnt device is busy” 需要推出当前目录进行卸载,如果NFS server 宕机
可以使用 umount -lf /mnt 强制卸载

大型网站NFS网络文件系统的替代软件为分布式文件系统moosefs (mfs)/glusterfs/FastDFS

(4) nfs应用系统的优缺点
NFS服务可以让不同客户端使用同一个共享目录,保证不同节点客户端数据的一致性。
优点:
1、简单、容易上手,容易掌握
2、NFS文件系统内数据是文件系统之上的,即数据是能看的见的。
3、部署快速、容易维护,可控,满足基本需求
4、可靠,从软件层面上是可靠的,稳定性高

缺点:
1、存在单点故障
2、不适合高并发的情况,系能不太好。(2千万/日一下PV的网站不是瓶颈)
3、客户端认证基于IP和主机名,安全性一般(用于局域网问题不大)
4、NFS数据是明文,NFS本身不对数据完整性验证
5、多台客户机挂载一个NFS服务器时,连接管理麻烦。NFS出现问题,所有的客户端都掉,客户端df -h
都hang掉,无法操作,只能 umount -lf /mnt 强制卸载。

七、常见故障

1.iptables 阻挡
2.selinux没关
3.配置文件错误
4.客户端nfs-untils没装
5.服务器端共享目录没有授权
6.命令敲错
7.启动失败,可能nfs-utils-lib没装(不能创建id)
8.nfs与rpc服务启动顺序不对
9.NFS 卸载不了 #umount -lf /mnt 退出当前目录
10.客户端挂载mount.nfs: Stale file handle
解决方法:
shell>umount -f 挂载点
shell>重新挂载

八、防火墙放通NFS服务

NFS依靠五种服务运行,mountd,nfs,nlockmgr,portmapper,rquotad放通防火墙也需要放通该五种端口。
shell>rpcinfo -p 查看监听端口
nfs 端口是已经固定的 2049
portmapper 端口是已经固定的 111
shell>vim /etc/sysconfig/nfs 修改配置文件,设置服务的端口
RQUOTAD_PORT=875
LOCKD_TCPPORT=33993
LOCKD_UDPPORT=33993
MOUNTD_PORT=892

shell>vim /etc/service 添加固定端口
mountd 892/udp
mountd 892/tcp
nlockmgr 33993/udp
nlockmgr 33993/tcp
rquotad 875/tcp
rquotad 875/udp

shell>/etc/init.d/nfs restart 重启服务生效

shell> vim /etc/sysconfig/iptables 添加五个端口
-A INPUT -s 10.10.32.14/32 -m state --state NEW -p tcp --dport 111 -j ACCEPT
-A INPUT -s 10.10.32.14/32 -m state --state NEW -p tcp --dport 892 -j ACCEPT
-A INPUT -s 10.10.32.14/32 -m state --state NEW -p tcp --dport 2049 -j ACCEPT
-A INPUT -s 10.10.32.14/32 -m state --state NEW -p tcp --dport 875 -j ACCEPT
-A INPUT -s 10.10.32.14/32 -m state --state NEW -p tcp --dport 33993 -j ACCEPT
-A INPUT -s 10.10.32.14/32 -m state --state NEW -p udp --dport 111 -j ACCEPT
-A INPUT -s 10.10.32.14/32 -m state --state NEW -p udp --dport 892 -j ACCEPT
-A INPUT -s 10.10.32.14/32 -m state --state NEW -p udp --dport 2049 -j ACCEPT
-A INPUT -s 10.10.32.14/32 -m state --state NEW -p udp --dport 875 -j ACCEPT
-A INPUT -s 10.10.32.14/32 -m state --state NEW -p udp --dport 33993 -j ACCEPT

shell>/etc/init.d/iptables 重启防火墙

九、NFS 针对不同用户进行开放权限

需求:linux系统多个用户有读写共享文件夹的权限,创建的文件自带属性
(1)配置文件修改
shell>vim /etc/exports
/backup 10.10.32.14(rw,no_root_squash,async)
(2)服务端创建和客户端一样的用户
shell>groupadd -g xx
shell>useradd -u xx -g xx -s /sbin/nologin xxx

十、NFS挂载文件系统 出现nobody解决方式

NFS共享文件挂载后,文件所属主、所属组都收nobody, 查看了NFS上面创建响应的账号,通过百度查找到需要进行以下设置。

都说要设置idmapd.conf里面的Domain参数,但是,单纯的修改客户端的idmapd.conf并无法解决这一问题。而当服务端和客户端的Domain这个参数都设为一样之后,再重新挂载,就一切正常了。
具体的修改流程是:
vim /etc/idmapd.conf 取消Domain前面的注释,改为你所使用的根域名;保存。

重启idmapd服务:
service rpcidmapd restart
或者挂载mount指定版本:
mount -t nfs -o vers=3 ip:/home /home 挂载使用v3版本就行

转载于:https://blog.51cto.com/7603402/2141382

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值