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目录进行操作时,会自动同步操作后的内容

评论




正在载入...
PoweredHexo
HostedAliyun
DNSAliyun
ThemeVolantis
UV
PV
BY-NC-SA 4.0