rsync是一个快速备份工具,可以在不同主机之间镜像同步整个目录树,支持增量备份,保持链接和权限,还可以搭配其他软件实现实时同步。rsync的配置其实很简单,这里还会介绍一些基本用法和搭配inotify软件实时同步
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) 关闭
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
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,保存用户的密码
