rsync远程同步

xiaoxiao2021-02-28  119

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,保存用户的密码

转载请注明原文地址: https://www.6miu.com/read-41915.html

最新回复(0)