rsync 与 inotify 的使用 & 实现实时同步备份
今日内容
- rsync
内容详细
上一篇内容问题
1、yum源问题
2、VPN链接正常,但是没办法通过172
3、VPN链接时,出现了DNS错误
4、掩码不对
5、openvpn开启错误
复制的命令
1、cp
本机复制:
只能在本地计算机中复制目录
2、scp
# ssh 自带的命令
远程复制:
可以上传文件到远程服务器,有两种复制方式
1、推(本地上传到远程服务器):
scp <文件路径> <登录用户>@<ip>:<目标路径>
[root@m01 ~]# scp 1.txt root@172.16.1.41:/opt
root@172.16.1.41's password:
1.txt 36% 109MB 27.6MB/s 00:06 ETA
2、拉(把远程服务器文件下载到本地):
scp root@192.168.15.41:/opt/1.txt 2.txt
[root@m01 ~]# scp root@172.16.1.41:/opt/1.txt 2.txt
root@172.16.1.41's password:
1.txt 72% 217MB 73.1MB/s 00:01 ETA
缺点 : 只能全量复制(数据要一次全部传输完)
只支持全量复制 1TB 1GB
3、rsync
支持增量复制(可以进行断点续传)
下文详细介绍
用于全量备份、增量备份
rsync 介绍
rsync英文称为remote synchronizetion,从软件的名称就可以看出来,rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似于ssh带的scp命令,但是又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。当然,rsync还可以在本地主机的不同分区或目录之间全量及增量的复制数据,这又类似cp命令。但是同样也优于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝。
rsync官方地址:https://rsync.samba.org/
rsync监听端口:873
rsync运行模式:C/S client/server
rsync简称叫做远程同步,可以实现不同主机之间的数据同步,还支持全量和增量
rsync 特性
1、支持拷贝特殊文件,如连接文件、设备等。
2、可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能。
3、可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变 –p。
4、可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高(tar-N)。
5、可以使用rcp、rsh、ssh等方式来配合传输文件(rsync本身不对数据加密)。
6、可以通过socket(进程方式)传输文件和数据(服务端和客户端)*****。
7、支持匿名的活认证(无需系统用户)的进程模式传输,可以实现方便安全的进行数据备份和镜像。
rsync 的传输方式
push 推:
客户端将数据从本地推送至服务端
pull 拉:
客户端将数据从服务端拉取到本地
rsync 的传输模式
1.本地方式(类似于cp,不支持推送和拉取,只是单纯的复制)
2.远程方式(类似于scp,又不同于scp),scp只支持全量备份,rsync支持增量备份和差异备份
3.守护进程方式(客户端和服务端)
rsync 的使用(参数)
1、普通参数
-a
#归档模式传输, 等于-tropgDl -t -r -o -p -g -D -l
rsync -avzP ./* root@172.16.1.41:/opt
-v
# 详细模式输出, 打印速率, 文件数量等
rsync -v init.sh root@172.16.1.41:/opt
[root@m01 ~]# rsync -v init.sh root@172.16.1.41:/opt
root@172.16.1.41's password:
init.sh
sent 4,630 bytes received 35 bytes 1,866.00 bytes/sec
total size is 4,542 speedup is 0.97
-z
#传输时进行压缩以提高效率
[root@m01 ~]# rsync -vz ./2.txt root@172.16.1.41:/opt/
-r
#递归传输目录及子目录,即目录下得所有目录都同样传输。
[root@m01 ~]# rsync -vzr ./a root@172.16.1.41:/opt/
-t
#保持文件时间信息
[root@m01 ~]# rsync -vzrt ./a/b/c/2.txt root@172.16.1.41:/opt/
-o
#保持文件属主信息
[root@m01 ~]# rsync -vzrto ./a/b/c/2.txt root@172.16.1.41:/opt/
-g
#保持文件属组信息
[root@m01 ~]# rsync -vzrtgo ./a/b/c/2.txt root@172.16.1.41:/opt/
-p
#保持文件权限
[root@m01 ~]# rsync -vzrtgop ./a/b/c/2.txt root@172.16.1.41:/opt/
-l
#保留软连接
-P
#显示同步的过程及传输时的进度等信息
-D
#保持设备文件信息
-L
#保留软连接指向的目标文件
-e
#使用的信道协议,指定替代rsh的shell程序
2、重要参数
--append
# 指定文件接着上次传输中断处继续传输
rsync -avzP --append-verify -exclude=2 --bwlimit=10 ./* root@172.16.1.41:/opt
[root@m01 ~]# rsync -avzP --append-verify --exclude=2 --bwlimit=10 ./* root@172.16.1.41:/opt
root@172.16.1.41's password:
sending incremental file list
1.txt
152,174,592 48% 9.87MB/s 0:00:16 ^CKilled by signal 2.
rsync error: unexplained error (code 255) at rsync.c(638) [sender=3.1.2]
rsync: [sender] write error: Broken pipe (32)
[root@m01 ~]# rsync -avzP --append-verify --exclude=2 --bwlimit=10 ./* root@172.16.1.41:/opt
root@172.16.1.41's password:
sending incremental file list
1.txt
173,304,020 55% 71.73MB/s 0:00:01
--append-verify
# 使用参数续传(在断点续传之后,验证一下文件,如果不同,修复文件)
--exclude=PATTERN
# 指定排除不需要传输的文件
--exclude-from=file
# 按照文件指定内容排除
--bwlimit=100
# 限速传输(单位:MB)
--delete
# 让目标目录和源目录数据保持一致
--password-file=xxx
# 使用密码文件
--port
# 指定端口传输
rsync 守护进程模式
概念
正常我们备份数据,都需要自己手动使用备份命令把本地数据上传到备份服务器中
# 守护进程模式
就是在本地机产生文件数据之后,可以实时同步到备份服务器中,无需手动操作
前提 : 在服务端(存放备份服务器 backup)和客户端(需要备份数据的服务器)都要装上 rysnc 软件
系统用户 : rsync(启动 rsync 软件的系统用户)
虚拟用户 : rsync (同步数据时使用的用户)
1、服务端( backup )
1、安装 rsync 软件
[root@backup ~]# yum install -y rsync
2、修改 rsync 的配置文件(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 = welcome to backup!
path = /backup
[linux]
comment = welcome to linux!
path=/tmp/linux
3、创建系统用户组 和 系统用户( rsync )
groupadd rsync -g 666
useradd rsync -u 666 -g 666 -M -s /sbin/nologin -r (-s 指定解析器 /sbin/nologin)
4、创建虚拟用户密码文件
# 虚拟用户的密码文件存放密码格式 : 虚拟用户名:密码
echo "rsync_backup:123456" > /etc/rsync.passwd
5、密码文件授权( 600 )
chmod 600 /etc/rsync.passwd
6、创建备份目录
mkdir /backup
mkdir /tmp/linux
7、备份目录授权(修改目录的所属主和所属组,让 rsync 用户可以使用这两个目录文件)
chown rsync.rsync /backup
chown rsync.rsync /tmp/linux
8、关闭防火墙和selinux
systemctl disable --now firewalld
setenforce 0
9、启动 rsync 服务
systemctl start rsyncd
# 注意是启动 rsyncd
2、客户端(跳板机中,需要备份数据的服务器)
方法一 : 自己输入密码
rsync -avzP ./* rsync_backup@172.16.1.41::backup
# 注意 : 备份模块 backup,模块就是指定备份的路径
rsync_backup : 虚拟用户,只在数据传输时使用
172.16.1.41 : backup服务端的IP
backup : 模块名称
# 请注意 : 密码已经改成 123456 ,不要输错密码
[root@m01 ~]# rsync -avzP ./* rsync_backup@172.16.1.41::backup
Password:
sending incremental file list
1.txt
314,572,800 100% 99.00MB/s 0:00:03 (xfr#1, to-chk=9/10)
2 -> a/b/c/2.txt
2.txt
314,572,800 100% 95.66MB/s 0:00:03 (xfr#2, to-chk=7/10)
方法二 : 设置密码文件,运行时读取
1、编写密码文件
[root@backup opt]# echo "123456" > /etc/rsync.passwd
2、授权
[root@m01 ~]# chmod 600 /etc/rsync.passwd
3、连接(需要指定密码文件)
--password-file=/etc/rsync.passwd
rsync -avzP --password-file=/etc/rsync.passwd ./* rsync_backup@172.16.1.41::linux
[root@m01 ~]# rsync -avzP --password-file=/etc/rsync.passwd ./* rsync_backup@172.16.1.41::linux
sending incremental file list
1.txt
314,572,800 100% 114.58MB/s 0:00:02 (xfr#1, to-chk=9/10)
2 -> a/b/c/2.txt
2.txt
147,881,984 47% 70.55MB/s 0:00:02
方法三 : 添加环境变量
1、定义环境变量
export RSYNC_PASSWORD=123456
2、同步
rsync -avzP ./* rsync_backup@172.16.1.41::linux
[root@m01 ~]# rsync -avzP ./* rsync_backup@172.16.1.41::linux
sending incremental file list
1.txt
314,572,800 100% 117.04MB/s 0:00:02 (xfr#1, to-chk=9/10)
2 -> a/b/c/2.txt
2.txt
164,986,880 52% 78.71MB/s 0:00:01
rsync 实时同步
inotify 的使用
1、rsync 不支持实时同步
2、一般用 inotify 软件来监控文件的实时变化
3、监控到文件发生变化,立刻调用 rsync 传输数据,实现实时同步
实现实时同步步骤
1、安装 inotify (装在客户端)
[root@m01 ~]# yum install inotify-tools -y
2、inotify 参数介绍
-m 持续监控
-r 递归
-q 静默,仅打印时间信息
--timefmt 指定输出时间格式
--format 指定事件输出格式
%Xe 时间
%w 目录
%f 文件
-e
access 访问
modify 内容修改
attrib 属性修改
close_write 修改真实文件内容
open 打开
create 创建
delete 删除
umount 卸载
3、开始监控
/usr/bin/inotifywait -mrq --format "%Xe %w %f" -e create,modify,delete,close_write,attrib /root
[root@m01 ~]# /usr/bin/inotifywait -mrq --format "%Xe %w %f" -e create,modify,delete,close_write,attrib /root
4、实时监控并同步
# 读取监控的信息,循环调用 rsync 传输数据即可进行同步
--delete # 让目标目录和源目录数据保持一致
/usr/bin/inotifywait -mrq --format "%Xe %w %f" -e create,modify,delete,close_write,attrib /root | while read line;do
cd /root
rsync -avzP --delete --password-file=/etc/rsync.passwd ./* rsync_backup@172.16.1.41::backup
# 不要忘记写 ./* 和 done
[root@m01 ~]# /usr/bin/inotifywait -mrq --format "%Xe %w %f" -e create,modify,delete,close_write,attrib /root | while read line;do
> cd /root
> rsync -avzP --delete --password-file=/etc/rsync.passwd ./* rsync_backup@172.16.1.41::backup
> done