rsync介绍
sync:同步
async:异步
rsync:远程同步,可以将数据同步和它相连的多台主机
特点:
rsync可以增量复制:第一次是完整复制,之后全部为增量复制,传输过程中可以实行压缩及解压缩,因此可以减少带宽
匿名复制和身份验证
可以镜像保存整个目录树和文件系统
命令使用
rsync的使用(常用选项组合avz)
rsync [选项] src root@ip:/dest push # 上传数据
rsync [选项] root@ip:/src /dest pull # 下载数据
选项:
-r:递归模式,包含目录中的子目录或者子文件
-l:对于链接文件,仍然复制为链接文件
-L:同步时,如果有链接文件,则同步链接文件的源文件(不再是链接文件)
-v:显示同步过程的详细信息
-a:归档模式,保留文件的权限、属性等信息,等同于组合选项“rlptgoD”
-z:在传输文件时进行压缩(当然传输完也会解压缩)
-p:保留文件的权限标记
-t:保留文件的时间标记
-g:保留文件的属组标记(仅root可用)
-o:保留文件的属主标记(仅root可用)
-H:保留硬链接文件
-A:保留ACL属性信息
-D:保留设备文件及其他特殊文件
--delete:原始位置与目标位置有相同目录的安装相同目录备份,不相同的则删除
--checksum:根据校验和(而不是文件大小、修改时间)来决定是否跳过文件
rsync搭建
实验环境
两台主机A和B
实验目的
两台主机之间可以使用rsync命令传输文件
实验步骤
主机A
为了方便传输时,不使用密码,做一个免密登录,也就是密钥对连接
# 创建密钥对
ssh-keygen # 回车三次即可
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Created directory '/root/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:u041N5H1dN00LH+i51z37q/eR9YujNH0yrvjtgCoFHc root@localhost
The key's randomart image is:
+---[RSA 2048]----+
| oo*|
| + +=|
| . . E o o .|
| o o .o..|
| . S + o+ oo|
| . . o +o.o B|
| . o .O *o|
| . . ..X.+|
| .o +BXB|
+----[SHA256]-----+
# 将密钥对传到目标pc
[root@localhost ~]# ssh-copy-id -i root@192.168.1.5
# 验证登录
root@localhost ~]# ssh root@192.168.1.5
在两台主机中各创建一个目录,使用rsync命令进行同步测试即可
inotify介绍
可以监控文件,也可以监控目录。当监控目录时,可以同时监控目录及目录中的各子目录和文件。此外,inotify使用文件描述符作为接口,因而可以使用通常的文件i/o操作select、poll和epoll来监视文件系统变化。
select:查看,等待文件操作集合发出请查看的文件描述符,开始遍历查看
poll:查看
epoll:只查看正在活跃或者被唤醒的操作
inotify可以监视的文件系统常见事件包括:
2IN_ACCESS:文件被访问
2IN_MODIFY:文件被修改
2IN_ATTRIB:文件属性被修改
2IN_CLOSE_WRITE:以可写方式打开的文件被关闭
2IN_CLOSE_NOWRITE:以不可写方式打开的文件被关闭
2IN_OPEN:文件被打开
2IN_MOVED_FROM:文件被移出监控的目录
2IN_MOVED_TO:文件被移入监控的目录
2IN_CREATE:在监控的目录中新建文件或目录
2IN_DELETE:文件或目录被删除
2IN_DELETE_SELF:自删除,即一个可执行文件在执行时删除自己
2IN_MOVE_SELF:自移动,即一个可执行文件在执行时移动自己
rsync+inotify数据同步
实验环境
两台pc
rsync发起端:192.168.1.1
rsync接收端:192.168.1.5
两台都安装了rsync
实验目的
两台pc的数据实现发起端的数据有变动,接收端立马同步
实验步骤
第一步
在发起端安装inotify
tar zxf inotify-tools-3.14.tar.gz -C /usr/src
cd /usr/src/inotify-tools-3.14
./configure --prefix=/usr/local/inotify && make && make install
ln -s /usr/local/inotify/bin/* /usr/local/bin
第二步
设置监控目录
inotifywait -mrq --format %w%f -e create,delete,close_write /test1 # 阻塞状态
-m:持续监控
-r:递归模式
-q:输出简化信息
--format:指定输出时间的格式
%w:产生监控的目录
%f:输出文件名
%e:时间名称
%T:输出当前时间
-e:指定监控操作动作
modify:修改操作
create:创建操作
move:移动操作
delete:删除操作
close_write:修改文件内容
close_nowrite:查看只读文件内容
attrib:属性更改
这是当你在发起端的test1目录中执行创建,删除,操作时,阻塞的地方会报操作内容
第三步
整个rsync和inotify自动同步
发起端调整rsync的配置文件
vim /etc/rsyncd.conf
全局配置部分
uid = root //同步源中创建和修改文件使用的用户(运行rsync的用户)
gid = root //同步源中创建和修改文件使用的组(运行rsync的组内用户)
use chroot = no //对于以上的root用户,操作程序时不给root权限
max connections = 0 //发起端的最大连接数,0代表不限制
pid file = /var/run/rsyncd.pid //指定srync进程号管理文件存放路径
transfer logging = yes //开启日志文件
log file = /var/lib/rsyncd.log //日志存放路径
timeout = 900 //超时时间
ignore nonreadable = yes //忽略没有权限的访问用户
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 //以上格式不需要压缩
port 873 //服务端口号
有的版本还有以下等选项
lockfile、hosts allow
模块配置部分(ftp、httpd)
[share] //共享名
path = /cyj //共享路径
comment = ftp export area //说明
writeable = yes //写入权限
read only = no //不只是只读权限
重启服务
systemctl restart rsyncd
netstat -anput | grep rsync
第四步
编写脚本实现监控并同步
vim /rsyncd.sh
#!/bin/bash
path=/test1
client=192.168.1.5
/usr/local/bin/inotifywait -mrq --format %w%f -e create,delete,close_write /test1 | while read file
do
if [ -f $file ]
then
rsync -az --delete $file root@$client:/test2/
else
cd $path && rsync -az --delete ./ root@$client:/test2/
fi
done
授予执行权限并运行脚本
[root@localhost ~]# chmod +x /rsync.sh
[root@localhost ~]# /rsync.sh &
[1] 65503 # 后台pid,不需要同步时kill即可
此时在对发起端的test1目录进行操作时,会自动同步操作后的内容