rsync是一个快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,保持链接和权限,还可以搭配其他软件实现实时同步。rsync的配置其实很简单,这里还会介绍一些基本用法和搭配inotify软件实时同步
配置rsync源服务器
yum -y install rsync
一般linux各种distribution中已经默认安装好的
1.手动建立/etc/rsyncd.conf 配置文件
vim /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = yes //禁锢在源目录
address = *.*.*.* //监听地址
port 873 //监听端口
pid file = /var/run/rsyncd.pid //pid文件位置
log file = /var/log/rsyncd.log //日志文件位置
hosts allow = 192.168.1.0/24 //允许访问的客户机地址
[www] //共享模块名称
comment = lalalalalala //描述
path = /var/www/html //源目录的实际路径
read only = yes //是否为只读
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z //同步时不再压缩的文件类型
auth users = backuper //授权账户
secrets file = /etc/rsyncd_users.db //存放账户信息的数据文件
最后两行如果不加,则为匿名登陆同步
2.创建用户数据文件
vim /etc/rsyncd_users.db
user:pwd123 //rsyncd_users.db文件里的用户数据,一行一个用户
chmod 600 /etc/rsyncd_users.db
用户需要对源目录/var/www/html有相应的权限,只要other组有读取权限即可
3.启动rsync服务
rsync –daemon
如要关闭,可以采用kill $(cat /var/run/rsyncd.pid) 关闭
使用rsync备份工具
1.命令格式及常用备份选项
-r:递归模式,包含目录及子目录中的所有文件
-l:对于符号链接文件仍然复制为符号链接文件
-v:verbose
-a:归档模式,保留文件的权限、属性等信息(相当于all)
-z:在传输文件时进行压缩
-p:保留文件的权限标记
-t:保留文件的事件标记
-g:保留文件的属组标记(仅超级用户使用)
-o:保留文件的属主标记(仅超级用户使用)
-H:保留硬链接文件
-A:保留ACL属性信息
-D:保留设备文件及其他特殊文件
--delete:删除目标位置有,而原始位置没有的文件
--checksum:根据校验和来决定是否跳过文件
2.配置源的表示方法
rsync -avz user@192.168.1.1::www /root 或者
rsync -avz rsync://user@192.168.1.1/www /root
配置rsync+inotify实时同步
inotify是linux内核从2.6.13版本以后提供的通知接口
1.调整inotify内核参数
cat /proc/sys/fs/inotify/max_queued_events
16384 //监控事件队列
cat /proc/sys/fs/inotify/max_user_instances
128 //最多监控实例数
cat /proc/sys/fs/inotify/max_user_watches
8192 //每个实例最多监控文件数
根据监控的目录文件数量不同,调整三个调控参数
2.安装inotify-tools
这个软件提供了用于监控的辅助工具程序,如inotifywait、inotifywatch
tar xzf inotify-tools-*.tar.gz -C /usr/src
cd /usr/src/inotify-tools-*
./configure
make && make insatll
监控实例:
inotifywait -mrq -e modify,create,move,delete /var/www/html
以上是以监控/var/www/html为例,在另外一个终端下做添加文件等动作。
-e:用来指定要监控哪些事件
-m:表示持续监控
-r:表示递归整个目录
-q:简化输出信息
3.再根据编写脚本来实现同步
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,move,delete /var/www/html
"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html rput@192.168.1.1::共享模块名"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if[ $(pgrep rsync | wc -l ) -le 0 ] ; then
$RSYNC_CMD
fi
done
为实现无人值守,需要创建一个密码文件,如脚本中的/etc/server.pass,保存用户的密码