高级DBA运维
成长之路

第15章:NFS存储服务器

文章目录

1 为什么要有存储服务器

a 实现用户上传的数据统一共享存储
b 节省网站服务器磁盘购买成本

2 存储服务部署实现方式

—2.1 本地存储方式

NFS: network file system -- 网络文件系统 linux - linux服务器之间存储
FTP: 部署难度较大
samba: 可以实现windows -- linux主机之间存储数据 存储数据的效率不高

—2.2 分布式存储方式(大型企业)

mfs:
fastdfs:
glusterfs:
Chef:

3 NFS服部署

—3.1 知识铺垫

什么时RPC: 远程过程调用 Remote Procedure Call
RPC服务: 相当于中介, 可以实现让nfs客户端和服务端建立网络通讯

—3.2 nfs服务端部署流程

第一个历程: 安装存储服务器软件
yum install -y nfs-utils rpcbind

第二个历程: 编写配置文件
vim /etc/exports
/data 172.16.1.0/24(rw,sync)

01:定义存储数据的目录
02:允许哪个网段和主机可以存储数据
03:定义存储数据参数功能
同步存储概念(sync): 接收到存储数据 --- 硬盘中存储 数据更加安全
异步存储概念(async): 接收到存储数据 --- 内存中存储 --- 硬盘中存储 存储效率更高

第三个历程: 创建存储目录
mkdir /data 
chown nfsnobody.nfsnobody /data

第四个历程: 启动服务
systemctl start rpcbind.service 
systemctl enable rpcbind.service
systemctl start nfs 
systemctl enable nfs
[root@nfs01 bin]# rpcinfo -p 10.0.0.31

—3.3 客户端部署流程

第一个历程: 安装部署软件
yum install -y nfs-utils

第二个历程: 
[root@backup01 ~]#ps -ef|grep nfs
[root@backup01 ~]#systemctl start nfs
[root@backup01 ~]# umount -f /mnt
[root@backup01 ~]# mount -t nfs 172.16.1.31:/data /mnt
[root@backup ~]# df -h
Filesystem Size Used Avail Use% Mounted on
172.16.1.31:/data 48G 1.7G 47G 4% /mnt

4 nfs服务部署异常排错流程

第一步: 检查网络问题
[root@backup01 ~]# ping 172.16.1.31
[root@backup01 ~]# telnet 172.16.1.31 111

第二步: 检查服务端是否部署成功
检查配置文件信息
cat /etc/exports

第三步: 服务端进行确认检查
[root@nfs01 ~]# showmount -e localhost--- 检查是否有可用的共享目录
Export list for localhost:
/data 172.16.1.0/24

第四步: 在客户端进行测试挂载
[root@backup01 ~]# showmount -e 172.16.1.31 
[root@backup01 ~]# mount -t nfs 172.16.1.31:/data /mnt
[root@backup01 ~]# cd /mnt
[root@backup01 mnt]# touch 1.txt
[root@backup01 mnt]# touch 2.txt
[root@backup01 mnt]# ll
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Jun 27 00:15 1.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Jun 27 00:20 2.txt
第五步: 在服务端进行查看
[root@nfs01 ~]# ll /data
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 Jun 27 00:15 1.txt
-rw-r--r-- 1 nfsnobody nfsnobody 0 Jun 27 00:20 2.txt

5 nfs服务端配置文件规范

exports配置文件样例:
/ c                          master(rw) trusty(rw,no_root_squash)
/projects                    proj*.local.domain(rw)
指定共享目录                   允许访问的主机信息(网段或主机地址,域名方式)(参数信息)

*rw --- 让存储目录是可读写权限
ro --- 让存储目录时是只读权限
*sync --- 同步传输数据/尽量将数据存储到硬盘中
async --- 异步传输数据/先将数据存储到内存,最终将数据保存到硬盘 
all_squash --- 将所有用户身份都做映射
*no_all_squash --- 普通用户身份不做转换, 客户端是什么用户,服务端还是相同用户
*root_squash --- 将root用户身份做映射
no_root_squash --- 将root用户身份不做映射
*anonuid --- 修改nfs服务默认用户属主信息 (不修改默认映射为nfsnobody)
*anongid --- 修改nfs服务默认用户属组信息 (不修改默认映射为nfsnobody)

6 企业配置文件映射参数配置方法

[root@nfs01 data]# id nginx
uid=2000(nginx) gid=2000(nginx) groups=2000(nginx)
/data 172.16.1.0/24(rw,sync,no_all_squash,root_squash,anonuid=2000,anonuid=2000)默认使用
cat /var/lib/nfs/etab --- 查看NFS服务端默认配置参数
[root@nfs01 data]# 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=65534,anongid=65534,sec=sys,rw,secure,root_squash,all_squash)

总结: NFS服务存储目录的权限和哪些配置有关系
a 和服务端配置文件参数有关系 (ro/rw)
b 和服务端本身存储目录的属性权限有关系(修改属主和属组属性)

