NFS +inotify+rsync 实现数据的远程挂载与实时增量备份

NFS 网络文件系统

  • 功能: 用户可以像访问自己的本地文件系统一样使用网络中的远端系统上的文件
  • 原理: 用户进程——>RPC服务(portman)——>tcp/ip协议栈——>远端主机RPC服务 后 ——>远端NFS服务——>远端主机本地磁盘数据——>NFS服务——>tcp/ip协议栈——>本地数据
  • 优点: 易于实现前段服务器代理分流的时候处理sission以及数据查找时找不到数据等问题,且同时起到了就算任何一个web服务器宕机都不影响数据的访问
  • 缺点: 单点失败 所有数据都在同一个物理主机上,一旦物理主机宕机会导致整个项目存放的数据丢失无法访问,解决办法:做基于inotify+rsync数据实时增量备份处理这个问题

    NFS 搭建 ( 基于启动文件/etc/fatab 或 自动挂载autofs)

  • 包:nfs-utils,rpcbind,tcp_wrappers
  • linux内核需要支持nfs.ko
  • 日志:/var/lib/nfs/
  • 配置文件: /etc/exports ,/etc/exports.d/*.exports
  • 服务开启:systemctl start nfs-server

    文件格式:

  • 共享文件主机:192.168.47.117

host:主机1(opt1,opt2) 主机2(opt1,opt2)

单个主机:    # ipv4,ipv6,FQDN
IP networks:# 两种掩码格式均支持 172.18.0.0/255.255.0.0 172.18.0.0/16
wildcards:  # 主机名通配,例如*.xiehegang.online,IP不可以
netgroups:  # NIS域的主机组,@group_name
anonymous:  # 表示使用*通配所有客户端

#-----------------------------------------------------------------------------------------------------------------------------
option:(ro,sync,root_squash,no_all_squash)

ro,rw             # 只读和读写
async             # 异步,数据变化后不立即写磁盘,性能高
sync              # (1.0.0后为默认)同步,数据在请求时立即写入共享存储磁盘
root_squash       # (默认)远程root映射为nfsnobody,UID为65534,CentOS8 为nobody,早期版本是4294967294(nfsnobody)
no_root_squash    # 远程root映射成root用户
all_squash        # 所有远程用户(包括root)都变成nfsnobody,CentOS8 为nobody
no_all_squash     # (默认)保留共享文件的UID和GID
anonuid和anongid  # 指明匿名用户映射为特定用户UID和组GID,而非nfsnobody,可配合all_squash使用

#-----------------------------------------------------------------------------------------------------------------------------

# 例
/data/app1/  192.168.47.106(ro,sync,no_all_squash)
/data/app2   192.168.47.106(rw,no_rootsquash,all_squash)
  • 挂载主机 192.168.47.106

# 查看网络共享情况
showmount -e 192.168.47.117

# 创建挂载点并挂载
mkdir /data/webdata/ -pv;
mount 192.168.47.117:/data/app1  /data/webdata 

# 完成文件的挂载,创建文件,在另一个主机上可以看到, 但是App2挂载点就无法创建文件,因为47.117的配置文件设置了ro
#------------------------------------------------------------------------------------------------------------------------------
# 在/etc/fatab 下实现自动挂载,防止断电导致挂载丢失,**追加**以下内容

192.168.47.117:/data/app1         /data/webdata             nfs     _netdev        0 0

#------------------------------------------------------------------------------------------------------------------------------
# 如果有需求也可像访问ls/msic/cd 访问光盘一样设置实时挂载,即:访问即挂载(aotofs)
# 安装autofs
yum install -y autofs

# 编辑配置文件 vi /etc/auto.misc 追加内容
nfs             -fstype=nfs             192.168.47.117:/data/app1

# 开启autofs服务
systemctl start autofs

# 访问目录:
cd /msic/app1 

基于inotify+rsync 实现增量备份

  • 备份NFS主机:192.168.47.129
  • linux内核版本: 大于2.6.13

# 修改内核参数:
vim /etc/sysctl.conf
fs.inotify.max_queued_events=66666
fs.inotify.max_user_watches=100000

# 重新应用
sysctl -p

# 查看修改情况
cat /proc/sys/fs/inotify/*

inotify-tools 工具

  • inotify-tools安装工具:yum install inotify-tools (yum -y install epel-release epel源没安装的话)
  • inotifywait 命令选项:

-m, --monitor       # 始终保持事件监听
-d, --daemon        # 以守护进程方式执行,和-m相似,配合-o使用
-r, --recursive     # 递归监控目录数据信息变化
-q, --quiet         # 输出少量事件信息
--exclude           # 指定排除文件或目录,使用扩展的正则表达式匹配的模式实现
--excludei          # 和exclude相似,不区分大小写
-o, --outfile       # 打印事件到文件中,相当于标准正确输出,注意:使用绝对路径
-s, --syslogOutput  # 发送错误到syslog相当于标准错误输出
--timefmt           # 指定时间输出格式
--format            # 指定的输出格式;即实际监控输出内容
-e                  # 指定监听指定的事件,如果省略,表示所有事件都进行监听

# --timefmt 格式 --------------------------------------------------------------------------------------------------------------------

%Y # 年份信息,包含世纪信息
%y # 年份信息,不包括世纪信息
%m # 显示月份,范围 01-12
%d # 每月的第几天,范围是 01-31
%H # 小时信息,使用 24小时制,范围 00-23
%M # 分钟,范围 00-59

例:--timefmt "%Y-%m-%d %H:%M"

# --format 格式 --------------------------------------------------------------------------------------------------------------------
%T  # 输出时间格式中定义的时间格式信息,通过 --timefmt option 语法格式指定时间信息
%w  # 事件出现时,监控文件或目录的名称信息
%f  # 事件出现时,将显示监控目录下触发事件的文件或目录信息,否则为空
%e  # 显示发生的事件信息,不同的事件默认用逗号分隔
%Xe # 显示发生的事件信息,不同的事件指定用X进行分隔

例:--format "%T %w%f event: %;e"
# -e 格式 --------------------------------------------------------------------------------------------------------------------
create          # 文件或目录创建
delete          # 文件或目录被删除
modify          # 文件或目录内容被写入
attrib          # 文件或目录属性改变
close_write     # 文件或目录关闭,在写入模式打开之后关闭的
close_nowrite   # 文件或目录关闭,在只读模式打开之后关闭的
close           # 文件或目录关闭,不管读或是写模式
open            # 文件或目录被打开
moved_to        # 文件或目录被移动到监控的目录中
moved_from      # 文件或目录从监控的目录中被移动
move            # 文件或目录不管移动到或是移出监控目录都触发事件
access          # 文件或目录内容被读取
delete_self     # 文件或目录被删除,目录本身被删除
unmount         # 取消挂载

例: -e create,delete,moved_to,close_write, attrib

inotify 完整使用范例

# 监控一次性事件
inotifywait /data
# 持续前台监控
inotifywait -mrq /data
# 持续后台监控,并记录日志
inotifywait -o /root/inotify.log -drq /data --timefmt "%Y-%m-%d %H:%M" --format
"%T %w%f event: %e"
# 持续前台监控特定事件
inotifywait -mrq /data --timefmt "%F %H:%M" --format "%T %w%f event: %;e" -e
create,delete,moved_to,close_write,attrib

rsync 实现增量备份

  • 包 rsync
  • 服务文件:/usr/lib/systemd/system/rsyncd.service
  • 配置文件:/etc/rsyncd.conf
  • 端口:873/tcp
  • 格式:rsync [OPTION...] SRC... [DEST]

rsync有三种工作方式:
1. 本地文件系统上实现同步。命令行语法格式为上述"Local"段的格式。
2. 本地主机使用远程shell和远程主机通信。命令行语法格式为上述"Access via remote shell"段的格
式。
3. 本地主机通过网络套接字连接远程主机上的rsync daemon。命令行语法格式为上述"Access via
rsync daemon"段的格式。

本例使用独立方式运行rsync 实现同步

  • 以独立服务方式运行 rsync (192.168.47.117)

# 安装
 yum -y install rsync

#创建rsync服务器的配置文件
vi /etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections = 0
ignore errors
exclude = lost+found/
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
reverse lookup = no
hosts allow = 192.168.47.0/24
[backup]
path = /backup/
comment = backup
read only = no
auth users = rsyncuser
secrets file = /etc/rsync.pass

# 服务器端准备目录

cd /; mkdir /backup

# 服务器端生成验证文件
echo "rsyncuser:justin" > /etc/rsync.pass
chmod 600 /etc/rsync.pass

#启动服务
/usr/bin/rsync --daemon ,rsync --daemon
  • 备份服务器 192.168.47.129

#客户端配置密码文件
echo "justin" > /etc/rsync.pass
chmod 600 /etc/rsync.pass 

#客户端测试同步数据
rsync -avz --delete --password-file=/etc/rsync.pass /data/app1   [email protected]::/backup

创建脚本文件,实现实时拉取,基于inotify + rsync


vim  /etc/profile.d/bf.sh
#!/bin/bash
SRC='/data/app'
DEST='[email protected]::backup'
inotifywait -mrq --timefmt '%Y-%m-%d %H:%M' --format '%T %w %f' -e
create,delete,moved_to,close_write,attrib ${SRC} |while read DATE TIME DIR
FILE;do
FILEPATH=${DIR}${FILE}
rsync -az --delete --password-file=/etc/rsync.pass $SRC $DEST && echo
"At ${TIME} on ${DATE}, file $FILEPATH was backuped up via rsync" >>
/var/log/changelist.log
done

. /etc/profile.d/bf.sh 

最终效果

服务器 47.106 的/data/webdata 的文件实际位置为 47.117 的/data/app1,
服务器 47.129 备份 47.117 /data/app1 的数据到本地的/backup文件夹下

当然这是本人的实验,可能会有过程中错误,如有发现欢迎评论,谢谢~

原文地址:https://www.cnblogs.com/Justin0717/p/12074755.html

时间: 2024-10-02 01:17:56

NFS +inotify+rsync 实现数据的远程挂载与实时增量备份的相关文章

一分钟读懂数据的完全、差异以及增量备份

常用的数据备份方式有完全备份.差异备份以及增量备份,那么这三种备份方式有什么区别,在具体应用中又该如何选择呢? 1.备份方式简介完全备份(Full Backup)备份全部选中的文件夹,并不依赖文件的存档属性来确定备份哪些文件.在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份.换言之,清除存档属性.完全备份就是指对某一个时间点上的所有数据或应用进行的一个完全拷贝.实际应用中就是用一盘磁带对整个系统进行完全备份,包括其中的系统和所有数据.这种备份方式最大的好处就是只要用一盘磁带,就可以

rsync+inotify实现同步数据

1.rsync man一下sync,就会发现:sync-flush file system buffers,它是一个把缓冲区中的数据同步到文件系统中的一个命令:而rsync其实就是remote rsync,它是一个远程同步工具,兼具cp和scp的功能,rsync命令的使用几乎和scp是一样一样的.rsync是通过超级守护进程xinetd进行触发同步的. 1)优点:与cp和scp相比来说,rsync更快,更安全,支持增量备份.rsync在数据同步的过程中,不像cp一样全部都拷贝,而是先去比对特征码

inotify+rsync数据同步

安装常用工具: yum install tree nmap sysstat dos2unix lrzsz -y 设置两台机器主机名 hostname inotify hostname rsync 这里测试,就直接hostname修改了,要使永久生效,还需要修改 /etc/network/sysconfig和/etc/hosts文件 rsync有三种模式: 1.单个主机的本地数据传输(此事类似于cp命令) 例如:rsync -avz /etc/hosts /home/ 2.借助rpc.ssh等通道

mount 远程挂载Nfs

服务器:192.168.20.204客户端:192.168.20.2031. 在服务器配置/etc/export 添加可以共享的文件夹和允许的客户端地址/home/dir 192.168.20.203(rw,no_root_squash,async) 要加上no_root_squash,async,不然会出现reason given by server: Permission denied 重启nfs服务器service nfs restart2. 在客户端运行mkdir -p /mnt/dir

inotify+rsync实现实时同步

引言:rsync实现数据备份,inotify监控文件系统提供通知功能,二者结合能够实现服务器之间文件的实时同步. rsync 特性: 可以镜像保存整个目录树和文件系统: 增量同步数据,文件传输效率高: 可以保持原有文件的权限.时间等属性: 加密传输数据,保证了数据的安全性: 支持断点续传: 可以使用rcp.ssh等方式传输文件,也可以通过socket连接传输文件: 支持匿名传输: rsync4种模式: 本地shell 远程shell 查询(列表)模式 服务器模式 本地shell模式: rsync

rsync+inotify+ssh远程实时增量同步

一.准备工作 -主服务器: Rsync,发起端 Inotify Ssh IP:192.168.10.128 -备份服务器 ssh,备份端 IP:192.168.10.129 二.部署过程 1.备份端建立上传用户,并设置权限 -创建用户 [[email protected] ~]# useradd rput [[email protected] ~]# passwd rput -为同步目录设置访问权限 [[email protected] ~]# chown -R rput:rput/var/ww

rsync+nfs+inotify

rsync:备份服务和scp差不多但是不同的是rsync是增量备份而scp是全量备份,更加节省磁盘.(备份服务器(数据库文件,全网重要文件 )) 好处:增量备份 缺点:大文件传输存在瓶颈 ------------------------------------------------------------------------------------------------ nfs:网络文件系统(文件服务器(jsp,jpg,gif等文件)) 优点:稳定性较好. 缺点:只能处理tb级文件.容易

inotify+rsync+sersync实时数据备份

第1章 rsync备份服务 1.1 rsync软件介绍 rsync软件官方链接地址:http://www.samba.org/ftp/rsync/rsync.html 提示信息: man rsync查看客户端说明信息 man rsyncd.conf查看服务端配置 Rsync是一款开源的.快速的.多功能的.可实现全量及增量的本地或远程数据同步备份的优秀工具 全量:将全部数据,进行传输覆盖 cp mv scp 增量:只传输差异部分的数据 rsync rstync适用于unix/linux/windo

企业案例rsync+inotify同步web数据

应用场景: 公司后端有两台nginx服务器,因还在测试阶段.故开发经常需要更新web程序,而每次更新都需要上传两次.现在两台web服务器还好.如果以后随着业务量的增长,4.5台的时候还需要挨个上传就有点苦逼了.故我打算使用rsync+inotify组合来实现服务器的数据时时同步. rsync介绍: rsync是linux/UNIX系统下的文件同步和数据传输工具,采用rsync算法使一个客户机和远程文件服务器之间的文件同步.通过rsync可以将同一个服务器的数据从一个分区备份到另一个分区,也可以将