NFS服务

xiaolv
11
2024-11-21

文件传输工具

  • ftp:vsftpd工具

  • Samba:linux和windows之间进行文件共享

  • NFS :专用于linux和linux之间的专门的文件共享服务,network filesystem

NFS功能

NFS服务可以把远程Linux机器上面的文件目录数据,通过挂载的形式,映射在客户端机器上

(主机A(NFS服务器)上有一个文件夹,通过NFS服务,把这个文件夹,远程挂载到网络中的一台主机B(NFS客户端)的文件夹)

主机A(/mnt) -----------> 主机B(/home/xiaolv)

类似windows中的磁盘映射和Samba服务,只不过一般情况下,Windows网络共享服务或samba服务用户办公局域网共享,而互联网中

小型网站集群架构后端常用NFS进行数据共享

为什么需要NFS服务

以web集群为例

用户A访问网站上传图片img,首先通过负载均衡,负载均衡通过轮询机制,将上传图片的请求发送到后端web1服务器上,img即存储到web1服务器中

用户B访问网站图片img,负载均衡通过轮询机制,将上传图片的请求发送到后端web2服务器上,web2服务器中无img图片,访问不到

所以需要NFS文件共享

NFS和RPC的概念

NFS通过port传输数据,但是NFS服务在传输数据的时候,端口是随机选择的(重启NFS的时候看端口是否改变),而NFS客户端就无法得知该从哪个端口传输数据,所以需要依赖RPC协议

NFS通过RPC服务,进行一个端口注册,实现告知客户端,NFS的工作端口是哪一个

什么是RPC

RPC:远程过程调用

Linux上使用NFS服务,必须启动两个服务

  • NFS服务

  • RPC服务

NFS通过RPC注册自己的端口功能

RPC服务就是记录每个NFS功能对应的一个端口,并且RPC保证了NFS客户端发出请求的时候,把该功能对应的端口信息告诉NFS客户端,保证客户端能够正确连接到NFS服务端的端口,达到传输数据的目的

RPC相当于一个中介,在NFS服务端和客户端之间

RPC服务默认使用111端口来和NFS客户端进行交流,并且通过111端口将正确的NFS服务端端口信息告知客户端

安装配置NFS

环境说明:

192.168.13.80 NFS服务端

192.168.13.81 NFS客户端

NFS服务的配置必须先运行RPCBIND服务才行

如果RPCBIND服务重启了,原本注册的NFS服务端的信息也就失效了,你还得再重启NFS服务端,重新注册端口信息才行

如果你仅仅修改了NFS的配置文件,不需要重启NFS服务端,因为重启之后,端口的信息就更新了,还得重新注册。只需要执行如下的命令,重新执行如下的命令,重新读取NFS配置文件即可

exportfs -rv
systemctl reload nfs

依赖包

  • nfs-utils:NFS服务的主程序,包括了rpc.nfsd rpc.mountd这两个守护进程

  • rpcbind:centos7,是一个RPC服务进程

# 检查是否安装
rpm -qa nfs-utils rpcbind
# 使用yum安装
yum -y install nfs-utils rpcbind

环境配置

在NFS服务端上创建一个用于共享的文件夹,且设置想用的读写权限

mkdir /share
chmod 777 /share
chown nfsnobody.nfsnobody /share # nfsnobody后文会提到

修改NFS服务的配置文件

配置文件: /etc/exports

# 配置格式
nfs服务端共享目录 NFS客户端地址1(参数1,参数2,参数3.......) NFS客户端地址2(参数1,参数2,参数3.......)
​
# 范例
# 把nfs服务端的根目录共享出去,且允许两个主机名为client1,client2的机器,进行读写
/   client1(rw) client2(rw)
​
# 允许任意的nfs客户端,都能够挂载到此NFS服务端的/public目录下
/public *(rw)
​
# 只允许指定的IP地址的服务器,能够挂载此服务端的/home/xks目录,且是只读的
/home/xks 192.168.1,100(ro)
​

