nfs 共享存储
nfs共享文件存储
network filesystem;
为什么要使用 nfs?
如果userA上传文件通过负载均衡器上传到了web01,这个时候userB去下载file1又被负载均衡器分配到了web02
上面就找不到userA上传的资源了。
使用了共享存储nfs之后,userA上传的文件到nfs中,那么这个时候userB不管是从哪台web中都可以访问到userA上传的资源。
nfs原理
首先当NFS启动后,就会随机的使用一些端口,然后NFS就会向RPC去注册这些端口,RPC就会记录下这些端口,并且RPC会开启111端口,等待客户端RPC的请求,如果客户端有请求,那么服务器端的RPC就会将之前记录的NFS端口信息告知客户端。如此客户端就会获取NFS服务器端的端口信息,就会以实际端口进行数据的传输了。
1)首先服务器端启动RPC服务,并开启111端口
2)服务器端启动NFS服务,并向RPC注册端口信息
3)客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
4)服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
5)客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。
nfs的安装
环境准备
主机名 | wan | lan | 角色 |
---|---|---|---|
web01 | 10.0.0.7 | 172.16.1.7 | nfs客户端 |
web02 | 10.0.0.8 | 172.16.1.8 | nfs客户端 |
nfs | 10.0.0.31 | 172.16.1.31 | nfs服务端 |
1、服务端安装配置
# centos7只安装nfs-utils
# centos6需要安装rpcbind
[root@nfs01 ~]# yum -y install nfs-utils
# 2、配置配置文件
[root@nfs01 ~]# vi /etc/exports
/data 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data 允许访问的目录
# 创建用户
[root@nfs01 ~]# groupadd www -g666
[root@nfs01 ~]# useradd www -u666 -g666 -s /sbin/nologin -M
# 创建/data目录
[root@nfs01 ~]# mkdir /data
[root@nfs01 ~]# chown www.www /data
# 启动服务
先启动rpc服务,再启动apache服务
systemctl start rpcbind nfs-server
# 客户端查看nfs共享目录
[root@nfs01 ~]# showmount -e 10.0.0.31
[root@web01 ~]# showmount -e 10.0.0.31
[root@web02 ~]# showmount -e 10.0.0.31
Export list for 10.0.0.31:
/data 172.16.1.0/24
# 添加开机自启
[root@nfs01 ~]# systemctl enable rpcbind
[root@nfs01 ~]# systemctl enable nfs-server
# 查看配置文件
[root@nfs01 ~]# cat /var/lib/nfs/etab
/data 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=666,anongid=666,sec=sys,rw,secure,root_squash,all_squash)
nfs共享参数 | 参数作用 |
---|---|
rw | 读写权限 |
ro | 只读权限 |
root_squash | 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户(不常用) |
no_root_squash | 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员(不常用) |
all_squash | 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户(常用) |
no_all_squash | 无论NFS客户端使用什么账户访问,都不进行压缩 |
sync | 同时将数据写入到内存与硬盘中,保证不丢失数据 |
async | 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据 |
anonuid | 配置all_squash使用,指定NFS的用户UID,必须存在系统 |
anongid | 配置all_squash使用,指定NFS的用户UID,必须存在系统 |
# 在k8s外挂存储中使用这一条配置,在容器当中对挂载的目录有chown的权限。
# 最简易的全能的配置也可使用。
/data/nfs 172.16.1.0/24(rw,sync,no_subtree_check,no_root_squash)
no_root_squash # 用root用户来进行操作
2、客户端配置
# 先查看可以挂载的资源
[root@nfs01 ~]# showmount -e 10.0.0.31
Export list for 10.0.0.31:
/data 172.16.1.0/24
# 挂载
mount -t nfs 172.16.1.31:/data /opt/nfs/
# 卸载
umount /opt/nfs/
# 开机自动挂载
写入/etc/fstab
mount -a