day11.4
day11.4
[toc]
## NFS共享存储
## 开机自动挂载
```bash
# 开机自动挂载配置文件
[root@backup ~]# vim /etc/fstab
172.16.1.31:/data /var/www/html/user_data nfs defaults 0 0
# 检查配置是否有问题
[root@nfs ~]# mount -a
```
## NFS卸载
```bash
# 卸载挂载目录
[root@web01 ~]# umount /var/www/html/user_data
# 强制卸载
[root@web01 ~]# umount -lf /var/www/html/user_data
```
## NFS挂载其他选项
```bash
# 在企业工作场景,通常情况NFS服务器共享的只是普通静态数据(图片、附件、视频),不需要执行suid、exec等权限,挂载的这个文件系统只能作为数据存取之用,无法执行程序,对于客户端来讲增加了安全性。例如: 很多木马篡改站点文件都是由上传入口上传的程序到存储目录。然后执行的。
```
```bash
# 通过mound -o指定挂载参数,禁止使用suid,exec,增加安全性能
[root@nfs-client ~]# mount -t nfs -o nosuid,noexec,nodev 172.16.1.31:/data /mnt
#通过mount -o指定挂载参数,禁止更新目录及文件时间戳挂载
[root@nfs-client ~]# mount -t nfs -o noatime,nodiratime 172.16.1.31:/data /mnt
```
| nfs共享参数 | 参数作用 |
| -------------- | ------------------------------------------------------------ |
| rw | 客户端针对服务端的共享目录有可读,可写权限 |
| ro | 客户端针对服务端的共享目录只读权限 |
| root_squash | 客户端必须是以root身份写入共享目录文件时,到服务端才能以nfs的系统用户写入 |
| no_root_squash | 客户端以root身份连接服务端,也会以nfs服务器的root用户来操作共享目录 |
| all_squash | 无论NFS客户端用什么用户访问共享目录,到服务端都是nfs的系统用户权限 |
| no_all_squash | 无论NFS客户端使用什么账户访问,都不会变成nfs系统用户的身份 |
| sync | 同时将数据写入到内存与硬盘中,保证不丢失数据 |
| async | 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据 |
| anonuid | 配置all_squash使用,指定NFS的用户UID,必须存在系统 |
| anongid | 配置all_squash使用,指定NFS的用户GID,必须存在系统 |
## NFS存储小结
```bash
1.NFS存储优点
1)NFS文件系统简单易用、方便部署、数据可靠、服务稳定、满足中小企业需求。
2)NFS文件系统内存放的数据都在文件系统之上,所有数据都是能看得见。
2.NFS存储局限
1)存在单点故障, 如果构建高可用维护麻烦web->nfs()->backup
2)NFS数据明文, 并不对数据做任何校验。3)客户端挂载NFS服务没有密码验证, 安全性一般(内网使用)
3.NFS应用建议
1)生产场景应将静态数据尽可能往前端推, 减少后端存储压力
2)必须将存储里的静态资源通过CDN缓存jpg\png\mp4\avi\css\js
3)如果没有缓存或架构本身历史遗留问题太大, 在多存储也无用
```
## rsync结合inotify实时同步
```bash
# inotify概述
inotify其实是一个监控命令,监控一个文件或目录状态
```
```bash
# 1.安装inotify
[root@nfs ~]# yum install -y inotify-tools
# 2.选项
-m 持续监控
-r 递归
-q 静默,仅打印时间信息
-e 指定监控事件
--timefmt 指定时间的输出格式
--format 指定事件输出格式
%xe 事件
%w 目录
%f 文件
access 访问
modify 内容修改
attrid 属性修改
close_write 修改真是内容
open 打开
create 创建
dalete 删除
umount 卸载
```
```bash
# 实时监控(客户端)
1.编写脚本
[root@nfs ~]# vim don.sh
ml="/data/"
export RSYNC_PASSWORD=123
inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write ${ml}|while read line;do
rsync -az --delete ${ml} rsync_backup@172.16.1.41::data >/dev/null
done &
2.执行脚本
[root@nfs ~]# sh don.sh
3.在/data目录下创建文件
[root@nfs data]# touch 2.txt
# 切换到服务端
1.在服务端的目录下看看是否同步过来
[root@backup ~]# ll /data/
-rw-r--r-- 1 www www 0 May 19 15:36 2.txt
```