一、概述介绍
NFS是Network File System的缩写,中文意思是网络文件系统,
主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录
互联网中小型网站集群机构后端常用NFS进行数据共享 (新华日报)
大型网站,那么有可能还会用到更复杂的分布式文件系统,例如:Moosefs(mfs)、GlusterFS(*)、FastDFS
二、存在意义:
1)实现数据统一存储
2)节省磁盘购买成本
三、存储原理
a 在存储客户端创建本地存储数据目录
b 在存储服务端创建共享存储数据目录
c 实现客户端目录和存储目录建立挂载
# 客户端目录中操作数据等价于存储服务器目录中操作数据
四、部署过程
rpc (rpcbind) --- 远程过程调用服务程序 nfs每次重启服务进程和端口都会发生变化,有了rpc,他会管理nfs的进程及端口,统一到111
(类似于中介)
服务端
1.安装软件程序
yum install -y rpcbind nfs-utils
#检查软件版本
rpm -qa rpcbind nfs-utils
2.vim /etc/exports
/data web*(rw)
配置文件样例:
/projects proj*.local.domain(rw)
/usr *.local.domain(ro) @trusted(rw)
① ② ③
① 设置定义数据存储目录
② 定义允许哪些主机存储数据 定义网段信息 定义地址信息 定义主机名称信息
③ 定义存储数据参数
3.创建存储目录
mkdir /data
chown nfsnobody.nfsnobody /data
4.编写本地解析配置文件
vim /etc/hosts
172.16.1.7 web01
172.16.1.8 web02
172.16.1.9 web03
5.启动服务
systemctl start rpcbind
systemctl start nfs
五、服务端配置文件详细参数
/etc/exports
rw --- 是否允许向存储目录中存储数据 存储目录可读可写
ro --- 是否允许向存储目录中存储数据 存储目录只读状态
async --- 异步传输数据 客户端(存储数据) ---- 服务端 (内存) ---> 服务端(磁盘)
sync --- 同步传输数据 客户端(存储数据) ---- 服务端 (磁盘)
root_squash --- 是否将用户信息做映射转换 将root用户身份进行转换 (默认转换用户nfsnobody)
no_root_squash --- 是否将用户信息做映射转换 将root用户身份不做转换
all_squash --- 是否将用户信息做映射转换 将普通用户身份进行转换 (默认转换用户nfsnobody)
no_all_squash --- 是否将用户信息做映射转换 将普通用户身份不做转换
anonuid ----指定uid
anongid -----指定gid
同步传输数据直接存储到磁盘
异步传输数据先存储到内存再存储磁盘
配置存储服务参数时:root_squash,no_all_squash,anonuid=xxx,anongid=xxx
root_squash,no_all_squash,这两个可以不写,默认配置里已经有了
六、默认配置
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)
客户端
1.安装软件程序
yum install -y nfs-utils
2.挂载应用存储服务
mount -t nfs 172.16.1.31:/data /mnt
七、客户端挂载参数
cat /proc/mounts
172.16.1.31:/data /mnt nfs4 rw,relatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.7,local_lock=none,addr=172.16.1.31 0 0
mount -o 挂载参数
rsize 提示数据存储效率,减缓存储服务器压力 在客户端内存中设置了缓存
wsize 提升数据读取效率,减缓存储服务器压力 在客户端内存中设置了缓冲
hard 实现长连接挂载操作 (对于架构而言,配置hard容易造成耦合度过程) 架构师
soft 实现长连接挂载操作(具有超时时间timeo=600) (对于架构而言,配置soft可以实现解耦) 架构师
proto 网络挂载时选择通讯协议 (tcp/udp)
atime 访问存储数据时,会消耗磁盘IO, 影响磁盘性能
noatime 访问存储数据时,不要更改atime属性信息, 不会消耗磁盘IO, 减少磁盘性能消耗 优化
diratime 访问存储目录时,会消耗磁盘IO, 影响磁盘性能
nodiratime 访问存储目录时,不要更改目录atime属性信息, 不会消耗磁盘IO, 减少磁盘性能消耗 优化
客户端挂载操作
临时挂载操作: mount -t nfs 存储服务器地址:存储目录 本地挂载点目录
永久挂载操作:
方法一: 利用/etc/rc.local
方法二: 利用/etc/fstab
172.16.1.31:/data /mnt nfs defaults 0 0
PS: 关注系统启动顺序
先加载/etc/fstab ---> 启动网络服务 ---> 加载/etc/fstab(systemctl start remote-fs.target)
存储服务权限说明:*****
1)存储服务端配置文件参数没有设置正确(rw/ro xxx_squash)
2) 存储服务端存储目录本身权限配置问题
3)存储客户端挂载参数配置问题 (ro)
4)存储目录权限继承关系 (服务端配置文件中不要有目录层级配置)
八、存储服务常用命令
rpcinfo --- 查看nfs服务注册信息
rpcinfo -p 172.16.1.31
showmount --- 查看可用挂载目录信息
showmount -e 172.16.1.31
exportfs --- 管理nfs服务运行状态
exportfs -rv 平滑重启相当于systemctl reload nfs
九、存储服务企业应用
弃用NFS案例: 如何解决NFS服务单点故障
读取数据时:弃用NFS服务(将存储数据和web服务器数据做同步), 让用户读取web服务器本地数据
写入数据时:弃用NFS服务(写入数据到本地 将数据进行恢复同步),让用户写入web服务器本地数据
分布式存储