文章目录
2. 存储服务
1. 基础知识
1. NFS 存储服务概介绍
- NFS是Network File System的缩写,中文意思是网络文件共享系统,它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录
2. 存储服务的种类
- FTP(文件传输协议)— 本地共享
- 分布式存储
- Mosefs 比较落伍
- glusterFS 较为常用
- FastDFS 最常用
3. NFS 存储服务的作用
- 实现数据的共享存储
- 便于数据操作管理
- 节省购买服务器磁盘开销
4. NFS 服务工作原理
- 服务端
- 启动 rpc 服务,开启 111 端口
- 启动 nfs 服务
- 实现nfs服务进程和端口好的注册
- 客户端
- 建立TCP网络连接
- 客户端执行挂载命令,进行远程挂载
- 可以实现数据远程传输存储
2. NFS 服务部署流程
- RPC:远程过程调用服务程序 — 租房的中介(端口)
1. 服务端部署
-
下载安装软件
yum -y install nfs-utils rpcbind
-
编写配置文件
vim /etc/exports # man exports 查看配置文件的帮助文档 # 数据存储目录 # 网络白名单 # 配置存储目录的权限信息 ----------------------------- /data 172.16.1.0/24(rw,sync) ------------------------------
-
创建 data 目录
mkdir /data chown nfsnobody:nfsnobody /data
-
启动服务程序
systemctl start rpcbind.service systemctl enable rpcbind.service systemctl start nfs systemctl enable nfs
2. 客户端配置
-
安装 nfs 服务软件
yum install -y nfs-utils
-
实现远程挂载目录
`mount` -t nfs 172.16.1.130:/data /mnt ------ERROR---------------- mount.nfs: access denied by server while mounting 192.168.80.130:/data # 在 server 上用 exportfs -rv 检验 /etc/exports 文件是否有误,根据错误判断 ----------------------------
3. NFS 服务挂载不上排查方法
-
服务端
-
检查 NFS 进程信息是否注册
`rpcinfo` -p localhost # 问题原因,服务启动顺序不对,没有启动 NFS
-
检查有没有可以用存储目录
`showmount` -e localhost # 问题原因:配置文件书写有问题
-
在服务端进行挂载测试
是否能在存储目录中创建或删除数据
-
-
客户端测试
-
检查 NFS 服务是否启动
-
网络问题
ping IP 查看网络连接 telnet IP:port 查看端口是否异常
-
3. NFS 服务端详细配置说明
1. 实现多个网段主机可以进行挂载
## 第一种方法
vim /etc/exports
/data 172.16.1.0/24(rw,sync) 192.168.80.0/24(rw,sync)
## 第二种方法
vim /etc/exports
/data 172.16.1.0/24(rw,sync)
/data 192.168.80.0/24(rw,sync)
2. 共享目录的权限和那些因素有关
- 和存储目录的本身权限有关(文件权限、属主属组)
- 和配置文件中的权限配置有关
3. NFS 配置参数权限
rw
– 读写权限ro
– 只读权限sync
– 同步存储数据 直接将数据保存到磁盘(数据存储安全 慢)async
– 异步存储数据 直接将数据保存到内存(存储数据块 不安全)no_root_squash
– 不要将 root 用户身份进行转换root_squash
– 将 root 用户身份进行转换all_squash
– 将所有用户身份都进行转换no_all_squash
– 不要将普通用户身份进行转换
4. 企业互联网公司如何配置 NFS 各种 squash 参数
-
保证网站存储服务器数据安全性(默认设置):
-
no_all_squash
需要设置,共享目录权限改为上游普通用户,上下游用户的 uid 必须一致 -
root_squash
需要配置,防止内部人员搞破坏
-
-
企业中如何编辑 NFS 配置文件
-
通用方法
/data 172.16.1.0/24(rw,sync)
-
特殊情况(让部分人员只能看目录中的数据,但是不能操作)
`/data 172.16.1.0/24(ro,sync)`
-
修改默认用户的匿名用户
/data 192.168.80.0/24(rw,sync,anonuid=xxx,anongid=xxx) ## 修改匿名用户
-
5. nfs 服务问题
- nfs 服务重启,挂载后创建数据比较慢
- 原因:服务器重启方式不正确
- restart 重启服务 强制断开所有连接
- reload 重启服务(平滑连接) 强制断开没有数据传输的连接
4. NFS 客户端的详细配置说明
1. 如何实现自动挂载
-
利用
rc.local
echo "mount -t nfs 172.16.1.130:/data /mnt" >> /etc/rc.local
-
利用
/etc/fstab
vim /etc/fstab 172.16.1.130:/data /mnt
-
网络自动挂载之后开机后不自动挂载?
- 原因:由于网络服务的启动慢于
/etc/fstab
,所以开机启动后不识别网络挂载配置 - 解决方式: 开机自启 remote-fs.target
- 原因:由于网络服务的启动慢于
-
客户端
mount
命令参数-
以下参数的使用方式为:
mount -o -rw 挂载目录 挂载点 vim /etc/fstab 挂载目录 挂载点 磁盘格式 #参数 0 0
-
rw
– 实现挂载点目录可读可写(默认) -
ro
– 实现挂载点目录可读 -
suid
– 使共享目录中使setuid
起作用(默认) -
nosuid
– 使共享目录中使setuid
不起作用(默认) 提高共享目录的安全性 -
exec
– 共享目录中的执行文件可以直接执行 -
noexec
– 共享目录中的执行文件无法直接执行 提高共享目录的安全性 -
auto
– 可以实现自动挂载 mount -a -
noauto
– 不可以实现自动挂载 -
nouser
– 禁止普通用户卸载挂载点
-
-
客户端如何卸载
umount -lf /mnt # 强制卸载挂载点 -l # 不退出挂载点目录进行卸载 -t # 强制进行卸载操作
3. 实时同步服务
1. 实现实时同步数据原理
- 部署好 rsync 守护进程服务,实现数据传输
- 部署好 inotify 监控服务,实现目录中数据变化监控
- 部署好 sersync 实时同步服务,将变化的数据进行实时备份传输
2. 实时同步服务的部署
-
部署好 rsync 守护进程服务
- 服务端
- 客户端
-
部署好 inotify 监控服务
-
安装软件
`yum` install -y inotify-tools
-
熟悉命令的使用
inotifywait # 监控目录数据信息变化 # 命令格式 inotifywait [参数] 监控的目录 # 参数大全 -m --monitor # 实现一直监控目录的数据变化 -r --recursive # 进行迭代监控 -q --quiet # 尽量减少信息的输出 --format # 指定输出信息的格式 --timefmt # 指定输出的时间信息格式 -e --event # 指定监控的事件信息 #创建文件时的监控信息 /tmp/ CREATE test.txt # 一个文件被创建 /tmp/ OPEN test.txt # 打开创建的文件 /tmp/ ATTRIB test.txt # 修改文件的属性信息 /tmp/ CLOSE_WRITE,CLOSE test.txt # 保存关闭一个文件 # 删除文件时的监控信息 /tmp/ DELETE test.txt # 向文件中写入信息时的监控信息 /data/ CREATE user10 /data/ OPEN user10 /data/ MODIFY user10 /data/ CLOSE_WRITE,CLOSE user10 # sed命令修改文件原理 /data/ OPEN user10 #打开文件 /data/ CREATE sedpSAFR7 #创建出一个临时文件(内存) /data/ OPEN sedpSAFR7 #临时文件进行打开 /data/ ACCESS user10 #读取源文件内容 /data/ MODIFY sedpSAFR7 #修改临时文件 /data/ ATTRIB sedpSAFR7 #临时文件属性变化 /data/ CLOSE_NOWRITE,CLOSE user10 #不编辑直接关闭源文件 /data/ CLOSE_WRITE,CLOSE sedpSAFR7 #写入关闭临时文件 /data/ MOVED_FROM sedpSAFR7 #将临时文件移除 /data/ MOVED_TO user10 #移入一个新的user10源文件
##notify 监控命令模板: inotifywait -mrq --timefmt "%F" --format "时间:%T 改动目录:%w 文件:%f 事件信息:%e" /tmp -e CREATE touch a.txt 时间:2021-04-28 改动目录:/tmp/ 文件:a.txt 事件信息:CREATE
-
-
部署好 sersync 实时同步服务
-
下载安装
sersync
https://github.com/wsgzao/sersync # 下载网址 rz -y # 选择需要上传的数据信息 # 将下载的压缩包进行解压并移动至 /usr/local/ 目录下 # 进入 sersync 目录,修改 .xml 文件 vim /usr/local/sersync/confxml.xml [修改的内容如下] <sersync> <localpath watch="/backup"> ## 监听本地那个目录 <remote ip="172.16.1.131" name="backup"/> ## 同步的远程目录及 IP </localpath> <rsync> <commonParams params="-az"/> ## rsync 的参数 <auth start="true" users="rsync_backup" passwordfile="/etc/rsync.password"/> ## rsync 的密码 <userDefinedPort start="true" port="873"/><!-- port=874 --> ## 端口号 <timeout start="false" time="100"/><!-- timeout=100 --> <ssh start="false"/> </rsync> [精致的结尾]
-
启动
sersync
# 将命令写入系统环境变量 # 执行命令 sersync -dro /usr/local/sersync/confxml.xml # 参数介绍 参数-d:启用守护进程模式 参数-r:在监控前,将监控目录与远程主机用rsync命令推送一遍 c参数-n: 指定开启守护线程的数量,默认为10个 参数-o:指定配置文件,默认使用confxml.xml文件 参数-m:单独启用其他模块,使用 -m refreshCDN 开启刷新CDN模块 参数-m:单独启用其他模块,使用 -m socket 开启socket模块 参数-m:单独启用其他模块,使用 -m http 开启http模块 不加-m参数,则默认执行同步程序
-