关于rsync
一款快速增量备份工具
Remote Sync,远程同步 支持本地复制,或者与其他SsH、rsync 主机同步 官方网站: http://rsync.samba.org
配置rsync源服务器
rsync同步源
配置rsync源
基本思路 建立rsyncd.conf配置文件、独立的账号文件 启用rsync的-daemon模式 应用示例 用户backuper, 允许下行同步 操作的目录为/var/www/html/ 配置文件rsyncd.conf 需手动建立,语法类似于Samba配置 认证配置auth users、secrets file, 不加则为匿名 rsync账号文件 采用"用户名:密码”的记录格式,每行一个用户记录 独立的账号数据,不依赖于系统账号 启用rsync服务 通过–daemon独自提供服务 执行kill $(cat /var/run/rsyncd.pid)关闭rsync服务
使用rsync备份工具
rsync命令用法
rsync [选项] 原始位置 目标位置
常用选项 -a:归档模式,递归并保留对象属性,等同于-rlptgoD -v:示同步过程的详细(verbose)信息 -z:在传输文件时进行压缩(compress) -H:保留硬连接文件 -A:保留ACL属性信息 –delete:删除目标位置有而原始位置没有的文件 –checksum:根据对象的校验和来决定是否跳过文件 配置源的两种表示方法 格式1: 用户名@主机地址::共享模块名 格式2: rsync://用户名@主机地址/共享模块名
rsync实时同步
定期同步的不足
执行备份的时间固定,延迟明显、实时性差 当同步源长期不变化时,密集的定期任务是不必要的
实时同步的优点
一旦同步源出现变化,立即启动备份 只要同步源无变化,则不执行备份
关于inotify
Linux内核的inotify机制
从版本2.6.144开始提供 可以监控文件系统的变动情况,并作出通知响应 辅助软件: inotify-tools
rsync+inotify实时同步
调整inotify内核参数 max_queue_events: 监控队列大小 max_user_instances: 最多监控实例数 max_user_watches:每个实例最多监控文件数,配置时应大于监控目标的总文件数 安装inotify-tools辅助工具 inotifywait:用于持续监控,实时输出结果 常用选项 -m:持续进行监控 -r:递归监控所有子对象 -q:简化输出信息 -e:指定要监控哪些事件类型 inotifwatch:用于短期监控,任务完成后再出结果 通过inotifywait触发rsync同步操作 使用while、read持续获取监控结果 根据结果可以作进一 步判断,决定执行何种操作
实践配置
实验环境
rsyncd服务器IP地址:192.168.144.128 client客户端IP地址:192.168.144.129
在rsyncd服务器上修改配置文件
[ root@rsyncd ~ ]
rsync- 3.0 .9 - 18. el7. x86_64
[ root@rsyncd ~ ]
uid = nobody // 匿名用户
gid = nobody
use chroot = yes // 禁锢家目录
pid file = / var/ run/ rsyncd. pid // pid文件路径
address = 192.168 .144 .128 // 配置监听地址
port = 873 // 端口号
log file = / var/ log/ rsyncd. log // 日志文件路径
hosts allow = 192.168 .144 .0 / 24 // 允许地址段访问
dont compress = * . gz * . tgz * . zip * . z * . Z * . rpm * . deb * . bz2 // 不需要压缩的类型
[ wwwroot] // 共享模块名
path = / var/ www/ html // 共享文件路径
comment = www. kgc. com // 定义名称
read only = yes // 只读权限
auth users = backuper // 身份验证用户名
secrets file = / etc/ rsyncd_users. db // 密码文件
: wq
[ root@rsyncd ~ ]
backuper: 123123 // 编辑用户名:密码
: wq
[ root@rsyncd ~ ]
[ root@rsyncd ~ ]
[ root@rsyncd ~ ]
tcp 0 0 192.168 .144 .128 : 873 0.0 .0 .0 : * LISTEN 36346 / rsync
[ root@rsyncd ~ ]
[ root@rsyncd ~ ]
[ root@rsyncd ~ ]
[ root@rsyncd ~ ]
[ root@rsyncd html]
[ root@rsyncd html]
[ root@rsyncd www]
在客户端服务器上,拉取同步源rsyncd
[ root@client ~ ]
[ root@client ~ ]
[ root@client ~ ]
rsync- 3.0 .9 - 18. el7. x86_64
[ root@client ~ ]
[ root@client ~ ]
[ root@client www]
[ root@client www]
Password: // 输入密码
[ root@client www]
this is test web
[ root@client www]
[ root@client www]
123123
[ root@client www]
[ root@client www]
在client客户端上安装inotify(监控)
[ root@client www]
fs. inotify. max_queued_events = 16384 // 队列
fs. inotify. max_user_instances = 1024 // 每个队列中的实例数
fs. inotify. max_user_watches = 1048576 // 每个实例中的文件数
[ root@client www]
[ root@client www]
Password for root@// 192.168 .100 .3 / LNMP- C7:
[ root@client www]
[ root@client mnt]
[ root@client mnt]
[ root@client opt]
[ root@client inotify- tools- 3.14 ]
[ root@client inotify- tools- 3.14 ]
[ root@client inotify- tools- 3.14 ]
[ root@client inotify- tools- 3.14 ]
重新开启一个客户机的终端
[ root@client ~ ]
[ root@client html]
[ root@client html]
回到开启监控的终端查看
/ var/ www/ html/ CREATE abc
/ var/ www/ html/ DELETE abc // 显示监控信息
在client客户机创建脚本,通过inotifywait触发rsync同步操作脚本
[ root@client inotify- tools- 3.14 ]
[ root@client opt]
INOTIFY_CMD= "inotifywait -mrq -e modify,create,move,delete /var/www/html/"
RSYNC_CMD= "rsync -avz --delete --password-file=/etc/server.pass /var/www/html/ backuper@192.168.144.128::wwwroot/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $( pgrep rsync | wc - l) - le 0 ] ; then
$RSYNC_CMD
fi
done
[ root@client opt]
在rsyncd服务器上修改配置文件
[ root@rsyncd www]
read only = no // 关闭只读权限
[ root@rsyncd www]
tcp 0 0 192.168 .144 .128 : 873 0.0 .0 .0 : * LISTEN 36346 / rsync
[ root@rsyncd www]
[ root@rsyncd www]
[ root@rsyncd www]
[ root@rsyncd www]
在client客户机上执行inotify脚本文件
[ root@client opt]
重新开启一个client客户机终端
[ root@client html]
查看开启监控服务终端信息
[ root@client opt]
sending incremental file list
. /
rsync: failed to set times on "/." ( in wwwroot) : Operation not permitted ( 1 )
test. txt
sent 121 bytes received 30 bytes 302.00 bytes / sec
total size is 30 speedup is 0.20
rsync error: some files/ attrs were not transferred ( see previous errors) ( code 23 ) at main. c( 1052 ) [ sender= 3.0 .9 ]
sending incremental file list
sent 66 bytes received 8 bytes 148.00 bytes / sec
total size is 30 speedup is 0.41
在rsync服务器上查看
[ root@rsyncd www]
[ root@rsyncd html]
index. html test. txt // 实现同步