NFS语法参数解释

1. nfs共享目录:是NFS服务器需要共享出去的实际目录,必须写绝对路径,且注意目录的读写本地权限;如果你允许客户端读写操作,
other需要有一个读写的权限
​
2. NFS客户端地址,也就是NFS服务器授权可以访问共享目录的地址,可以写主机名,可以写通配符、IP地址
​
3. 权限参数,对NFS授权的客户端,进行权限的控制的参数

NFS 客户端地址形式

单一客户端 192.168.178.113 用的很少
​
允许整个网段访问 192.168.13.0/24    指定局域网网段,常用
​
授权整个域名客户端 nfs.xlyw.top 用的很少
​
授权子域名客户端 *.xlyw.top 用的很少
​

NFS客户端的权限参数

ro read only 只读
rw 读写
root_squash 当nfs客户端以root账号访问NFS服务端共享目录数据的时候,把改root映射为NFS服务端的一个匿名用户,该用户的UID,GID都会变成nfsnobody的信息
no_root_squash 和上面一样,只是root账户会映射为root用户,不安全,禁用
all_squash 所有nfs客户端的用户都映射为匿名用户,常用
​
sync 数据同步写入到内存和磁盘,优点是数据安全,缺点是效率太低
async 数据先写入内存,再写入磁盘,可能会造成数据丢失

启动NFS的服务端的文件目录共享

NFS服务都是基于RPC的111通信端口,不需要确保先启动了RPC服务

如果RPCBIND服务停止了,111端口也不会挂掉,因为centos7还提供了一个rpcbind.socket服务运行着

# 检查RPC服务
systemctl status rpcbind

1. 启动NFS服务

# 1.在共享目录下准备测试文件
cd /share
mkdir test
touch 1.txt
vim 2.txt

# 2.修改ngs配置文件,对客户端授权
vim /etc/exports
/share 192.168.13.0/24(insecure,rw,sync)

# 3. 重新加载配置文件
systemctl restart nfs
systemctl status nfs

# 检查本地的nfs服务器挂载情况
showmount -e 127.0.0.1

Export list for 127.0.0.1:
/share 192.168.13.0/24

# 4.再次检查nfs服务器端的共享参数
cat /var/lib/nfs/etab

/share  192.168.13.0/24(rw,sync,wdelay,hide,nocrossmnt,insecure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,insecure,root_squash,no_all_squash)

2. 远程挂载nfs共享目录

nfs服务器上配置防火墙

# 设置服务器防火墙对192.168.13.0/24网段全部放开,关闭防火墙的可以不配置
firewall-cmd --zone=public --add-rich-rule 'rule family="ipv4" source address=192.168.13.0/24 accept'
firewall-cmd --reload

# 关闭selinux
setenforce 0

进入nfs客户端进行配置

# 1. 安装nfs
yum install -y nfs-utils
# 2. 挂载nfs
mkdir /home/nfs
mount -t nfs 192.168.13.80:/share  /home/nfs
# 3. 测试同步
cd /home/nfs
ls
touch 3.txt
# 4. 取消挂载

3. 设置autofs自动挂载

安装并配置autofs开机自启动

yum -y install autofs
systemctl  enable --now autofs

配置主配置文件

vim /etc/auto.master
#
# Sample auto.master file
# This is a 'master' automounter map and it has the following format:
# mount-point [map-type[,format]:]map [options]
# For details of the format look at auto.master(5).
#
/misc   /etc/auto.misc
/media  /etc/cdrom.misc
/home  /etc/nfs.misc   #添加内容
..........................
..........................

配置子配置文件

vim /etc/nfs.misc
nfs  -rw 192.168.13.80:/share

重启autofs

systemctl restart autofs

测试挂载

查看挂载文件中并没有挂载远程主机文件

进入/home/nfs目录触发挂载


动物装饰