Linux中级のNFS+Sersync
NFS基本概述
1.NFS是Network File System的缩写即网络文件系统。 NFS 主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。
2.NFS 系统和 Windows 网络共享、网络驱动器类似, 只不过 windows 用于局域网, NFS用于企业集群架构中, 如果是大型网站,
会用到更复杂的分布式文件系统 FastDFS,glusterfs,HDFS
为什么要使用共享存储?
【1】实现多台服务器之间数据共享
【2】实现多台服务器之间数据一致
NFS应用场景
集群没有共享存储
【1】A用户上传"克蕾儿.png"经过负载均衡调度,将上传请求调度至web01服务器上。
【2】B用户访问A用户上传的"克雷额.png"图片,此时B用户被负载均衡调度至web02上,因为web02服务器没有这张图片,所以B用户无法看到A用户上传的图片。
集群有共享存储
【1】A用户上传"克蕾儿.png"无论被调度至web01还是web02,最终数据都被写入至共享存储。
【2】B用户访问A上传的"克蕾儿.png"时,无论调度至web01还是web02,最终都会上共享存储NFS服务器访问对应的文件,这样就可以访问到资源了。
NFS服务安装
环境准备
| 服务器系统 | 角色 | 外网IP | 内网IP |
|---|---|---|---|
| CentOS 7.9 | NFS服务端 | 10.0.0.31 | 172.16.1.31 |
| CentOS 7.9 | web01 | 10.0.0.7 | 172.16.1.7 |
| CentOS 7.9 | web02 | 10.0.0.41 | 172.16.1.41 |
注意: 不要忘记关闭防火墙, 以免默认的防火墙策略禁止正常的 NFS 共享服务
NFS服务端准备
关闭防火墙
【1】关闭Firewalld防火墙
【2】关闭Selinux防火墙
关闭Selinux防火墙命令:
[root@NFS ~]# sed -ri '#^SELINUX=#cSELINUX=disabled' /etc/selinux/config
[root@NFS ~]# setenforce 0
安装NFS服务
安装命令:
[root@NFS ~]# yum -y install nfs-utils
配置NFS服务
NFS服务程序的配置文件为 /etc/exports ,需要严格按照 共享目录的路径 允许访问的NFS客户端(共享权限参数) 格式书
写,定义要共享的目录与相应的权限,具体书写方式如下图所示。

示
【1】rw 读写权限
【2】sync 同时将数据写入到内存和硬盘中,保证不丢失数据
【3】all_squash 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户
配置说明:
将nfs服务端的 /data 目录共享给 172.16.1.0/24 网段内的所有主机
1) 所有客户端主机都拥有读写权限
2) 在将数据写入到NFS服务器的硬盘中后才会结束操作,最大限度保证数据不丢失
3) 将所有用户映射为本地的匿名用户(nfsnobody)
注:nfsnobody为nfs服务的默认的一个匿名用户
# NFS共享目录会记录至/var/lib/nfs/etab,如果该目录不存在共享信息,请检查/etc/exports是否配置错误
【1】在NFS服务器上建立用于NFS文件共享的目录,并设置对应权限
【2】启动NFS服务,并开机自启
【3】检查 /var/lib/nfs/etab文件
【4】为什么默认是nfsnobody,查看/etc/passwd中nfsnobody用户即可
【5】检测端口,出现rcp等即成功
NFS客户端web01、web02
客户端挂载
1.下载NFS服务
yum -y install nfs-utils
2.下载后无需开启,因为是客户端,不用备份相应静态文件。
3.客户端使用 showmount ‐e 查看远程NFS服务器 rpc 提供的可挂载 nfs 信息
4.挂载NFS服务端的共享文件/data
5.web02同样挂载NFS服务端的共享文件/data
6.在web02的/mnt/下创建 a.txt文件,在web01查看a.txt是否存在
7.在web01的/mnt/下删除a.txt文件,在web02查看/mnt/下a.txt是否存在
8.上述步骤均成功后,便设置开机自动挂载该共享文件
——————————————————————————————
9.不想使用NFS时,卸载NFS
步骤3.客户端使用 showmount ‐e 查看远程NFS服务器 rpc 提供的可挂载 nfs 信息
【1】showmount -e 远程NFS服务端/etc/exports配置的IP地址
步骤4、5.挂载NFS服务端的共享文件/data
步骤6.在web02的/mnt/下创建 a.txt文件,在web01查看a.txt是否存在
【web02】
【web01】
步骤7.在web01的/mnt/下删除a.txt文件,在web02查看/mnt/下a.txt是否存在
【web01】
【web02】
步骤8.开机自动挂载
【web02】
【reboot重启】
【再次连接查看结果 df -h】
【挂载成功,web01同上】
注:以上bian实现了web01和web02能够共享NFS服务端的NFS存储,即使用了NFS的企业场景。
步骤9.卸载NFS,web01为例
【卸载】
【删除开机自动挂载】:编辑/etc/fstab并删除相应配置。
NFS配置详解
| nfs共享参数 | 参数作用 |
|---|---|
| rw | 读写权限 |
| ro | 只读权限 |
| root_squash | 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户(不常用) |
| no_root_squash | 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员(不常用) |
| all_squash | 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户(常用) |
| no_all_squash | 无论NFS客户端使用什么账户访问,都不进行压缩 |
| sync | 同时将数据写入到内存与硬盘中,保证不丢失数据 |
| async | 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据 |
| anonuid | 配置all_squash使用,指定NFS的用户UID,必须存在系统 |
| anongid | 配置all_squash使用,指定NFS的用户UID,必须存在系统 |
ro验证

