rsync
远程同步
rsync(remote sync)
备份
完全备份
增量备份(差异备份)
rsync
优点:
支持增量备份
选择性保持:符号链接,硬链接,文件属性,权限及时间等。
传输前执行压缩,适合于异地备份,镜像服务器等应用。
使用ssh作为传输端口,sftp,ssh,xshell 。
与scp区别:
当文件数据很大时候: scp 的效率太低,(scp是先统计信息,需要多少空间后,在复制)
rsync 边复制,边比较,边统计
基础知识
端口:873
模式: 如果直接使用命令rsync,就是点到点。
官网: http://rsync.samba.org
在远程同步任务中,负责发起rsync同步操作的客户机称为发起端,而负责响应来自客户机的rsync同步操作的服务器称为备份源。
数据同步:
推:push 一台机器负责把数据传给其他主机,服务器开销大。适合后端服务器比较少。
拉:poll 所有主机定时去找一台主机拉书籍。可能导致数据同步缓慢。
设计数据同步模式:
当主机数据同步太多是,使用分层,以树状的形式。而且推拉结合。
安装rsync
yum install rsync
ls /etc/xinetd.d/rsync
yum install xinnetd
vim /etc/xinetd.d/rsync
disenable no
netstat -nltup
tcp 873
vim /etc/services
总结:xinetd管理rsync服务;工作原理
rsync命令的基本用法:
格式:rsync [选项] 源文件 目标文件
和scp显示
-a =-rlptgoD
-r 递归
-l 连接
-p 权限
-t 保持时间
-g 保持组
-o
-D
-z 压缩
-P 进度
-u 更新
--port=
--delete删除源文件中没有的数据
--password-file=FILE 从file中得到密码
--bwlimit=KBPS 限制
--filter '' 需要过滤的文件
--excu
实例
创建用户
创建目录
修改权限
setfacl -R -m user:youdi:rwx /var/www
setfacl -R -m d:user:youdi:rwx /var/www
开始备份
rsync -azP --delete youdi@172.16.1.84:/ /tmp
实现无密码备份和登录:
ssh-key -t rsa -f -p''
ssh-copy-id youdi@172.16.1.84
编写脚本
vim /etc/back.sh
rsync -az --delete youdi@172.16.1.84:/var/www/html /tmp/html
计划任务:
vim /etc/crontab
分 时 日 月 周 用户 脚本
crontab -e
备份完打包
tar cvzf aa.tar.gz /etc/**
配置rsync服务器及需要备份的目录,不使用系统用户进行备份。
需要自己创建配置文件:
/etc/rsync.conf
整体部分:
全局参数:对rsync服务器生效。如果模块
局部参数:
vim /etc/rsync.conf
全局参数
uid=nobody
gid=nobody
address = 172.16.1.84
port = 83
hosts allow = 允许同步的的客户端
IP,network ,*
hosts deny =
use chroot = yes 锁定家目录
maxconnections = 最大连接数
pid file =
lock file =
log file =
motd file = /etc/rsync.mothod
模块参数:
[wwwroot]
path=/var/www/html
comment=rsync wwwrppt of 描述
read only = yes 以只读的方式
list=yes 允许查看模块信息
auth users=backuper 指定备份的用户,和系统用户无关
secrets file=/etc/rsync.passwd 指点存放用户和密码文件 格式: 用户名:密码
vim /etc/rsync.passwd
backup:youdi
修改密码文件的权限:
chmod 600 /etc/rsync.passwd
启动服务:
vim /etc/xinetd/rsync
service xinetd restart
语法:
rsync 选项 用户名@备份源服务器IP::共享模块名 目标目录
rsync -azP bckup@172.16.1.84::wwwroot /web-back/
实现无交互脚本,备份数据
修改变量:
export RSYNC_PASSWORD=pwd123
总结:
注意iptables的限制
iptables -t netfilt -A INPUT -p tcp --dport 873 -j ACCEPT
进阶 inotify 监控文件的变化
rsync + inotify
linux内核从2.6.13版本开始开始提供inotify通知接口,用来监控文件系统的各种变化情况,如文件存取,删除,移动等。利用这一机制,可以非常方便的实现文件异动告警,增量备份,并针对目录或文件的变化及时作出响应。
应用
防首页篡改
使用rsync工具与inotify机制相结合,可以实现出发时备份(实时同步),只是原始位置的文档发生变化,则立即启动自动增量备份操作,否则处于静态等待,这样一来,就可以避免了按固定周期备份进存在的延迟性,周期过密等问题。
扩展:
uname -r
/proc/sys/fs/inotify
max_queued_events #表示监控事件队列
max_user_instances #表示最多监控实例数
max_user_watches #表示每个实例最多监控文件数
修改:
/etc/sysctl.conf
fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 9000000
使得配置文件生效:
sysctl -p
安装inotify-tools
安装inotify-tools,提供inotyfywait,inotifywatch辅助工具程序,从而来监控,汇总文件系统改动情况。
./configure --prefixe
make -j 4 使用4个CPU一起编译
make install
测试:
使用inotifywait命令监控网站的/www/html
inotifywait
-e 用来指定要监控哪些事件
这些事件包含:create创建,move移动。delete删除,motify修
改文件内容,attrib属性更改。
-m 表示持续监控
-r 表示递归整个目录
-q 表示简化输出信息。
inotifywait -mrq -e create,move,delete,motify /var/www
inotify -rmq 文件目录
使用inotify输出监控结果中,每行记录中依次包括目录,事件,文件。据此可以识别变动情况。编写触发式同步脚本。
第一:
备份方向,远程备份,不需要用户和密码。同步不使用root用户。
第二:编写触发式脚本:
#!/bin/bash
echo aaa bbb ccc |while read a b c
do
echo $a
echo $b
echo $c
done
思路:只要检测到变动或事件时,执行rsync上的同步操作即可。
#!/bin/bash
inotifywait -mrq /var/www/html |while read a b c
do
rsync -azp --delete /var/www/html youdi@172.16.1.5:/tmp
优化:
#!/bin/bash
SRC=/boot/
DST=youdi@172.16.1.5:/tmp
inotifywait -mrq $SRC |while read a b c
do
/usr/bin/rsync -ahqzt --delete $SRC $DST
done
使其开机自动启动:
/etc/rc.local
另外,金山Sersync是一款基于 inotify + rsync 的大量文件的多服务器自动同步程序。推荐使用。