数据库运维
记录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:
wfs:中文

3. NFS服务部署

—3.1 知识铺垫

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

—3.2 服务端部署流程

——3.2.1 第一个历程: 安装存储服务器软件

yum install -y nfs-utils rpcbind

——3.2.2 第二个历程: 编写配置文件

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

——3.2.3 第三个历程: 创建存储目录

mkdir /data 
chown nfsnobody.nfsnobody /data

——3.2.4 第四个历程: 启动服务

systemctl start rpcbind.service 
systemctl enable rpcbind.service
systemctl start nfs 
systemctl enable nfs
[root@nfs01 ~]# rpcinfo -p localhost
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100024 1 udp 56602 status
100024 1 tcp 33318 status
100005 1 udp 20048 mountd
100005 1 tcp 20048 mountd
100005 2 udp 20048 mountd
100005 2 tcp 20048 mountd
100005 3 udp 20048 mountd
100005 3 tcp 20048 mountd
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
100021 1 udp 41029 nlockmgr
100021 3 udp 41029 nlockmgr
100021 4 udp 41029 nlockmgr
100021 1 tcp 37316 nlockmgr
100021 3 tcp 37316 nlockmgr
100021 4 tcp 37316 nlockmgr

—3.3 客户端部署流程

——3.3.1 第一个历程: 安装部署软件

[root@backup ~]#yum install -y nfs-utils(必须安装) rpcbind(选择安装)

——3.3.2 第二个历程

mount -t nfs 172.16.1.31:/data /mnt
[root@backup ~]# df -h
172.16.1.31:/data 48G 1.7G 47G 4% /mnt
[root@backup ~]# cd /mnt
[root@backup mnt]# touch oldboy.txt
[root@nfs01 ~]# ll /data
total 0
-rw-r--r-- 1 nfsnobody nfsnobody 0 May 7 17:00 oldboy.txt

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

第一步: 检查网络问题
ping 172.16.1.31
telnet 172.16.1.31 端口

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

第三步: 服务端进行确认检查
[root@nfs01 ~]# showmount -e localhost  --- 检查是否有可用的共享目录
第四步: 在客户端进行测试挂载
showmount -e 172.16.1.31 
mount -t nfs 172.16.1.31:/data /mnt
df -h

5 nfs服务端配置文件规范

exports配置文件样例:
/ 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 企业中配置文件映射参数配置方法

no_all_squash,root_squash(默认设置)
[root@nfs01 ~]# cat /var/lib/nfs/etab --- 查看NFS服务端默认配置参数
/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)
[root@nfs01 ~]# id nfsnobody
uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody)
[root@nfs01 ~]# id alex
uid=2000(alex) gid=2000(alex) groups=2000(alex)
[root@nfs01 ~]# chown alex.alex /data
[root@nfs01 ~]# vim /etc/exports 
/data 172.16.1.0/24(rw,sync,anonuid=2000,anonuid=2000)
此设置会只允许alex用户和root用户存储,并都映射为alex用户管理

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客户端相关命令参数说明

8.1 挂载命令mount

mount -t nfs 172.16.1.31:/data /mnt
mount -t nfs -o 挂载参数 172.16.1.31:/data /mnt 

PS: 对于综合架构中NFS服务,属于一种耦合度比较高的服务,存储服务器坏了,其他服务器会受影响。

8.2 mount命令参数

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

8.3 remount重新挂载企业案例

01. 文件系统出现逻辑错误,全部只读状态
02. 磁盘出现损坏情况(坏道) --- 换硬盘
恢复方法:mount -o remount rw /,然后重启

8.4 umount

-f, --force 强制卸载
-l, --lazy 懒惰卸载(在卸载目录里卸载)
PS: 以上两个参数可以实现强制卸载

8.5 NFS服务存储目录的权限和哪些配置有关系

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

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

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

9.1 服务端操作

第一个历程: 创建两个共享目录
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

9.2 客户端操作

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

9.3  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: 将所有链路强行断开

10. NFS服务重要文件信息

11.NFS服务优缺点总结

优点:
配置部署简单方便
服务程序稳定性较高
缺点:
可能出现单点故障(冗余能力) ---keepalived
没有认证访问极致
只能支持低并发存储(2000万pv)
赞(0)
MySQL学习笔记 » 第15章:NFS存储服务器