服务概述
Nfs是network file system的缩写,中文意思是网络文件系统,主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或者目录
互联网中小型网站集群架构后端常用Nfs进行相互据共享
大型网站,有可能用到更复杂的分布式文件系统,例如:Moosefs GlusterFs FastDFS
存储服务器存在的意义
①实现数据统一存储
②节省磁盘购买成本
存储服务存储原理
- 在存储客户端创建本地存储数据目录
- 在存储服务端创建共享存储数据目录
- 实现客户端目录和存储目录建立挂载
客户端目录中操作数据等价于存储服务器目录中操作数据
部署过程
服务端
- 安装软件
yum -y install rpcbind nfs-utils
- 编写配置文件
vim /etc/exports
- 创建存储目录
mkdir /data
chown nfsnobody.nfsnobody /data
- 编写本地解析配置文件
vim /etc/hosts
- 启动服务程序
systemctl start nfs rpcbind
客户端
- 安装软件程序
yum -y install nfs-utils
2.挂载应用存储服务
临时挂载
mount -t nfs ip地址或者主机名:/存储目录 挂载点
永久挂载
①vim /etc/rc.local
②vim /etc/fstab( 先加载/etc/fstab —> 启动网络服务 —> 加载/etc/fstab(systemctl start remote-fs.target))
mount -o 挂载参数
/proc/mounts
rsize 提示数据存储效率,减缓存储服务器压力 在客户端内存中设置了缓存
wsize 提升数据读取效率,减缓存储服务器压力 在客户端内存中设置了缓冲
hard 实现长连接挂载操作 (对于架构而言,配置hard容易造成耦合度过程) 架构师
soft 实现长连接挂载操作(具有超时时间timeo=600) (对于架构而言,配置soft可以实现解耦) 架构师
proto 网络挂载时选择通讯协议 (tcp/udp)
atime 访问存储数据时,会消耗磁盘IO, 影响磁盘性能
noatime 访问存储数据时,不要更改atime属性信息, 不会消耗磁盘IO, 减少磁盘性能消耗 优化
diratime 访问存储目录时,会消耗磁盘IO, 影响磁盘性能
nodiratime 访问存储目录时,不要更改目录atime属性信息, 不会消耗磁盘IO, 减少磁盘性能消耗 优化
配置文件参数
/var/lib/nfs/etab---- 记录nfs服务配置信息
rw ---- 是否允许向存储目录中存储数据,可读可写
ro ---- 是否允许向存储目录中存储数据,只读
async ---- 异步传输数据 (先存储到内存中,再存储到磁盘中)
sync ---- 同步传输数据 (直接存储到磁盘中)
root _squash ---- 是否将用户信息做映射转换 将root用户身份进行转换(默认转换为用户nfsnobody)
np_root _squash ---- 是否将用户信息做映射转换 不将root用户身份进行转换
all_squash ---- 是否将用户信息做映射转换 将普通用户身份进行转换 (默认转换为用户nfsnobody)
no_all_squash ---- 是否将用户信息做映射转换 不将普通用户身份进行转换
anonuid ---- 指定映射用户身份信息 (uid)
anongid ---- 指定映射用户身份信息 (gid)
总结:参数配置时,尽量配置root_squash,no_all_squash,anonuid=xxx,anongid=xxx
存储服务常用命令
rpcinfo 查看nfs服务注册信息
rpcinfo -p IP地址
注册之前显示状态
注册之后显示状态
showmount 查看可用挂载目录信息
showmount -e IP地址
exportfs 管理nfs服务运行状态
exportfs -arv 配置文件 不用重启服务,配置文件也能生效
存储服务权限设置
存储服务端配置文件参数没有设置正确(rw/ro xxx_squash)
存储服务端存储目录本身权限配置问题
存储客户端挂载参数配置问题 (ro)
存储目录权限继承关系 (服务端配置文件中不要有目录层级配置)
存储服务企业应用
弃用Nfs案例:如何解决Nfs服务单点故障
读取数据时:弃用Nfs服务(将存储数据和web服务器数据做同步),让用户读取web服务器本地数据
写入数据时:弃用Nfs服务(写入数据到本地 将数据进行恢复同步),让用户写入web服务器本地数据
分布式存储