NFS存储服务概念介绍
-
NFS是Network File System的缩写,网络文件共享系统
-
主要功能是通过网络(一般是局域网)让不同的主机系统主机系统之间可以共享文件或目录
-
存储服务的种类
- FTP(文件传输协议):权限麻烦
- samba:windows——>linux之间数据传输,linux部署samba
- NFS:linux——>linux之间数据传输
-
分布式存储解决存储服务器压力
- Moosefs(mfs),比较落伍,初学者学习比较简单
- GlusterFS
- FastDFS,企业应用较多
NFS存储服务作用
- 实现数据的共享存储
- 便于数据操作管理
- 节省购买服务器磁盘开销
NFS服务部署流程
-
RPC:远程过程调用程序(中介)
- 因为NFS会有多个随机端口
- RPC端口固定111,用来管理nfs端口来解决客户端的请求,不然客户端不知道访问哪个端口
-
NFS服务端(房源)
-
下载安装软件
#查询是否安装 rpm -qa | grep "nfs|rpc" #安装 yum install -y nfs-utils rpcbind 安装好nfs会自动创建好nfsnobody用户
-
编写配置文件
vim /etc/exports
-
配置格式:01 02(03)
- 01:设置数据存储的目录
- 02:设置网络一个白名单
- 允许那些主机连接到存储服务器进行数据存储
- 03:配置存储目录的权限信息、存储目录的一些功能
-
配置内容
/data 172.16.1.0/24(rw,sync)
-
服务环境配置
mkdir /data chown -R nfsnobody.nfsnobody /data
-
启动服务程序(先启动rpc、在启动nfs)
#rpc systemctl start rpcbind.service systemctl enable rpcbind.service #检查 netstat -nptl | grep rpc #nfs systemctl start nfs systemctl enable nfs netstat -nptl | grep nfs nfs启动后系统看不到端口号,交给rpc处理了
-
-
客户端(租客)
-
安装nfs,让系统挂载远程时可以识别到nfs文件系统
yum install -y nfs-utils
-
实现远程挂载共享目录
mount -t nfs 172.16.1.31:/data /mnt -t:type 挂载存储类型 #检查 df -h | grep mnt #创建数据 touch 1.txt #然后服务端和客户端都有这个文件 #别的服务器在挂载,也会看到这个创建的文件
-
NFS工作原理
-
服务端
- 启动rpc服务,开启111端口
- 启动nfs服务
- 实现nfs服务进程和端口号注册信息
PS:检查nfs服务进程与端口注册信息
rpcinfo -p ip地址(本机:localhost)
-
客户端
- 建立TCP网络链接
- 客户端执行挂载命令,进行远程挂载
- 可以数据远程传输存储
查看相关进程
ps -ef | grep -E "nfs|rpc"
#检查数据存储一致性
rpc statd
#磁盘配额进程
rpc.rquotad
#权限管理验证等(NFS mount daemon)
rpc.mountd
#NFS主进程
nfsd
#name mapping daemon 用户压缩/用户映射(记录)
rpc.idmapd
exports服务端详细配置说明
-
实现多个网段主机可以进行挂载
#第一种方法 /data 172.1.1.0/24(rw,sync) 10.0.0.0/24(rw,sync) #第二种方法 /data 172.1.1.0/24(rw,sync) /data 10.0.0.0/24(rw,sync)
-
共享目录的权限和哪些因素有关
- 和存储目录的本身权限有关(要是nfsnobody.nfsnobody)
- 配置文件里面的权限(要是rw)
- rw:读写
- ro:只读
- async:异步方式存储数据
- 放入内存中
- 优点:传输数据快
- 缺点:数据传输不可靠,易丢失数据
- 放入内存中
- sync:同步方式存储数据
- 放入硬盘中
- 优点:传递数据可靠,不易丢失数据
- 缺点:数据传输慢
- 放入硬盘中
- no_root_squash:不要将root用户身份进行转换,客户端是root,创建的文件身份也是root
- root_squash:将root 用户身份进行转换为nfsnobody
- all_squash:将普通用户身份都进行转换为nfsnobody
- no_all_squash:不将普通用户身份进行转换,但需要将目录权限进行修改,其他用户加上w权限(有rw)
(rw,sync,all_squash)
企业中如何配置nfs各种squash参数
-
保证网站存储服务器用户数据安全性
-
no_all_squash是必须要配置的(不可以配置all_squash)
-
否则任何一个用户都可以删除存储服务器里面的数据
-
但同时也不能添加数据
-
-
root_squash也需要配置,默认将root用户转为nfsnobody。但是存储目录权限已经改为www,这样就算客户端是root用户,要存删数据也不可以。www是虚拟用户不可以登录
#只想让www用户可以添加数据 存储服务器和客户端都要有www用户,同时他们的uid要是一样的 #查看客户端www的uid id www uid:1002 #查看服务端uid是否存在 grep 1002 /etc/passwd grep 1002 /etc/group #删除存在uid为1002的用户 userdel -r rsync #添加www用户并且uid为1002 useradd -u 1002 -M -s /sbin/nologin id www chown -R www.www /data www用户就可以存储数据了
-
-
以上配置就是默认配置
-
如何查看默认配置
#记录nfs的默认配置,不是配置文件。修改了没有任何影响 cat /var/lib/nfs/etab
-
-
如何让客户端 root用户可以操作管理www用户管理的data目录
grep anonuid /var/lib/nfs/etab anonuid=65534,anongid=65534 grep 65534 /etc/passwd nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin anonuid可以指定的映射用户 #将之前默认修改客户端的用户nfsnobody为www vim /etx/exports /data 172.16.1.0/24(rw,sync,anonuid=1002,anongid=1002) systemctl restart nfs
企业中如何编辑nfs配置文件
-
通用方法
/data 172.16.1.0/24(rw,sync) 默认是 no_all_squash root_squash
-
特殊情况(部分人员不能操作存储目录,可以看目录中的数据)
/data 10.0.0.0/24(ro,sync)
-
修改默认的匿名用户
/data 10.0.0.0/24(ro,sync,anonuid=xxx,anongid=xxx)
nfs服务问题:nfs服务重启挂载后创建数据比较慢
- 服务重启方式不正确
- 服务重启的两种方式:
- systemctl restart nfs
- 不管有没有其他的客户端数据传输直接全部断开连接
- 然后全部重新连接重新传,用户感受不好
- systemctl reload nfs这个更好一点,平滑重启
- 有数据连接的有数据传输接着传,等传完了再断开重新连接
- 没有数据连接的强制断开
- systemctl restart nfs
如何实现自动挂载
-
利用
rc.local
,这个文件要有执行权限echo "mount -t nfs 172.16.1.31:/data /mnt" >>/etc/rc.local
-
利用
/etc/fstab
172.16.1.31:/data /mnt nfs defaults 0 0
实现fstab文件自动挂载的特殊服务
- centos6:根据系统服务启动顺序
- 按照顺序依次启动(所有服务时间累加)
- 先加载
/etc/fstab
,如果是挂载的外网目录。如果网络服务没有开启就不能实现自动挂载 - autofs服务程序:开机自动启动,服务器启动好后,再重新加载fstab文件
- centos7:根据系统服务启动顺序
- 服务并行启动(取决于最慢的服务)
- 但也先加载
/etc/fstab
,在加载network
服务 - remote-fs.target服务需要开启,开启后就可以自动挂载
- centos6:根据系统服务启动顺序
-
如何看开机已经自启的服务
ll /etc/systemd/system/multi-user.target.wants
客户端mount命令参数-o 后面指定
参数 | 解释 |
---|---|
rw | 实现挂载后挂载点目录可读可写 |
ro | 实现挂载后挂载点目录只可读 |
suid | 在共享目录中可以让setuid权限位生效(默认) chmod u+s 文件,这个文件所有用户身份都可以有全部的权限。 |
nosuid | 在共享目录中可以让setuid权限位不生效,建议设置这个,提高共享目录的安全性 |
exec | 共享目录中的执行文件可以直接执行(默认) |
noexec | 共享目录中的执行文件不可以直接执行,提高共享目录的安全性 |
auto | 可以实现自动挂载, 172.16.1.31:/data /mnt nfs auto 0 0 mount -a 可以实现fstab批量挂载 |
noauto | 不可以实现自动挂载 |
nouser | 禁止普通用户可以卸载挂载点 |
user | 允许普通用户可以卸载挂载点 |
客户端如何卸载
-
强制卸载挂载点
umount -lf /mnt l:不退出挂载点目录也可以进行卸载 f:强制进行卸载操作
总结
- NFS存储服务器概念
- NFS存储工作原理
- NFS存储服务部署
- NFS服务端详细配置说明
- 服务端配置参数 xxx_squash
- NFS客户端详细配置说明
- 如何实现自动挂载
- 客户端挂载参数说明 man mount
- 如何强制卸载共享目录
NFS服务挂载不上排查方法
-
服务端
-
检查nfs进程信息是否注册
rpcinfo -p localhost
- 服务启动顺序不对,没有启动nfs服务
-
检查有没有可用的存储目录
showmount -e 172.16.1.41
- 配置文件编写有问题,重启nfs服务
-
在服务端进行挂载测试
mount -t nfs localhost:/data /mnt
- 是否能够在存储目录中创建或删除 数据
-
-
客户端
-
检查nfs进程信息是否注册
rpcinfo -p localhost
- 服务启动顺序不对,没有启动nfs服务
-
检查有没有可用的存储目录
showmount -e 172.16.1.41
-
配置文件编写有问题,重启nfs服务
-
网络是否正常
ping 172.16.1.41 talnet 172.16.1.41 111
-
-
查看rpc启动开启的端口
[root@pert data]# rpcinfo -p | awk 'NR>1{print $4}' | uniq | xargs | sed 's# #,#g'
111,20048,39700,20048,48387,20048,2049,53531,43121