rsync+inotify-tools自动备份服务详解

rsync+inotify-tools自动备份服务详解

1、rsync概述

rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步,端口号=873

2、应用场景

应用场景 说明
rsync作为命令使用 临时拉取,推送数据.未来这个需求可以通过scp命令实现
rsync+crond 定时备份,定期备份案例.(定时任务进行备份+通过rsync传输备份)不常用->文件达到一定数量时会导致数据差异
rsync+inotify Inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,可以监控文件系统的各种变化,当文件有任何变动时,就触发rsync同步
rsync+inotify+sersync 将前两个服务监控和传输进行整合->常用

3、rsync本地模式->不常用

rsync -a /etc/ /tmp/    #将etc目录传输到/tmp下
rsync -a /etc /tmp/

在rsync对于目录 /etc/ /etc 是有区别的

/etc /etc目录+目录的内容

/etc/ /etc/目录下面的内容

4、rsync远程模式

#推送
第1次
rsync -av /etc  [email protected]:/tmp    #将本地etc目录传输到目标端/tmp下
第二次
rsync -av /etc   [email protected]:/tmp    #发现推送失败,没有传输任何东西,因为rsync服务是增量备份,当目录无变化时不会推送

#拉取
rsync -av [email protected]:/etc /tmp   #将目标端etc目录传输到本地tmp下

5、rsync常见参数

命令 释义
-a 归档模式,表示以递归方式传输文件,并保持所有文件属性
相当于-rlptgoD
-r递归复制
-l复制软连接
-p保持权限不变
-m保持修改时间不变
-o所有者不变
-g用户组不变
-D devices specials 设备与特殊文件
-v 详细模式输出
-q 精简输出模式
-r 对子目录以递归模式处理
-p 保持文件权限
-P 显示传输速度 等同于 --partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
-z 对备份的文件在传输时进行压缩处理(公网)
-H 保留硬链结
-–port 指定其他的rsync服务端口
-–progress 在传输时显示备份过程
–-delete 目标目录与源目录保持一致的传输(高度保持2遍一致,实时同步)
-–password-file 从FILE中得到密码->指定密码文件
–bwlimit 限速,注意不要与-z一起使用
–exclude
–exclude-from
从需要传输的列表中排除文件
当需要排除的文件太多时,创建一个文件,文件里写需要排除的文件名字,然后指定这个文件进行排除文件内容里的文件

6、守护进程模式

6.1 安装rsync软件

yum install -y rsync

#检查软件包内容
/etc/rsyncd.conf   #服务端配置文件
/usr/bin/rsync     #命令
/usr/lib/systemd/system/rsyncd.service     #systemctl对应的配置文件

6.2 配置文件rsyncd.conf

cat /etc/rsyncd.conf 
#created by oldboy 15:01 2009-6-5
##rsyncd.conf start##
fake super =yes    #伪装成root权限 C7不开启的话会报错
uid = rsync     #rsync运行虚拟用户
gid = rsync     #rsync运行虚拟用户
use chroot = no     
max connections = 2000     #最大连接数
timeout = 600      #连接超时时间
pid file = /var/run/rsyncd.pid      #存放服务的pid号文件
lock file = /var/run/rsync.lock      #进程/服务的锁文件,放置重复运行
log file = /var/log/rsyncd.log      #rsync服务端日志文件
ignore errors     #忽略错误
read only = false        #可以进行读写
list = false      #关闭服务端列表功能
#hosts allow = 10.0.0.0/24       #只允许某网段访问->白名单
#hosts deny = 0.0.0.0/32        #不允许某网段访问->黑名单
auth users = rsync_backup       #rsync服务端进行验证用的用户名
secrets file = /etc/rsync.password      #rsync服务端用于验证的密码文件
#####################################
[data]    #模块名字,用户访问服务端的时候指定
comment = beifen  #此模块的注释说明
path = /data    #模块对应存放数据的目录
[backup]
comment = beifen 
path = /backup

