rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件。它使用所谓的“Rsync演算法”来使本地和远程两个主机之间的文件达到同步,这个算法只传送两个文件的不同部分,而不是每次都整份传送,因此速度相当快。所以通常可以作为备份工具来使用。
运行Rsync server的机器也叫backup server,一个Rsync server可同时备份多个client的数据;也可以多个Rsync server备份一个client的数据。Rsync可以搭配ssh甚至使用daemon模式。Rsync server会打开一个873的服务通道(port),等待对方rsync连接。连接时,Rsync server会检查口令是否相符,若通过口令查核,则可以开始进行文件传输。第一次连通完成时,会把整份文件传输一次,下一次就只传送二个文件之间不同的部份。
基本特点:
命令语法:
rsync的命令格式可以为以下六种:
rsync [OPTION]… SRC DEST
rsync [OPTION]… SRC [USER@]HOST:DEST
rsync [OPTION]… [USER@]HOST:SRC DEST
rsync [OPTION]… [USER@]HOST::SRC DEST
rsync [OPTION]… SRC [USER@]HOST::DEST
rsync [OPTION]… rsync://[USER@]HOST[:PORT]/SRC [DEST]
对应于以上六种命令格式,我们可以总结rsync有2种不同的工作模式:
rsync --daemon
使用独立进程的方式,或者通过xinetd超级进程来管理rsync后台进程。当rsync作为daemon运行时,它需要一个用户身份。如果你希望启用chroot,则必须以root的身份来运行daemon,监听端口,或设定文件属主;如果不启用chroot,也可以不使用root用户来运行daemon,但该用户必须对相应的模块拥有读写数据、日志和lock file的权限。当rsync以daemon模式运行时,它还需要一个配置文件——rsyncd.conf。修改这个配置后不必重启rsync daemon,因为每一次的client连接都会去重新读取该文件。
我们一般把DEST远程服务器端成为rsync Server,运行rsync命令的一端SRC称为Client。
rsync在CentOS6上默认已经安装,如果没有则可以使用yum install rsync -y
,服务端和客户端是同一个安装包。
# rsync -h
-p:复制文件过程中,保持文件的属性不变
-v:显示复制过程信息
-a:使用归档模式(如果复制目录必须使用此选项)
-r:递归复制
-z:在传输过程中,以压缩方式进行传输
-e "ssh [-p22]":指定所使用的传输通道
格式:rsync [OPTION...] SRC... [DEST]
#rsync 源目录 目标目录
rsync /etc/yrz.java /tmp/
-p:复制文件过程中,保持文件的属性不变
-v:显示复制过程信息
-a:使用归档模式(如果复制目录必须使用此选项)
-z:在传输过程中,以压缩方式进行传输
格式:
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
[root@iZwz984mbcsaw10myjq9s4Z /]# mkdir /home/dir1
[root@iZwz984mbcsaw10myjq9s4Z /]# touch /home/dir1/{1..10}.txt
[root@iZwz984mbcsaw10myjq9s4Z /]# rsync -avc -e "ssh" /home/dir1/* root@10.0.0.5:/tmp/
准备:
关闭selinux
关闭防火墙
配置时间同步
第一步:配置backup上的rsync,让其工作在守护进程模式(配置服务器端)
1)修改配置文件
vim /etc/rsyncd.conf
uid=root
gid=root
use chroot=yes
max connections=100
timeout=600
strict modes=yes
port=873
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
log file=/var/log/rsyncd.log
[module_test]
path=/tmp/rsync_bak2
comment=rsync test logs
auth users=sean
secrets file=/etc/rsyncd.secrets
read only=no
write only=yes
list=no
2)创建目录
[root@iZwz984mbcsaw10myjq9s4Z /]# mkdir -pv /tmp/rsync_bak2
mkdir: created directory ‘/tmp/rsync_bak2’
3)创建运行rsync的系统用户
[root@iZwz984mbcsaw10myjq9s4Z /]# grep rsync /etc/passwd
[root@iZwz984mbcsaw10myjq9s4Z /]# groupadd -r rsync
[root@iZwz984mbcsaw10myjq9s4Z /]# useradd -r -s /sbin/nologin -g rsync rsync
4)启动rsync
rsync --daemon
5)检查rsync的端口(默认873)
ss -ntl | grep 873
LISTEN 0 5 *:873 *:*
LISTEN 0 5 [::]:873 [::]:*
6)创建虚拟用户文件,以及相关的虚拟用户
vim /etc/rsyncd.secrets
sean:123
:wq
chmod 600 rsyncd.secrets
7)客户端发送文件测试
[root@node etc]# rsync -avz --password-file=/etc/rsync_client.pwd /home sean@47.106.193.187::module_test
sending incremental file list
sent 147,086 bytes received 774 bytes 295,720.00 bytes/sec
total size is 326,311,111 speedup is 2,206.89
inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,Linux内核从2.6.13开始引入,允许监控程序打开一个独立文件描述符,并针对事件集监控一个或者多个文件,例如打开、关闭、移动/重命名、删除、创建或者改变属性。
CentOS6自然已经支持:
使用ll /proc/sys/fs/inotify
命令,是否有以下三条信息输出,如果没有表示不支持。
total 0
-rw-r--r-- 1 root root 0 Dec 11 15:23 max_queued_events
-rw-r--r-- 1 root root 0 Dec 11 15:23 max_user_instances
-rw-r--r-- 1 root root 0 Dec 11 15:23 max_user_watches
安装inotify-tools
yum install inotify-tools -y
监控/root/tmp目录文件的变化:
/usr/bin/inotifywait -mrq --timefmt '%Y/%m/%d-%H:%M:%S' --format '%T %w %f' -e modify,delete,create,move,attrib /root/tmp/
上面的命令表示,持续监听/root/tmp
目录及其子目录的文件变化,监听事件包括文件被修改、删除、创建、移动、属性更改,显示到屏幕。执行完上面的命令后,在/root/tmp
下创建或修改文件都会有信息输出。
详细参数
/usr/bin/inotifywait -mrq --timefmt '%Y/%m/%d-%H:%M:%S' --format '%T %w %f' -e modify,delete,create,move,attrib /test
参数 | 说明 |
---|---|
-m | 持续监听 |
-r | 使用递归形式监视目录 |
-q | 减少冗余信息,只打印出需要的信息 |
-d | 以守护进程的方式来运行(后台) |
-e | 指定要监视的事件,多个时间使用逗号隔开 |
-s | 将错误信息输出到系统日志中 |
-o file | 将监控到的时间输出到一个文件中 |
–excludei | 忽略文件的大小写 |
-e | 指定要监控的事件 |
–timefmt | 时间格式 |
–format | 监听到的文件变化的信息 |
–timefmt 说明:Ymd分别表示年月日,H表示小时,M表示分钟
–format 说明:%w 表示发生事件的目录;%f 表示发生事件的文件;%e 表示发生的事件%Xe 事件以“X”分隔;%T 使用由–timefmt定义的时间格式
可监控的事件:
access 访问,读取文件。
modify 修改,文件内容被修改
attrib 属性,文件元数据被修改。
move 移动,对文件进行移动操作。
create 创建,生成新文件
open 打开,对文件进行打开操作
close 关闭,对文件进行关闭操作。
delete 删除,文件被删除。
#!/bin/bash
#
prog="inotifywait"
events="create,delete,modify,attrib"
iopt="-mrq"
lpath="/test"
rhost="47.106.193.187"
vuser="xue"
secfile="/etc/rsyncd.sercrets"
ropt="-az"
modName="module_xue"
$prog $iopt --format "%w%f" -e $events $lpath | while read line
do
echo $line
sleep 3
rsync $line $vuser@$rhost::$modName --password-file=$secfile
done
[root@master bin]# bash rsync.sh