7  NFS/rpc服务相关进程信息

[root@nfs01 ~]# ps -ef|grep -E "nfs|rpc"
rpc 5903 1 0 05:42 ? 00:00:00 /sbin/rpcbind -w
rpcuser 5941 1 0 05:44 ? 00:00:00 /usr/sbin/rpc.statd --- 确保存储数据一致性
root 5948 2 0 05:44 ? 00:00:00 [rpciod]
root 7973 1 0 09:10 ? 00:00:00 /usr/sbin/rpc.idmapd --- 用户进行映射转换进程
root 7974 1 0 09:10 ? 00:00:00 /usr/sbin/rpc.mountd --- 实现网络挂载
root 7979 2 0 09:10 ? 00:00:00 [nfsd4_callbacks]
root 7983 2 0 09:10 ? 00:00:00 [nfsd] --- nfs服务主进程(保证服务是否正常运行)
root 7984 2 0 09:10 ? 00:00:00 [nfsd]
root 7985 2 0 09:10 ? 00:00:00 [nfsd]
root 7986 2 0 09:10 ? 00:00:00 [nfsd]
root 7987 2 0 09:10 ? 00:00:00 [nfsd]
root 7988 2 0 09:10 ? 00:00:00 [nfsd]
root 7989 2 0 09:10 ? 00:00:00 [nfsd]
root 7990 2 0 09:10 ? 00:00:00 [nfsd]

8 NFS客户端相关命令参数说明

mount
mount -t nfs 172.16.1.31:/data /mnt
mount -t nfs -o 挂载参数 172.16.1.31:/data /mnt 
PS: 对于综合架构中NFS服务,属于一种耦合度比较高的服务

mount命令参数
suid*/nosuid 确认在共享目录中设置的文件setuid权限是否生效
rw*/ro 确认存储目录是否有读写权限
exec*/noexec 确认存储目录中的可执行文件(命令/脚本)是否可以执行
auto*/noauto 确认挂载配置信息是否可以通过mount -a命令自动加载
remount 实现重新挂载

企业案例: 整个文件系统全部是只读状态
01. 文件系统出现逻辑错误 mount -o remount rw /
02. 磁盘出现损坏情况(坏道) --- 换硬盘

总结: NFS服务存储目录的权限和哪些配置有关系
a 和服务端配置文件参数有关系 (ro/rw)
b 和服务端本身存储目录的属性权限有关系(修改属主和属组属性)
c 和客户端挂载参数有关系
d 和父级目录的权限有关(继承关系)

9 测验:创建两个共享目录

/data/r 只能读取数据ro,采用同步方式存储数据sync web01 /data/r目录上 
/data/w 可以读写数据rw,采用异步方式存储数据async backup /data/w目录上

服务端操作:
第一个历程: 创建两个共享目录
mkdir /data/{r,w}
chown nfsnobody.nfsnobody /data/{r,w}

第二个历程: 编写配置文件
vim /etc/exports
/data/r 172.16.1.0/24(ro,sync)
/data/w 172.16.1.0/24(rw,async)

第三个历程: 重启服务
systemctl restart nfs

客户端操作:
web01: 
mkdir /data/r -p
mount -t nfs 172.16.1.31:/data/r /data/r

backup:
mkdir /data/w -p
mount -t nfs 172.16.1.31:/data/w /data/w

umount
-f, --force 强制卸载
-l, --lazy 懒惰卸载
PS: 以上两个参数可以实现强制卸载

10 NFS服务常见问题说明

问题一: touch: cannot touch ‘oldboy_r02.txt’: Stale file handle 文件句柄错误
出现原因: 服务端有配置改动,但是客户端没有进行重新挂载
解决方式:
1) 查看挂载信息
cat /proc/mounts 
2) 进行强制卸载
umount -lf 挂载点

问题二: wrong fs type
出现原因: 客户端没有安装nfs-utils软件, 无法识别nfs文件系统类型
解决方式:
1) 下载安装nfs相关软件
yum install -y nfs-utils 

问题三: 无法创建文件信息(延迟情况)
出现原因: 服务重启后,恢复上线会有延迟时间
解决方式:
1) 尽量采用平滑重启方式
systemctl reload nfs
reload: 将空闲链接进行直接断开 有数据传输的链路先将数据传输完毕,再断开链接
restart: 将所有链路强行断开



运维人员大招:
01. 重启服务 --- tomcat(java) 
02. 重新配置 
03. 重装系统

11 NFS服务重要文件信息

12 NFS服务优缺点总结

优点:

a 配置部署简单方便
b 服务程序稳定性较高

缺点:

a 可能出现单点故障,没有冗余能力,可以用keepalived解决
b 没有认证访问极致
c 只能支持低并发存储(200万PV)
赞(1)

评论 抢沙发

评论前必须登录!

 

LNMP社群 不仅仅是技术

关于我们网站地图