rsync介绍
1 | rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync |
rsync 安装
安装
1
[root@localhost ~]# yum -y install rsync* inotify-tools*
创建rsyncd用户
1
[root@localhost ~]# useradd -M -s /sbin/nologin rsyncd
创建配置文件目录
1
[root@localhost ~]# mkdir -p /etc/rsyncd
创建配置文件
1
2
3
4
5
6
7
8
9
10[root@localhost ~]# touch /etc/rsyncd/rsyncd.conf
[root@localhost ~]# touch /etc/rsyncd/rsyncd.secrets
[root@localhost ~]# touch /etc/rsyncd/rsyncd.motd
说明:
rsyncd.conf 主配置文件
rsyncd.secrets 用户名密码文件,一组用户一行,用户名和密码使用:分割
rsyncd.motd 非必须,连接上rsyncd显示的欢迎信息
[root@localhost ~]# chmod 600 /etc/rsyncd/rsyncd.secrets
注意: rsyncd.secrets权限必须是600编辑配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57[root@localhost ~]# vim /etc/rsyncd/rsyncd.conf
#rsyncd 守护进程运行系统用户全局配置,也可在具体的块中独立配置,
uid = root
gid = root
# 守护进程监听ip
address = 0.0.0.0
# 护进程监听端口
port = 873
# 守护进程pid文件
pid file = /var/run/rsyncd.pid
# 守护进程lock文件
lock file = /var/run/rsyncd.lock
#允许chroot,提升安全性,客户端连接模块,首先chroot到模块path参数指定的目录下
#chroot为yes时必须使用root权限,且不能备份path路径外的链接文件
use chroot = yes
#只读
read only = no
#只写
write only = no
#允许访问rsyncd服务的ip,ip端或者单独ip之间使用空格隔开
hosts allow = 0.0.0.0/0
#不允许访问rsyncd服务的ip,*是全部(不涵盖在hosts allow中声明的ip,注意和hosts allow的先后顺序)
hosts deny = *
#客户端最大连接数
max connections = 20
#欢迎文件路径,可选的
#motd file = /etc/rsyncd/rsyncd.motd
# 是否记录传输文件日志
transfer logging = yes
# 日志文件格式
log format = %t %a %m %f %b
# 指定rsync发送消息日志文件,而不是发送给syslog,如果不填这个参数默认发送给syslog
log file = /var/log/rsyncd.log
# syslog facility rsync发送消息给syslog时的消息级别
syslog facility = local3
# timeout连接超时时间
timeout = 300
# 模块 模块名称必须使用[]环绕
# 比如:要访问data1,则地址应该是data1user@192.168.1.2::data1
[test]
#模块根目录,必须指定
path = /home/vsftpduser/ftpdata/test
#只读
read only = yes
#是否允许列出模块里的内容
list=no
# 忽略错误
# ignore errors
# 模块验证用户名称,可使用空格或者逗号隔开多个用户名
auth users = testsync
# 模块验证密码文件 可放在全局配置里
secrets file = /etc/rsyncd/rsyncd.secrets
# 注释
comment = test ftp data
# 排除目录,多个之间使用空格隔开
exclude = test/1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16补充:
# 主要定义符及含义:
# %h远程主机名
# %a远程IP地址
# %l文件长度字符数
# %p该次rsync会话的进程id
# %o操作类型:"send"或"recv"
# %f文件名
# %P模块路径
# %m模块名
# %t当前时间
# %u认证的用户名(匿名时是null)
# %b实际传输的字节数
# %c当发送文件时,该字段记录该文件的校验码
#默认log格式为:"%o %h [%a] %m (%u) %f %l",一般来说,在每行的头上会添加"%t [%p] "。
log format=%o %h [%a] %m (%u) %f %l启动rsyncd服务
1
[root@localhost ~]# /usr/bin/rsync --daemon --config=/etc/rsyncd/rsyncd.conf
客户端测试
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19方式一: 通过SSH同步
1.将当前key拷贝到服务端用户目录
[ec2-user@god ~]$ ssh-keygen
[ec2-user@god ~]$ ssh-copy-id -i ~/.ssh/id_rsa.pub root@1.1.1.1 -p22
2.通过客户端进行同步
//表示同步目录
[ec2-user@god ~]$ rsync -avzHP --delete --progress --bwlimit=1000000 -e "ssh -p 22" root@1.1.1.1:/home/vsftpduser/ftpdata/test ./test
//表示同步目录下的文件(不包含目录本身)
[ec2-user@god ~]$ rsync -avzHP --delete --progress --bwlimit=1000000 -e "ssh -p 22" root@1.1.1.1:/home/vsftpduser/ftpdata/test/ ./test
注意:
a 保留文件原有权限,用户,用户组,时间且递归的copy包括链接文件,块设备在内的所有文件
v 显示传输信息
P 显示传输进度
H 保留硬链接
z 压缩传输内容进行传输
--delete 删除那些DST中SRC没有的文件
--progress 显示备份过程
--bwlimit 限制带宽,字节/秒1
2
3
4
5
6
7
8方式二:通过rsync账号和密码同步
客户端:
[ec2-user@god ~]$ vim rsync.pass //注意文件中只保存密码
qxn9fav
[ec2-user@god ~]$ chmod 600 rsync.pass //密码文件必须是600
//表示同步目录下的文件
[ec2-user@god ~]$ rsync -avzHP --delete --progress --bwlimit=1000000 --port 52003 --password-file=rsync.pass sspsync@1.1.1.1::test ./test
inotify-tools安装
安装后文件存放在:
1
2/usr/local/bin/inotifywait
/usr/local/bin/inotifywatch修改内核参数:
1
2
3
4
5vim /etc/sysctl.conf
fs.inotify.max_queued_events=99999999
fs.inotify.max_user_watches=99999999
fs.inotify.max_user_instances=65536
sysctl -p1
2
3
4说明:
max_queued_events inotify队列最大长度,如果值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确
max_user_watches 要同步的文件包含多少目录,可以用:"find /home/www.osyunwei.com -type d | wc -l"统计,必须保证max_user_watches值大于统计结果
max_user_instances 每个用户创建inotify实例最大值编写脚本进行实时推送
1
2
3
4
5
6
7
8
9
10
11rsync_inotify.sh
src=/opt/test/
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,delete,create,attrib $src | while read file;do
/usr/bin/rsync -arzuq $src 192.168.0.2::www/
echo " ${file} was rsynced" >>/opt/soft/log/rsync.log 2>&1
done
chmod +x rsync_inotify.sh
./rsync_inotify.sh &拓展
1
2
3
4-m 是保持一直监听
-r 是递归查看目录
-q 是打印出事件
-e create,move,delete,modify,attrib 是指"监听 创建 移动 删除 写入 权限"事件