rsync
remote sync 远程同步,同步是把数据从缓冲区同步到磁盘上去的、数据在内存缓存区完成之后还没有写入到磁盘中去、所以有时候要同步到磁盘中去的,而rsync说白了跟复制差不多、能将一个文件从一个地方复制到另外一个地方的、但是他也可以实现跨主机复制,兼具了cp和scp的功能,但是在跨主机时不具备scp的加密功能。
rsync有个特点,就是当你用rsync复制或跨主机复制时如果另一端也有一个同名的文件,他会先比较这两个文件的特征码是不是一致,如果不一致就会复制,并覆盖,如果一致他将不会复制,所以说这是一个快速复制工具,尤其是同步目录时,特别好用。
rsync命令的工作模式有四种:
1、shell模式,也称为本地模式,速度要比cp快
2、远程shell模式,其可以借助于ssh协议承载其数据传输过程
3、列表模式,其工作方式与ls相似,仅列出源的内容:-nv
4、服务器模式,此时,rsync可以工作为守护进程,能够接收客户端的数据传输请求,在使用时可以在客户端使用rsync命令发送给守护进程,也可以向服务器主获取文件。
rsync命令的选项:
-n:如果担心命令执行不正确,一同步复制,可能这个复制的后果是致命的,那后果可就严重了,这里我们可以加-n先测试一下
-v: --verbose,详细输出模式、显示详细过程的
-q: --quiet,静默模式,尽可能输出少的信息
-c: --checksum,可以对传输的文件进行较验的,强制对文件传输进行校验
-r: --recursive,递归复制
-a: --archives,归档,复制时可以保存原有的属主属主等属性信息,甚至包括一点额外的属性、如访问控制列表
-p: --perms,保存文件的权限
-t: --times,保留文件的时间戳
-l: --links,保留文件的符号链接
-g: --group,保留文件的属组
-o: --owner,保留文件的属主
-D: --devices,保留设备文件
-e SSH:远程复制时,表示使用ssh协议作承载
-z:基于网络时使用,对文件压缩后传输
--progress:显示压缩进度条的
--stats:显示如何执行压缩和传输的,也就是显示传输状态的
注意:rsync命令使用中,如果源参数的末尾有斜线,就会复制指定目录内容,而不复制目录本身;没有斜线,则会复制目录本身,因此有如下命令:
# rsync -r /mydata/data /backups/:会把目录data直接同步至/backups目录中去
# rsync -r /mydata/data/ /backups/:会把目录中的data/中的内容同步至/backups目录中
rsync本地用法:
# cd /etc /tmp/
# rsync /tmp/etc/passwd /tmp/test/passwd -nv
推送到远程主机上去,把本地的etc文件推送到172.16.251.244主机上去:
# rsync -r -e ssh /tmp/etc root@172.16.251.244:/tmp/
拉取远程服务器上的文件:
# rsync -e ssh -r -a root@172.16.251.244:/etc/pam.d ./ --stats
把文件推送到服务器端上去:
# rsync -auzv messages myuser@172.16.27.1::my_data_rsync
如果我们从服务器上拉取文件时必须要指定文件路径
# rsync myuser@172.16.27.1::my_data_rsync/messages /tmp/
Inotify
Inotify 是一个 Linux特性,是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。
=====================rsync+inotify实现实时同步过程============================================
这里我们以两台服务器来做这个实验:
以下步骤在从服务上操作:
配置rsync以daemon的方式运行:也就是在服务器端以守护进程的方式运行
1、设定rsync服务器端
1)安装相关的程序包,他是基于xinetd工作的,超级守护进程
# yum -y install xinetd
安装好之后在/etc/xinetd.d/这个目录下有一个rsync的文件
2)为rsync服务提供配置文件,而他的配置文件在/etc/rsyncd.conf,这个配置文件大概由两部分组成,一部分定义全局的,另一部分可以定义多个rsync共享目录:
# Global Settings 全局设定
uid = nobody :以哪个用户的身份运行或获取数据的
gid = nobody :用户都以来宾帐号的方式运行
use chroot = no :在服务运行时要不要把他锁定在家目录
max connections = 10 :做为服务器端最大并发连接数
strict modes = yes :表示是否工作在严格模式下,严格检查文件权限等相关信息
pid file = /var/run/rsyncd.pid : 定义pid文件路径
log file = /var/log/rsyncd.log : 定义日志文件存放路径的
# Directory to be synced 定义共享目录的模块
[my_data_rsync] 要同步的目录名称,多个目录名称是不能重名的
path = /myrsync/data : 定义目录的路径
ignore errors = yes : 表示如果中间复制过程有一个文件出错了是要继续复制还是中止复制,yes表示继续复制,no表示中止复制
read only = no :如果打算让别人仅仅是来拉取数据的,yes就可以了,如果打算让别人推送过来做备份的那就为no,表示客户端是否可以推送的
write noly = no :只允别人在里面写数据,但不可以拉取数据
hosts allow = 172.16.251.244:做白名单的,是否允许哪些主机可以访问的
hosts deny = * :黑名单的
说明:
1、二者都不出现时,默认为允许访问
2、只出现hosts allow,定义白名单,但没有被匹配到的主机由默认规则处理,即为允许
3、只出现hosts deny,定义黑名单,出现在名单中的都被拒绝
4、二者同时出现,先检查hosts allow,如果匹配就allow,否则检查hosts deny,如果匹配则拒绝,如是二者都不匹配,则由默认规则处理,即为允许
list = false :是否允许用户列出文件列表的
uid = root :以哪个用户身份去获取文件的
gid = root
auth users = myuser:做用户验证的,只允许哪个用户来复制
secrets file = /etc/.rsync.passwd :存放验证用户的密码的
#配置密码文件/etc/rsyncd.passwd,文件格式是明文的,所以文件权限设为600:
# vim /etc/rsyncd.passwd
myuser:mypasswd
# chmod 600 /etc/rsyncd.passwd
#配置服务能够启动,监听在873/tcp端口上
# chkconfig rsync on
# service xinetd start
# ss -tnl