【1】NFS服务端修改完重启,并在/data创建a.txt
【2】客户端web01删除a.txt
【结果】web01只读,无法删除
验证all_squash、anonuid、anongid权限
【1.NFS服务端配置】
【2.服务端创建对应的用户】
【3.查看用户是否创建】
【4.重载nfs服务】
【5.授权共享目录为baozi】
【6.客户端web01、web02重新挂载验证】
【7.NFS服务端创建a.txt、b.txt、c.txt文件】
【7.web01查看结果:】
【8.web01客户端创建abc.txt文件】
【8.web02查看结果:】
【9.web02客户端删除abc.txt文件和a.txt文件】
【9.web01查看结果:】
Sersync实时同步
实时同步概述
1.什么是实时同步?
实时同步是一种只要当前目录发生变化则会触发一个事件,事件触发后会将变化的目录同步至远程服务器。
2.为什么要实时同步?
保证数据的连续性, 减少人力维护成本,解决nfs单点故障
3.实时同步工具选择
sersync+inotify+rsync
【Inotify】Inotify 是一个通知接口,用来监控文件系统的各种变化,如果文件存取,删除,移动。可以非常方便地实现文件异动告警,增量备份,并针对目录或文件的变化及时作出响应。 rsync+inotify 可以实触发式实时同步增量备份
【Sersync】sersync 是国人基于 rsync+inotify‐tools 开发的工具,不仅保留了优点同时还强化了实时监控,文件过滤,简化配置等功能,帮助用户提高运行效率,节省时间和网络资源。
实时同步实践
案例: 实现 web 上传视频文件,实则是写入 NFS 至存储,当NFS存在新的数据则会实时的复制到备份服务器
1.web上传视频至NFS存储
2.web和NFS的数据都备份再备份服务器的/backup
3.如何将NFS数据实时同步到备份服务器的/data目录
| 角色 | 外网IP(NAT) | 内网IP(LAN) | 安装工具 |
|---|---|---|---|
| web01 | eth0:10.0.0.7 | eth1:172.16.1.7 | |
| NFS-server | eth0:10.0.0.31 | eth1:172.16.1.31 | rsync+inotify+sersync |
| backup | eth0:10.0.0.41 | eth1:172.16.1.41 | rsync |
bakcup服务器配置
1.安装rsync
yum -y install rsync
2.配置rsync
[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync
gid = rsync
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
ignore errors
read only = false
list = false
auth users = rsync_backup
secrets file = /etc/rsync.passwd
log file = /var/log/rsyncd.log
#####################################
[backup]
comment = Hello
path = /backup
[sebackup] # 为实时同步创建的模块[sebackup]
path = /sebackup
3.建立对应的密码文件,并修改密码文件权限
4.创建对应备份目录并授权
5.启动 rsync
步骤3.建立对应的密码文件,并修改密码文件权限
步骤4.创建对应备份目录并授权
步骤5.启动 rsync
NFS-server实时同步服务器配置
1.安装sersync服务
[root@NFS ~]# mkdir -p /server/tools
[root@NFS ~]# cd /server/tools/
[root@NFS tools]# wget https://raw.githubusercontent.com/wsgzao/sersync/master/sersync2.5.4_64bit_binary_stable_final.tar.gz
[root@NFS tools]# tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz
注:给 GNU-Linux-x86 改名为 sersync
[root@NFS tools]# mv GNU‐Linux‐x86/ /usr/local/sersync
2.修改实时同步配置文件confxml.xml
3.创建密码文件:/etc/rsync.pas,设置密码为backup服务器/etc/rsync.passwd密码
4.创建实时监控备份目录/sewatch以及backup备份服务器端创建备份目录/sebackup
5.启动sersync服务
6.在/sewatch监控目录中创建{a..d}.txt五个目录,在backup服务器的/sebackup文件下查看是否实时同步
步骤一.
【结果】
步骤二.
【修改1】
【修改2】
【纠正】 localpath watch="/sebackup" 为了便于区分NFS和backup服务器端,改为/sewatch
步骤三.
【查看backup密码】
【创建密码文件】
【修改密码文件权限为600】
步骤四.
【NFS服务端创建监控目录watch /sewatch】
【backup服务器端实时备份目录为 /sersync】
步骤5.启动sersync服务
【NFS服务端启动sersync服务】
【在/sewatch中创建文件】
步骤6.查看同步结果
【backup服务器/sebackup】
补充sesync参数
总结
老实说学这个容易@.@
那么这里稍微梳理以下本人觉得比较 @.@ 的目录权限问题
1.Rsync 目录权限 chown rsync.rsync 本地备份目录
backup备份服务器需要配置/etc/rsyncd.conf文件
其中 uid = rsync , gid = rsync 是我们备份文档的属主、属组的名字
而/etc/rsyncd.conf中的 rsync_backup 则是连接认证用户
在客户端备份时使用
例如:rsync -avz --delete 备份源文件 rsync_backup@172.16.1.41:/备份路径
2.NFS 目录权限 chown nfsnobody nfsnobody 本地共享存储目录
NFS服务器是存储静态文件的地方,因为文件是从web01和web02等客户端传送过来,
为了防止他们登录过来是root权限,因此我们需要将其传送过来时的用户权限进行压
缩,所以使用all_squash比较安全。因此NFS服务端本地我们也只需要修改“共享文档
的属主属组即可”
3.sersync 目录权限无须修改,创建时root即可
sersync配置文件中,需要注意的主要是上述步骤二中划红圈的地方,
watch是本地监控目录,即本地发生变化,立刻实时同步到相应的backup服务器备份目
录当中去,因此我们还是要去修改backup服务器备份目录的属主属组。
啊啊啊啊~~~~辛苦了



















































浙公网安备 33010602011771号