rsync(Remote Sync)是一个开源的快速增量备份工具,主要用于在本地或远程主机之间高效同步文件和目录,支持跨平台(如Windows与Linux间同步)操作并保持文件属性。
基础环境
利用rsync实现在不同linux服务器上的文件进行定时同步,有A、B两台CentOS7系统服务器,A的IP为192.168.5.3,B的IP为192.168.5.5;A服务器上有一个目录为/home/rsync,B服务器上有一个目录为/home/rsync;
安装rsync
查看两台机器是否都安装了rsync
rpm -qa | grep rsync
如果没有安装,执行以下命令安装rsync
yum update -y
yum install -y rsync
配置rsync服务端(仅A服务器配置)
把A服务器当服务端,执行以下命令,创建rsync配置文件
vi /etc/rsyncd.conf
在配置文件中添加以下内容
[module-rsync]
#同步的文件路径
path = /home/rsync
#同步的目录名称
comment = rsync
#同步的用户
uid = root
#同步的用户组
gid = root
#是否只读
read only = false
#允许同步的主机
hosts allow = 192.168.5.5
#拒绝同步的主机
hosts deny = *
#同步的用户名
auth users = vscing
#同步的密码文件
secrets file = /etc/rsyncd.secrets
在A服务器上执行以下命令,创建rsync密码文件
vi /etc/rsyncd.secrets
echo "a:123456" > /etc/rsyncd.secrets
::: 重要 设置密码文件权限 :::
chmod 600 /etc/rsyncd.secrets
启动sync服务
设置rsync服务开机自启
systemctl enable rsyncd
启动rsync服务
systemctl start rsyncd
查看服务状态
systemctl status rsyncd
重启rsync服务
systemctl restart rsyncd
设置防火墙
提示
使用云服务器,需要在云服务器机器A和B的控制台设置安全组,开放rsync服务端口873。 机器A和B的防火墙都需要设置,开放rsync服务端口873。
查看服务器上rsync服务的端口
netstat -tulpn | grep rsync
进行防火墙策略放通
firewall-cmd --zone=public --add-port=873/tcp --permanent
firewall-cmd --reload
查看防火墙策略
firewall-cmd --zone=public --list-ports
测试rsync服务
上面配置完成后,需要测试一下rsync服务是否正常
B服务器配置密码
在B服务器上执行以下命令,创建rsync密码文件
echo "123456" > /root/passwd
::: 重要 设置密码文件权限 :::
chmod 600 /root/passwd
测试A服务器到B服务器同步
在B服务器上执行以下命令,测试A服务器到B服务器同步
rsync -avz --password-file=/root/passwd vscing@192.168.5.3::module-rsync /home/rsync
B服务器同步A服务器文件
在A服务器上执行以下命令,测试B服务器到A服务器同步
rsync -avz --password-file=/root/passwd /home/rsync vscing@192.168.5.5::module-rsync
同步配置
打通同步后,为保证A和B文件的一致性,需要保持同步实时执行,即A服务器上的文件发生变化,B服务器上的文件也会实时同步。
同步方式分析
同步方式分析:
- 定时同步:不管有没有文件变化,固定时间同步A服务器上内容到B服务器上,对实时性要求不高的场景,服务器压力小;
- 文件监听:监听A服务器上的文件变化,有变化时,立即同步到B服务器上,对实时性要求高的场景,服务器压力大;
配置定时同步
在B服务器上执行以下命令,配置定时同步
创建命令文件
touch /root/rsyncd.sh
编辑命令文件
vi /root/rsyncd.sh
写入内容
#!/bin/bash
rsync -avz --password-file=/root/passwd /home/rsync vscing@192.168.5.5::module-rsync
添加可执行权限
chmod 755 /root/rsyncd.sh
配置定时任务
crontab -e
# 每35分钟执行一次
*/35 * * * * /root/rsyncd.sh >/dev/null 2>&1
文件监听同步
安装 inotify-tools
yum install -y inotify-tools
创建监听脚本
touch /root/inotify.sh
编辑监听脚本
vi /root/inotify.sh
写入内容
#!/bin/bash
inotifywait -mr --timefmt '%Y-%m-%d %H:%M:%S' --format '%T %w %f %e' /home/rsync | while read date dir file event
do
echo "[$date] $dir $file $event"
rsync -avz --password-file=/root/passwd /home/rsync vscing@192.168.5.5::module-rsync
done
#!/bin/bash
SRC="/home/rsync" # 源目录
DEST="vscing@192.168.5.5::module-rsync" # 目标服务器和模块
PASSWD="/root/passwd" # 密码文件路径
LOG="/var/log/sync.log" # 日志文件路径
# 监听源目录的变化
inotifywait -m -r -e modify,create,delete,move --format '%w%f' "$SRC" | while read FILE
do
echo "[$(date)] 文件 $FILE 发生变化,开始同步..." >> "$LOG"
rsync -avz --delete "$SRC" "$DEST" --password-file="$PASSWD" >> "$LOG"
echo "[$(date)] 同步完成" >> "$LOG"
done
添加可执行权限
chmod 600 /root/inotify.sh
运行监听脚本
./inotify.sh