文章目录
- rsync
- 基本功能与特点
- 工作原理
- 应用场景
- 配置与使用
- 注意
- rsync部署安装示例
- 配置rsync源服务器
- 发起端配置
- 发起端配置rsync+inotify
- 使用rsync快速删除大量文件
rsync
Remote Sync,远程同步。是一个开源的快速备份工具
基本功能与特点
- 跨主机同步:rsync可以在不同主机之间镜像同步整个目录树,非常适合异地备份、镜像服务器等应用。
- 增量备份:它支持增量备份,即只传输修改过的文件,大大提高了同步效率。
- 保持文件属性:rsync可以保持文件的权限、时间戳、软硬链接等元数据,确保同步后的文件与原始文件完全一致。
- 优化算法:采用优化的同步算法,并在传输前执行压缩,进一步提高了同步速度和效率。
- 安全传输:rsync可以通过SSH等安全协议进行远程同步,保障数据传输的安全性。
工作原理
rsync使用所谓的“Rsync算法”来使本地和远程两个主机之间的文件达到同步。这个算法只传送两个文件的不同部分(通过差分编码实现),而不是每次都整份传送,因此速度相当快。
具体的工作流程:
- 发起端(客户机)构造FileList,FileList包含了需要与同步源(服务器)同步的所有文件信息对(name->id)。
- 发起端将FileList发送到同步源。
- 同步源上运行的rsync进程处理FileList,构建NewFileList。其中根据MD5值的比较来删除同步源上已经存在的文件的信息对,只保留同步源上不存在或变化的文件。
- 发起端得到NewFileList后,将NewFileList中的文件重新传输到同步源。
应用场景
- 文件和目录备份:rsync可以对文件和目录进行快速、高效的备份。
- 文件镜像和复制:在分布式环境中,多个节点需要保持一致性。rsync可以实现节点间的文件同步和复制,使得分布式文件系统保持一致性并及时反映文件更改。
- 远程文件同步:rsync可以将本地和远程文件的变更快速地同步,通过网络进行文件传输,并自动检测并传输差异部分,从而减少网络带宽和传输时间。
- 自动化脚本运行:rsync可以结合脚本进行自动化的文件同步和备份。
- 带宽限制文件同步:rsync支持带宽限制同步,用户可以对上传和下载带宽进行限制控制。
配置与使用
- 服务端配置:需要配置rsyncd.conf文件,指定同步的目录、访问控制等。然后启动rsync守护进程,等待客户端连接。
- 客户端配置:客户端使用rsync命令发起同步操作,指定原始位置和目标位置。可以使用多种选项来控制同步的行为,如递归模式、压缩传输、保留文件属性等。
注意
- 权限问题:确保发起端对同步源上的文件具有读取权限,同时确保同步目标位置具有写入权限。
- 网络问题:在网络条件不好的情况下,可能需要调整rsync的传输参数以提高同步效率。
- 安全性:使用SSH等安全协议进行同步时,需要确保网络连接的安全性,防止敏感信息泄露。
rsync部署安装示例
首先关闭防火墙
systemctl stop firewalld
setenforce 0
配置rsync源服务器
- 检查rsync是否已安装
rpm -q rsync # 检查系统中是否已安装rsync
- 创建并配置
/etc/rsyncd.conf
文件
添加以下内容:vim /etc/rsyncd.conf # 编辑rsync配置文件
uid = root # 运行rsync的用户ID gid = root # 运行rsync的组ID use chroot = yes # 使用chroot,将进程限制在源目录中 address = 192.168.80.10 # 监听的IP地址 port = 873 # 监听的端口号 log file = /var/log/rsyncd.log # 日志文件的位置 pid file = /var/run/rsyncd.pid # 存放进程ID的文件位置 hosts allow = 192.168.80.0/24 # 允许访问的客户机地址范围 dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z # 不压缩的文件类型 [wwwroot] # 共享模块名称 path = /var/www/html # 源目录的实际路径 comment = Document Root of www.xy101.com # 共享模块的描述 read only = yes # 设置为只读 auth users = backuper # 授权账户 secrets file = /etc/rsyncd_users.db # 存放账户信息的数据文件 #如采用匿名的方式,只要将其中的“auth users”和“secrets file”配置项去掉即可。
- 创建账户信息数据文件
添加内容:vim /etc/rsyncd_users.db # 编辑账户信息文件
backuper:abc123 # 用户名和密码
chmod 600 /etc/rsyncd_users.db # 设置文件权限,仅所有者可读写
- 确保源目录有读取权限
chmod +r /var/www/html/ # 为源目录添加读取权限 ls -ld /var/www/html/ # 列出源目录的详细信息
- 启动rsync服务
rsync --daemon # 以守护进程方式启动rsync服务 netstat -anpt | grep rsync # 检查rsync服务是否在监听端口
- 关闭rsync服务
kill $(cat /var/run/rsyncd.pid) # 杀死rsync进程 rm -rf /var/run/rsyncd.pid # 删除pid文件
发起端配置
- 基本格式和常用选项
常用选项:rsync [选项] 原始位置 目标位置 # rsync的基本使用格式
-r
:递归模式,包含目录及子目录中的所有文件。-l
:对于符号链接文件仍然复制为符号链接文件。-v
:显示同步过程的详细(verbose)信息。-z
:在传输文件时进行压缩(compress)。-p
:保留文件的权限标记。-t
:保留文件的时间标记。-g
:保留文件的属组标记(仅超级用户使用)。-o
:保留文件的属主标记(仅超级用户使用)。-D
:保留设备文件及其他特殊文件。-H
:保留硬连接文件。-a
:归档模式,保留文件的权限、属性等信息,等同于组合选项“-rlptgoD”。-A
:保留 ACL 属性信息。--delete
:删除目标位置有而原始位置没有的文件。--checksum
:根据校验和(而不是文件大小、修改时间)来决定是否跳过文件。
- 下载资源到本地备份
或rsync -avz backuper@192.168.80.10::wwwroot /opt/ # 使用rsync从远程服务器同步文件到本地目录
rsync -avz rsync://backuper@192.168.80.10/wwwroot /opt/ # 使用rsync协议从远程服务器同步文件到本地目录
- 免交互格式配置
echo "abc123" > /etc/server.pass # 创建包含密码的文件 chmod 600 /etc/server.pass # 设置文件权限,仅所有者可读写 crontab -e # 编辑定时任务 30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass backuper@192.168.80.10::wwwroot /opt/ # 每晚22:30执行rsync同步任务 systemctl restart crond # 重启定时任务服务 systemctl enable crond # 设置定时任务服务开机自启
- 使用ssh认证方式
rsync 有两种常用的认证方式,一种为rsync-daemon
方式,另外一种则是ssh
。
在一些场合,使用rsync-daemon
方式会比较缺乏灵活性,ssh 方式则成为首选。rsync -avz -e 'ssh -p 22' /var/www/html/index.html root@192.168.80.10:/opt/ # 使用ssh协议进行rsync同步
-e 'ssh -p 22'
:rsync 使用 ssh 指定端口,端口如果是 22 默认端口则不用指定该参数。
发起端配置rsync+inotify
使用inotify
通知接口,可以用来监控文件系统的各种变化情况,如文件存取、删除、移动、修改等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。
将inotify
机制与rsync
工具相结合,可以实现触发式备份(实时同步),即只要原始位置的文档发生变化,则立即启动增量备份操作;否则处于静默等待状态。这样,就避免了按固定周期备份时存在的延迟性、周期过密等问题。
因为 inotify
通知机制由 Linux 内核提供,因此主要做本机监控,在触发式备份中应用时更适合上行同步。
- 修改rsync源服务器配置文件
修改vim /etc/rsyncd.conf # 编辑rsync配置文件
read only = no
,重启rsync服务。关闭只读,上行同步需要可以写 - 调整inotify内核参数
vim /etc/sysctl.conf # 编辑内核参数配置文件 fs.inotify.max_queued_events = 16384 # 最大监控事件队列 fs.inotify.max_user_instances = 1024 # 最多监控实例数 fs.inotify.max_user_watches = 1048576 # 每个实例最多监控文件数 sysctl -p # 应用内核参数更改
- 安装inotify-tools
tar zxvf inotify-tools-3.14.tar.gz -C /opt/ # 解压inotify-tools源码包 cd /opt/inotify-tools-3.14 # 进入源码目录 ./configure # 配置编译选项 make && make install # 编译并安装inotify-tools
- 编写触发式同步脚本
添加内容:vim /opt/inotify.sh # 编辑触发式同步脚本
#!/bin/bash INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/" # inotifywait命令,监控文件变化 RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /var/www/html/ backuper@192.168.80.10::wwwroot/" # rsync同步命令 $INOTIFY_CMD | while read DIRECTORY FILE EVENT # 循环读取监控结果 do if [ $(pgrep rsync | wc -l) -le 0 ] ; then # 如果rsync未在执行,则立即启动 $RSYNC_CMD # 执行rsync同步命令 fi done
chmod +x /opt/inotify.sh # 设置脚本可执行权限 chmod 777 /var/www/html/ # 设置源目录可读写执行权限 chmod +x /etc/rc.d/rc.local # 设置系统启动脚本可执行权限 echo 'nohup /opt/inotify.sh &' >> /etc/rc.d/rc.local # 将脚本添加到系统启动项
使用rsync快速删除大量文件
mkdir /home/blank # 创建一个空目录
rsync --delete-before -a -H -v --progress --stats /home/blank/ /usr/local/nginx/proxy_temp/ # 使用rsync快速清空目标目录
选项说明:
--delete-before
: 接收者在传输进行删除操作-a
: 归档模式,表示以递归方式传输文件,并保持所有文件属性-H
: 保持硬连接的文件-v
: 详细输出模式--progress
: 在传输时显示传输过程--stats
: 给出某些文件的传输状态