Rsync
一、简介
一款快速增量备份工具
- Remote Sync,远程同步
- 支持本地复制,或者与其他SSH、rsync主机同步
- 官方网站:https://rsync.samba.org/
二、rsync同步源
指备份操作的远程服务器,也称为备份源
例:
- A服务器同步B服务器的数据,B服务器就是备份源
- 反过来,B服务器同步A服务器的数据,那么A服务器就是备份源
三、配置rsync源
1、基本思路
建立rsync.conf 配置文件,独立的账号文件
启用rsync的 --daemon模式
2、配置文件rsyncd.conf
认证配置auth users、secrets file,不加则为匿名
3、独立的账号文件
以“用户名:密码”的格式记录
每行一个用户记录
独立的账号数据,不依赖于账号系统
4、启用rsync服务
通过–daemon 独立提供服务,rsync --daemon
执行kill $(cat /var/run/rsyncd.pid)关闭服务
扫描二维码关注公众号,回复:
13108933 查看本文章

四、Rsync相关命令
格式
rsync 【选项】原始位置 目标位置
常用选项
参数 | 解释 |
---|---|
-a | 归档模式,递归并保留对象属性,等同于-rlptgoD |
-v | 显示同步过程的详细信息 |
-z | 在传输时进行压缩 |
-H | 保留硬链接文件 |
-A | 保留ACL属性信息 |
–delete | 删除目标位置有而原始位置没有的文件 |
–checksum | 根据对象的校验和来决定是否跳过文件 |
… | … |
后面还有一些参数,这里暂时就不列举出来了
配置源的两种表达方式
格式一:
用户名@主机地址::共享模块名
格式二:
rsync://用户名@主机地址/共享模块名
五、Inotify
简介
1、Linux内核的 inotify 机制
- 从版本2.6.13开始提供
- 可以监控文件系统的变动情况,并做出通知响应
- 辅助软件:inotify-tools
- 调整inotify内核参数(优化)
- /etc/sysctl.conf(内核参数配置文件)
max_queue_events #监控事件队列大小
max_user_instances #最多监控实例数
max_user_watches #每个实例最多监控文件数
2、rsync + inotify 实时同步
- 安装inotify-tools辅助工具
- inotifywait:用于持续监控,实时输出结果
- inotifywatch:用于短期监控,任务完成后再出结果
例:
inotifywait -mrq -e modify,create,move,delete /var/www/html
#参数解释#
-m:持续进行监控
-r:递归监控所有子对象
-q:简化输出信息
-e:指定要监控哪些事件类型
modify:修改
create:创建
move:移动
delete:删除
六、配置Rsync下行同步
环境
主机 | 主机名 | 操作系统 | IP | 主要软件 |
---|---|---|---|---|
Master | Centos7-1 | Centos7 | 192.168.171.7 | rsync |
Slave | Cetnos7-2 | Cetnos7 | 192.168.171.4 | rsync / inotify-tools-3.14.tar.gz |
inotify软件包下载地址:https://share.weiyun.com/uLrrgchw
下行同步:将master服务器数据备份到slave服务器
1、Master(192.168.171.7)
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
#关闭防火墙及安装机制
yum install -y httpd rsync
#rsync系统一般已默认安装,安装httpd是为了生成/var/www/html目录(后续会用到作为共享目录)
vim /etc/rsyncd.conf #编辑rsync配置文件
添加
uid = root
gid = root
use chroot = yes
address = 192.168.171.7
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.171.0/24
[wwwroot]
path = /var/www/html
comment = Document Root of www.ypy.com
read only = yes
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z
auth users = yiyi
secrets file = /etc/rsyncd_users.db
解释
uid = root #用户id
gid = root #组id
use chroot = yes #开启,禁锢在源目录
address = 192.168.171.7 #监听地址
port 873 #默认端口号为873
log file = /var/log/rsyncd.log #日志文件存放位置
pid file = /var/run/rsyncd.pid #存放进程id的文件位置
hosts allow = 192.168.171.0/24 #允许访问的主机网段
[wwwroot] #共享模块的名称
path = /var/www/html #源目录路径
comment = Document Root of www.ypy.com
read only = yes #是否为只读
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步时不再压缩的文件类型
auth users = yiyi #授权用户,多个账户以空格隔开
secrets file = /etc/rsyncd_users.db #存放账号信息的数据文件,一行一个
vim /etc/rsyncd_users.db
yiyi:abc123
#编辑用户账号文件,固定格式为[名称:密码],一行一个
chmod 600 /etc/rsyncd_users.db
#最好只是赋权600,别的可能会报错
rsync --daemon
#开启服务
netstat -natp | grep rsync
#检测端口号,确认服务是否成功开启
cd /var/www/html
#切换至共享目录下
touch ppp.html
touch 555.html
2、Slave(192.168.171.4)
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
yum install -y rsync
cd /opt
mkdir uuu
chmod 777 uuu
#赋权777
vim /etc/server.pass
abc123
#编辑免交互密钥文件,第一行为密码
chmod 600 /etc/server.pass
#给密钥文件赋权600
rsync -az --delete --password-file=/etc/server.pass [email protected]::wwwroot /opt/uuu
#rsync,使用密钥文件/etc/server/pass对应yiyi用户,IP地址为192.168.171.7的共享模块文件进行压缩,并归档同步至当前服务器的/opt/uuu目录下,同时删除差异内容
ls uuu
#查看目录,下行同步是否成功
七、配置Rsync+Inotify实时同步
1、Master(192.168.171.7)
关闭只读模式并为共享目录赋权
vim /etc/rsyncd.conf
read only = no
#关闭只读模式,否则将不可写入
kill `cat /var/run/rsyncd.pid`
#修改完配置文件需要重启服务,这里采用直接杀掉进程号的方式
netstat -natp | grep rsync
#检查一下服务是否不在了
rsync --daemon
netstat -natp | grep rsync
#再次开启服务查看是否启动
chmod 777 /var/www/html
#给共享目录赋权777
2、Slave(192.168.171.4)
优化内核参数
cat /proc/sys/fs/inotify/max_queued_events
cat /proc/sys/fs/inotify/max_user_instances
cat /proc/sys/fs/inotify/max_user_watches
#查看当前默认inotify的内核参数
#依次为监控事件队列、最多监控实例与每个实例最多监控的文件
vim /etc/sysctl.conf
fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
#优化内核参数
sysctl -p
#加载内核参数配置文件使其生效
编译安装inotify-tools
yum install -y gcc gcc-c++
cd /opt
#将软件包传至该目录下
tar zxvf inotify-tools-3.14.tar.gz
cd /opt/inotify-tools-3.14/
./configure
make -j 2 && make install
编写自动监控同步脚本
vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /opt/uuu/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /opt/uuu/ [email protected]::wwwroot"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ] ; then
$RSYNC_CMD
fi
done
cd /opt/
chmod +x inotify.sh
./inotify.sh &
#放在后台运行
cd /opt/uuu
touch 999.html
rm -rf 555.html
#创建一个新的html文件并删除之前的555
3、验证
Master (192.168.171.7)
cd /var/www/html
ls
#可以看到实时同步成功
#之后还可继续尝试,Master在共享目录内如何操作都不会影响到Slave端,而Slave的在该目录内的操作都会同步给Master
简结:另一种方式的文件共享目录,并且如果同步则可实时更新情况