rsync教程、rsync+inotify实时同步
rsync介绍
英文全称为Remote synchronization服务软件
rsync是一个linux应用程序,可以实现全量以及增量的本地或者是远程的数据同步(拷贝)备份
使用快速增量备份工具Remote Sync
可以远程同步,支持本地复制,或者与其他SSH
、rsync
主机同步
rsync与scp:rsync可以增量复制
安装
yum -y install rsync
rsync使用
语法格式:
//Rsync的命令格式常用的有以下三种:
rsync [OPTION]... SRC DEST
rsync [OPTION]... SRC [USER@]HOST:DEST
rsync [OPTION]... [USER@]HOST:SRC DEST
常用参数:
-a, --archive: 归档模式,表示以递归方式复制文件,并保持文件的所有属性,包括权限、时间戳等。
-v, --verbose: 显示详细输出,即显示文件传输的进度和其他信息。
-z, --compress: 在传输时进行压缩,可以减少网络带宽的使用。
-r, --recursive: 递归复制文件夹及其内容。
-u, --update: 只复制源文件中新于目标文件的文件。
-c, --checksum: 使用校验和比较文件内容,而不是仅仅比较时间和大小。
-h, --human-readable: 以人类可读的格式显示输出信息,例如文件大小以K、M、G等单位显示。
-P, --progress: 显示传输进度。
--delete: 删除目标目录中不存在于源目录中的文件。
--exclude: 排除指定的文件或目录。
--include:包括指定的文件或目录,即使在排除列表中。
--exclude-from:从指定文件中读取排除列表。
--include-from:从指定文件中读取包含列表。
常用命令:
1.将本地文件复制到远程主机:
rsync [选项] 源文件/目录 远程主机:目标路径
2.将远程主机文件复制到本地:
rsync [选项] 远程主机:源文件/目录 目标路径
3.同步本地两个目录:
rsync [选项] 源目录/ 目标目录/
4.仅复制新文件或有变化的文件:
rsync -u 源目录/ 目标目录/
5.递归复制整个目录树:
rsync -r 源目录/ 目标目录/
6.删除目标目录中不存在于源目录中的文件:
rsync -r --delete 源目录/ 目标目录/
7.显示详细信息:
rsync -av 源目录/ 目标目录/
8.使用 SSH 连接远程主机:
rsync -avz -e ssh 源目录/ 远程主机:目标路径
9.源文件中有删除时,同步删除以后的文件
rsync -av --delete 源目录/ 目标目录/
rsync定时同步(ssh方式)
可以通过crontab定时使用rsync命令
例如:定时备份机器2中的数据
准备1:机器2(25)/tmp/rsync/中需要定时备份的数据 同步到机器1(28)中/tmp/backup/目录下
[ root@localhost test]# tree /tmp/rsync/
/tmp/rsync/
└── test
├── test2.txt
└── test.txt
1 directory, 2 files
准备2:
因为rsync从远程主机上同步数据需要ssh密码验证,所需要先ssh-keygen
ssh-keygen 一路回车 有y 填y
ssh-copy-id root@192.168.70.25
测试一下 ssh root@192.168.70.25 可以发现直接连接上不需要密码验证
开始实验
创建crontab定时任务
crontab -e
* * * * * rsync -av root@192.168.70.25:/tmp/rsync/ /tmp/backup &>/dev/null
一分钟后 可以发现文件都同步过来了
[root@localhost tmp]# tree backup/
backup/
└── test
├── test2.txt
└── test.txt
1 directory, 2 files
rsync+inotify实时同步
原理介绍
1.实时同步的方法
- inotify rsync方法实现数据同步
- sersync 在inotify软件基础上进行开发的,功能更强大
2.工作原理
- 要利用监控服务,监控同步数据服务器目录中信息的变化
- 发现目录中数据产生变化,就利用rsync服务推送到备份服务器上
inotify:
? 异步的文件系统监控机制,利用事件驱动机制,而无须通过诸如cron等轮询机制来获取时间。
? linux内核从2.6.13起支持inotify,通过inotify可以监控文件系统中添加、删除、修改、移动等各种事件。
grep -i inotify /boot/config-3.10.0-1160.el7.x86_64
CONFIG_INOTIFY_USER=y
实现inotify软件:
- inotify-tools
- sersync
- lrsyncd
inotify+rsync使用方式
- inotify 对同步数据目录信息的监控
- rsync 完成对数据的同步
- 利用脚本进行结合
inotify
内核是否支持inotify
列出下面文件,说明服务器内核支持inotify
[root@localhost ~]# ls -l /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Jul 29 11:05 max_queued_events
-rw-r--r-- 1 root root 0 Jul 29 11:05 max_user_instances
-rw-r--r-- 1 root root 0 Jul 29 11:05 max_user_watches
[root@localhost ~]# cat /proc/sys/fs/inotify/max_queued_events
16384
[root@localhost ~]# cat /proc/sys/fs/inotify/max_user_instances
128
[root@localhost ~]# cat /proc/sys/fs/inotify/max_user_watches
8192
inotify内核参数说明:
- max_queued_events:inotify事件队列最大长度,如值太小会出现Event Queue Overflow错误,默认值:16384,生产环境建议调大,比如:327679
- max_user_instances:每个用户创建inotify实例最大值,默认值:128
- max_user_watches:可以监视的文件总数量(inotifywait 单进程),默认值:8192,建议调大
范例:
在/etc/sysctl.conf最下面添加
[root@localhost ~]# vim /etc/sysctl.conf
fs.inotify.max_queued_events=327679
fs.inotify.max_user_watches=100000
[root@localhost ~]# sysctl -p
fs.inotify.max_queued_