一、NFS
存储服务简介
1.存储服务的种类
#ftp、tftp
文件传输协议
#http
超文本传输协议
#samba
window--linux之间的数据传输
#nfs
linux--linux之间的数据传输
#分布式存储
Moosefs、GlusterFS、FastDFS
2.NFS
存储服务介绍
NFS是Network File System的缩写,中文意思是网络文件共享系统,它的主要功能是通过网络让不同的主机系统之间可以共享文件或目录
3.NFS
存储服务作用
#实现数据的共享存储
#编写数据操作管理
#节省购买服务器磁盘开销
二、NFS
服务端部署
- 安装软件
#检查是否安装NFS、RPC软件
rpm -qa | grep -E "nfs-utils|rpcbind"
#安装NFS、RPC软件
yum install -y nfs-utils rpcbind
- 修改配置文件
#nfs配置文件权限简介
man exports
rw #读写权限
ro #只读权限
sync #同步方式存储数据(直接将数据保存到磁盘)
async #异步方式存储数据(直接将数据保存到内存)
no_root_squash #root用户身份不进行转换
root_squash #root用户身份进行转换
all_squash #所有用户身份都进行转换
no_all_squash #所有用户身份都不进行转换
anonuid=UID,anongid=GID #修改NFS服务默认映射用户(NFS默认映射的用户为nfsnobody)
#编写nfs配置文件
vim /etc/exports
/data 192.168.1.0/24(rw,sync)
#配置文件格式
message1 message2(message3)
message1:设置数据存储目录
message2:设置网络一个白名单
message3:设置存储目录的权限信息、存储目录的功能
- 设置共享目录权限
#创建存储目录
mkdir /data
#设置存储目录权限(虚拟用户nfsnobody在安装nfs软件的时候系统就创建完成)
chown nfsnobody.nfsnobody -R /data
chown nobody.nobody -R /data #Centos8不会创建nfsnobody用户
- 启动共享服务
#先启动RPC服务(使用111端口)
systemctl enable --now rpcbind
#再启动NFS服务
systemctl enable --now nfs-server.service
#关闭RPC服务
systemctl stop rpcbind.service
Warning: Stopping rpcbind.service, but it can still be activated by:
rpcbind.socket #此时还是可以通过rpcbind.socket服务激活rpcbind.service服务,所以还要停止rpcbind.socket服务
systemctl stop rpcbind.socket
三、NFS
客户端端部署
- 命令
mount
参数简介
#命令语法
mount [-a] [-t vfstype] [-o options] device dirname
[-a] 加载文件/etc/fstab启动所有挂载
[-t vfstype] 指定文件系统的类型(通常不必指定mount会自动选择正确的类型)
[-o options] 主要用来描述设备或档案的挂接方式
rw 实现挂载后挂载点目录可读可写(默认)
ro 实现挂载后挂载点目录可读可写
suid 在共享目录中可以让setuid权限位生效(默认)
nosuid 在共享目录中可以让setuid权限位失效(提供共享目录的安全性)
exec 共享目录中的执行文件可以直接执行
noexec 共享目录中的执行文件可以无法直接执行(提供共享目录的安全性)
auto 可以实现自动挂载(配合mount -a实现加载fstab文件自动挂载)
noauto 不可以实现自动挂载
nouser 禁止普通用户可以卸载挂载点
user 允许普通用户可以卸载挂载点
device 要挂载的设备(也可以使用挂载设备的UUID)
dirname 挂接点目录名称
- 使用
mount
命令挂载访问
#安装软件
yum install -y nfs-utils
#列出nfs共享资源
showmount -e 192.168.1.10
#参数-t指定挂载类型为nfs
mount -t nfs 192.168.1.10:/data /mnt
#mount命令自动选择挂载类型(推荐)
mount 192.168.1.10:/data /mnt
#验证挂载是否成功
df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 38G 1.6G 37G 5% /
devtmpfs 981M 0 981M 0% /dev
tmpfs 992M 0 992M 0% /dev/shm
tmpfs 992M 9.6M 982M 1% /run
tmpfs 992M 0 992M 0% /sys/fs/cgroup
/dev/sda1 197M 102M 95M 52% /boot
tmpfs 199M 0 199M 0% /run/user/0
192.168.1.10:/data 38G 1.6G 37G 5% /mnt
- 写入
/etc/fstab
文件实现永久挂载
#安装软件
yum install -y nfs-utils
#编写配置文件
vim /etc/fstab
192.168.1.10:/data /mnt nfs user,auto 0 0
192.168.1.10:/data /mnt nfs defaults 0 0 #推荐
#验证挂载是否成功
mount -a
- 使用
autofs
服务实现自动挂载
#安装软件
yum install -y nfs-util autofs
#修改主配置文件
vim /etc/auto.master
/- /etc/auto.nfs
#修改子配置文件
vim /etc/auto.nfs
/mnt -rw,sync 192.168.1.10:/data
#启动autofs服务
systemctl enable --now autofs.service
四、NFS
服务工作原理
1.服务端工作步骤
#先启动RPC服务开启111端口
#再启动NFS服务
#NFS服务向RPC服务注册端口信息
rpcinfo -p 192.168.1.10 #没有注册NFS服务(此时只打开了RPC服务,关闭RPC服务后rpcinfo命令无法使用)
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
rpcinfo -p 192.168.1.10 #NFS服务注册之后(此时先打开RPC服务再打开NFS服务)
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
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
2.客户端工作步骤
#客户端通过服务端的RPC服务建立建立TCP网络连接(但是客户端不需要RPC服务)
#客户端执行挂载命令进行远程挂载
#客户端实现数据远程传输存储
五、NFS
配置文件权限示例
1.多个网段主机进行挂载
vim /etc/exports
#方法一
/data 192.168.1.0/24(rw,sync) 172.1.1.0/24(rw,sync)
#方法二
/data 192.168.1.0/24(rw,sync)
/data 172.1.1.0/24(rw,sync)
2.影响共享目录的权限的因素
#和存储目录的本身权限有关(755权限、属主属组nfsnobody)
ll -d /data/
drwxr-xr-x 2 nfsnobody nfsnobody 6 Jul 27 22:23 /data/
#和配置文件中的权限配置有关
#和客户端挂载命令的参数有关
3.NFS
配置不同文件权限示例
#服务端修改配置文件权限为ro
vim /etc/exports
/data 192.168.1.0/24(ro,sync)
#客户端重新挂载NFS存储,此时创建文件提示只有只读权限
#服务端修改配置文件权限为all_squash
vim /etc/exports
/data 192.168.1.0/24(ro,sync,all_squash)
#客户端重新挂载NFS存储,此时创建文件文件的属主、属组为nfsnobody
#服务端修改配置文件权限为no_all_squash
vim /etc/exports
/data 192.168.1.0/24(ro,sync,no_all_squash)
#客户端重新挂载NFS存储,此时创建文件文件的属主、属组为普通用户yangwn
#由于普通用户不进行转换,可以在服务端/data目录增加其他用户写入的权限chmod o+w /data
#服务端修改配置文件权限为root_squash
vim /etc/exports
/data 192.168.1.0/24(ro,sync,root_squash)
#客户端重新挂载NFS存储,此时创建文件文件的属主、属组为普通用户nfsnobody
#服务端修改配置文件权限为no_root_squash
vim /etc/exports
/data 192.168.1.0/24(ro,sync,no_root_squash)
#客户端重新挂载NFS存储,此时创建文件文件的属主、属组为root
5.企业中NFS
配置文件参数实际应用
#历程一服务端修改配置文件权限为no_all_squash
此时普通用户存储数据的时候也不会被切换为nfsnobody,依旧保存原来的属主、属组
#历程二服务端共享目录/data权限为www(确保服务端和客户端www用户uid数值一致)
此时普通用户中,只有www用户可以对共享目录/data经行操作
#历程三服务端修改配置文件权限为root_squash
此时root用户会被转换成nfsnobody,然而共享目录只能www用户进行操,保证了root用户也无法对共享目录/data经行操作,确保数据安全
#nfsnobody这个虚拟用户是有家目录的
grep nfsnobody /etc/passwd
nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
#记录nfs服务的默认配置记录信息(其中anonuid=65534,anongid=65534就是nfsnobody用户的uid何gid,所以nfs默认映射的用户为nfsnobody)
cat /var/lib/nfs/etab
/data 192.168.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用户可以操作管理www用户管理的data目录(此时可以将nfs默认映射的用户nfsnobody,修改为www用户)
vim /etc/exports
/data 192.168.1.0/24(rw,sync,anonuid=1002,anongid=1002) #此时模拟www用户的uid和gid为1002
6.企业中如何编辑NFS
配置文件
#通用方法
/data 192.168.1.0/24(rw,sync)
#特殊情况(让部分人员不能操作存储目录 可以看目录中的数据)
/data 192.168.1.0/24(ro,sync)
#修改默认的映射用户(此时共享目录的属主、属组也要修改为映射用户)
/data 192.168.1.0/24(ro,sync,anonuid=xxx,anongid=xxx)
六、NFS
服务挂载不上排查方法
1.客户端自动挂载失败原因
#Centos6
根据系统服务启动顺序(串行启动)
先加载/etc/fstab(实现自动挂载磁盘) network服务 netfs服务 再次加载/etc/fstab(实现自动挂载磁盘)
Centos6必须启动netfs服务才能实现开机自动挂载磁盘
#Centos7
根据系统服务启动顺序(并行启动)
先加载/etc/fstab(实现自动挂载磁盘) network服务 remote-fs.target服务 再次加载/etc/fstab(实现自动挂载磁盘)
Centos7必须启动remote-fs.target服务才能实现开机自动挂载磁盘
#开机启动启动会创建一个软连接到/etc/systemd/system/multi-user.target.wants目录中
systemctl enable sshd
Created symlink from /etc/systemd/system/multi-user.target.wants/sshd.service to /usr/lib/systemd/system/sshd.service.
#查看开机运行的服务
ll /etc/systemd/system/multi-user.target.wants #Centos7利用目录查看开机运行的服务
#查看全部运行服务
systemctl list-unit-files #Centos7
chkconfig --list #Centos6
2.故障排除方法
#检查NFS进程信息是否注册,原因服务启动顺序不对,没有启动NFS服务
rpcinfo -p localhost
#检查有没有可用存储目录,原因配置文件编写有问题,重启NFS服务
showmount -e 192.168.1.10
#在服务端进行挂载测试
是否能够在存储目录中创建或删除数据
#网络问题
ping 192.168.1.10
telnet 192.168.1.10