NFS存储服务概念介绍
- NFS是Network File System的缩写,中文意思是网络文件共享系统,它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录
NFS存储服务作用
- 实现数据的共享存储
- 编写数据操作管理
- 节省购买服务器磁盘开销
NFS服务端部署流程
主机名称和IP地址规划
服务 | 主机名 | eth0网卡IP | eth1网卡IP | 软件 |
---|---|---|---|---|
防火墙服务器 | firewalld | 10.0.0.81 | 172.16.1.81 | firewalld |
负载均衡服务器 | lb01 | 10.0.0.5 | 172.16.1.5 | nginx,keepalived |
负载均衡服务器 | lb02 | 10.0.0.6 | 172.16.1.6 | nginx,keepalived |
web服务器 | web01 | 10.0.0.7 | 172.16.1.7 | nginx |
web服务器 | web02 | 10.0.0.8 | 172.16.1.8 | nginx |
web服务器 | web03 | 10.0.0.9 | 172.16.1.9 | nginx |
存储服务器 | nfs01 | 10.0.0.31 | 172.16.1.31 | nfs |
备份服务器 | backup | 10.0.0.41 | 172.16.1.41 | rsync |
数据库服务器 | db01 | 10.0.0.51 | 172.16.1.51 | mysql,mariaDB |
批量管理服务器 | m01 | 10.0.0.61 | 172.16.1.61 | ansible |
跳板机服务器 | jumpserver | 10.0.0.71 | 172.16.1.71 | jumpserver |
监控服务器 | zabbix | 10.0.0.72 | 172.16.1.72 | zabbix |
缓存服务器 | 暂无 | 暂无 | 暂无 | 暂无 |
服务端下载安装软件
RPC: 远程过程调用服务程序
#查看RPC是否安装,未安装则安装
rpm -qa|grep -E "rpc"
yum install -y rpcbind
#查看NFS是否安装,未安装则安装
rpm -qa|grep -E "nfs"
yum install -y nfs-utils
编写nfs服务配置文件
存储服务器10.0.0.31
- 格式 :
1 2(3)
- 设置数据存储的目录
- 设置网络一个白名单
- 配置存储目录的权限信息 存储目录一些功能
vi /etc/exports
/data 172.16.1.0/24(rw,sync)
创建一个存储目录
mkdir /data
chown nfsnobody.nfsnobody /data
启动服务
#先启动 rpc服务
systemctl start rpcbind.service
systemctl enable rpcbind.service
#再启动 nfs服务
systemctl start nfs
systemctl enable nfs
NFS客户端部署流程
客户端下载安装软件
#查看NFS是否安装,未安装则安装
rpm -qa|grep -E "nfs"
yum install -y nfs-utils
远程挂载共享目录
mount -t nfs 172.16.1.31:/data /mnt
NFS服务工作原理
服务端
- 启动rpc服务,开启111端口
- 启动nfs服务
- 实现nfs服务进程和端口好的注册
检查nfs服务进程与端口注册信息
[root@nfs01 data]# rpcinfo -p 172.16.1.31
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 44238 status
100024 1 tcp 53791 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 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 34862 nlockmgr
100021 3 udp 34862 nlockmgr
100021 4 udp 34862 nlockmgr
100021 1 tcp 33765 nlockmgr
100021 3 tcp 33765 nlockmgr
100021 4 tcp 33765 nlockmgr
客户端
- 建立TCP网络连接
- 客户端执行挂载命令,进行远程挂载
- 可以实现数据远程传输存储
NFS服务端详细配置说明
NFS配置参数权限
- rw : 存储目录是否有读写权限
- ro : 存储目录是否时只读权限
- sync : 同步方式存储数据 直接将数据保存到磁盘(数据存储安全)
- async : 异步方式存储数据 直接将数据保存到内存(提高数据存储效率)
- all_squash : 将所有用户身份都进行转换
- root_squash : 将root用户身份进行转换
- no_root_squash : 不要将root用户身份进行转换
- no_all_squash : 不要将普通用户身份进行转换
共享目录的权限和哪些因素有关
- 和存储目录的本身权限有关
755
,属主,属组 - 和配置文件中的权限配置有关
rw
,ro
,xxx_squash
,anonuid
,anongid
- 和客户端
mount
命令的ro
参数有关
实现多个网段主机可以进行挂载
vi /etc/exports
#方法一
/data 172.16.1.0/24(rw,sync) 10.0.0.0/24(rw,sync)
方法二
/data 172.16.1.0/24(rw,sync)
/data 10.0.0.0/24(rw,sync)
/var/lib/nfs/etab
配置记录文件
该文件记录的是配置记录,没有配置过的参数会默认显示
[root@nfs01 data]# cat /var/lib/nfs/etab
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)
root_squash
演示
为了方便演示,服务端目录权限为777,生产环境不允许设置777
- 默认为该参数
- 当客户端以root用户操作时,NFS转换为服务端用户
- 默认参数为anonuid=65534,anongid=65534
[root@nfs01 data]# id 65534
uid=65534(nfsnobody) gid=65534(nfsnobody) 组=65534(nfsnobody)
- 客户端
root
会转换为服务端nfsnobody
,创建文件时属主和属组为nfsnobody
[root@web01 mnt]# touch root_squash
[root@web01 mnt]# ll
总用量 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 12月 12 11:04 root_squash
no_root_squash
演示
为了方便演示,服务端目录权限为777,生产环境不允许设置777
- 当客户端以root用户操作时,NFS不会转换为服务端用户
- 客户端
root
对应服务端root
,创建文件时属主和属组为root
[root@web01 mnt]# touch no_root_squash
[root@web01 mnt]# ll
总用量 0
-rw-r--r-- 1 root root 0 12月 12 11:14 no_root_squash
all_squash
演示
为了方便演示,服务端目录权限为777,生产环境不允许设置777
- 当客户端以root用户或普通用户操作时,NFS转换为服务端用户
- 默认参数为anonuid=65534,anongid=65534
[root@nfs01 data]# id 65534
uid=65534(nfsnobody) gid=65534(nfsnobody) 组=65534(nfsnobody)
- 客户端
root
或普通用户会转换为服务端nfsnobody
,创建文件时属主和属组为nfsnobody
root用户
[root@web01 mnt]# touch all_squash
[root@web01 mnt]# ll
总用量 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 12月 12 11:19 all_squash
普通用户
[1997sty@web01 mnt]$ touch 1997sty_all_squash
[1997sty@web01 mnt]$ ll
总用量 0
-rw-rw-r-- 1 nfsnobody nfsnobody 0 12月 12 11:21 1997sty_all_squash
no_all_squash
演示
为了方便演示,服务端目录权限为777,生产环境不允许设置777
-
默认为该参数
-
当客户端以root用户操作时,NFS不会转换为服务端用户
-
客户端
root
或普通用户的uid
和gid
会对应服务端的uid
和gid
,创建文件时属主和属组为对应的uid
和gid
root用户,需要设置
no_root_squash
[root@web01 mnt]# touch no_root_squash
[root@web01 mnt]# ll
总用量 0
-rw-r--r-- 1 root root 0 12月 12 11:14 no_root_squash
普通用户
[1997sty@web01 mnt]$ touch 1997sty_no_all_squash
[1997sty@web01 mnt]$ ll
总用量 0
-rw-rw-r-- 1 1997sty 1997sty 0 12月 12 11:27 1997sty_no_all_squash
企业互联网公司如何配置NFS
- 为了保证安全性,尽可能让更少的用户可以操作NFS目录,只让服务器软件和root用户可以操作该目录
- 服务器软件使用的是
www
虚拟用户,一般会将NFS的目录的属组和属主设为www
- 要保证服务端和客户端的
www
用户的uid
和gid
相同,服务端会根据用户的gid
和uid
来判断用户 - 默认设置为
no_all_squash
和root_squash
- 设置
root_squash
的同时,还需要设置anonuid
和anongid
的值为www的gid
和uid
(否则root用户会被映射为nfsnobody
用户,从而无法操作目录) - 这样设置以后,root用户操作的文件和www虚拟用户操作的文件,属主和属组都为
www
用户,服务器软件操作时不会出现权限不足的情况
其他配置情况
/data 172.16.1.0/24(rw,sync)
: 通用方法/data 10.0.0.0/24(ro,sync)
: 让部分人员不能操作存储目录 可以看目录中的数据/data 10.0.0.0/24(ro,sync,anonuid=xxx,anongid=xxx)
: 修改默认的匿名用户
服务重启
NFS服务器重启,挂载后创建数据比较慢
- systemctl restart nfs : 重启会造成服务一瞬间的中断
- systemctl reload nfs : 会重新加载配置文件,服务不会中断
nfs客户端详细配置说明
挂载NFS
mount -t nfs 172.16.1.31:/data /mnt
mount
命令独立于文件系统的装载选项
- 在
mount -o
后追加的参数 - rw : 实现挂载后挂载点目录可读写
- ro : 实现挂载后挂载点目录只读
- suid : 在共享目录中可以让setuid权限位生效
- nosuid : 在共享目录中可以让setuid权限位失效提供共享目录的安全性
- exec : 共享目录中的执行文件可以直接执行
- noexec : 共享目录中的执行文件可以无法直接执行提供共享目录的安全性
- auto : 可以实现自动挂载
mount -a
实现加载fstab文件自动挂载 - noauto : 不可以实现自动挂载
- user : 允许普通用户可以卸载挂载点
- nouser : 禁止普通用户可以卸载挂载点
客户端如何强制卸载挂载点
- -l : 不退出挂载点目录进行卸载
- -f : 强制进行卸载操作
umount -lf /mnt
最后一次更新于2020-01-10 21:30
0 条评论