6.3 后续配置

1、添加虚拟用户
useradd -s /sbin/nologin -M rsync

2、创建密码文件
密码文件格式:用户名:密码
echo 'rsync_backup:1' >/etc/rsync.password
chmod 600 /etc/rsync.password    #服务机制,必须要修改权限

3、创建存放数据的目录
mkdir /data/
chown -R rsync.rsync /data/

4、启动服务
systemctl start rsyncd
systemctl enable rsyncd

6.4 测试

#客户端向服务端传输/etc/hosts
rsync -avz /etc/hosts [email protected]::data
Password: 
sending incremental file list
hosts

sent 215 bytes  received 43 bytes  172.00 bytes/sec
total size is 329  speedup is 1.2

#指定密码文件不使用交互模式传输->免密传输
rsync -avz /etc/hostname  [email protected]::data --password-file=/etc/clint.passwd 
sending incremental file list
hostname

sent 100 bytes  received 43 bytes  95.33 bytes/sec
total size is 6  speedup is 0.04

6.5 守护进程传输文件流程

1、用户执行命令:rsync -avz /tmp/etc.tar.gz [email protected]::data  passwordfile=/etc/clint.passwd
2、服务端收到数据:判断rsync_backup用户,然后等待输入密码
3、把用户名和密码与配置文件里面对比auth user和secretsfile
4、通过后,传输数据
5、数据到达服务器所有者被修改为uid和gid指定的(rsync)
6、数据写入data模块(/data/)目录下面

image-20230111220152691

7、inotify配置

7.1 安装inotify服务

yum install -y inotify-tools

7.2 编写inotify.sh脚本

vim /servers/scripts/inotify.sh
#!/bin/bash
source /etc/profile

host=10.0.0.41      #目标服务器的ip(备份服务器)
src=/opt/        #在源服务器上所要监控的备份目录(此处可以自定义,但是要保证存在)
des=data       #自定义的模块名,需要与目标服务器上定义的同步名称一致
password=/etc/clint.passwd        #执行数据同步的密码文件
user=rsync_backup          #执行数据同步的用户名
inotifywait=/usr/bin/inotifywait    #inotify服务里命令的绝对路径

$inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src | while read files;do
    rsync -avzP --delete  --timeout=100 --password-file=${password} $src $user@$host::$des
    echo "${files} was rsynced" >>/tmp/rsyn.log 2>&1
done   

7.3 启动脚本

chmod 755 /servers/scripts/inotify.sh    #授权脚本
ps -ef |grep inotify

[root@nfs01 /root]
nohup bash /servers/scripts/inotify.sh &      #后台运行脚本
[1] 4114

[root@nfs01 /root]
$nohup: ignoring input and appending output to ‘nohup.out’

ps -ef |grep inotify    #检查是否运行成功
root       4114   1893  0 17:36 pts/0    00:00:00 bash /servers/scripts/inotify.sh
root       4124   4114  0 17:36 pts/0    00:00:00 /usr/bin/inotifywait -mrq --timefmt %Y%m%d %H:%M --format %T %w%f%e -e modify,delete,create,attrib /opt/
root       4125   4114  0 17:36 pts/0    00:00:00 bash /servers/scripts/inotify.sh
root       4129   1893  0 17:36 pts/0    00:00:00 grep --color=auto inotify

7.4 检查监控目录是否实时同步

#在客户端/opt/目录创建文件
touch test{
    
    01..10}.txt

#客户端查看日志
tail -10f /tmp/rsync.log

#检查服务端data目录是否同步
ll /data/

7.5 设置脚本开机自启动

chmod +x /etc/rc.d/rc.local

echo 'nohup /bin/bash /servers/scripts/inotify.sh' >> /etc/rc.d/rc.local

tail /etc/rc.d/rc.local    #检查

猜你喜欢

转载自blog.csdn.net/m0_49562857/article/details/128664558
今日推荐