一、基本介绍
Rsync 全称为:Remote Sync(远程同步),是一款开源的快速备份工具,可以在不同主机间镜像同步整个目录树,支持增量备份,保持链接和权限,采用优化的同步算法,传输前执行压缩,适用于异地备份,镜像服务器等应用(Linux 系统默认安装)
背景: 某服务有两台服务器,主服务器:存在jar包主程序。静态资源服务器:放前端静态资源的服务器,web访问服务器。
图片资源都在主服务器上。不想把请求图片压力都给到主服务器。静态资源服务器的贷款大,所以需要实时同步主服务器上的图片到静态资源服务器。
服务器身份区分:
- 主服务器: 可以理解为源服务器,向web服务器发送要同步的数据(需要有同步端提供目录的读权限)
- web服务器: 可以理解为服务端web访问端,专用于存放同步文件;类似于远程备份中心(通过提供目录,来使客户端进行同步)
二、使用 Rsync 实现远程同步
准备工作:
主机名 | 操作系统 | IP地址 | 担任角色 |
---|---|---|---|
A-Server | CentOS7.4 | 192.168.1.1 | 主服务器 |
B-Server | CentOS7.4 | 192.168.1.2 | web服务器 |
rsync安装:yum install -y rsync 两台服务器都安装
1.配置web服务器
1.修改 Rsync 主配置文件
[root@B-Server ~]# vim /etc/rsyncd.conf
use chroot = yes # 禁锢在源目录
address = 192.168.1.2 # 监听地址
port = 873 # 监听端口
log file = /var/log/rsyncd.log # 日志文件
pid file = /var/run/rsyncd.pid # 进程文件
hosts allow = 192.168.1.0/24 # 允许访问的客户端地址
[PengYuYan] # 共享模块名
path = /app/backup # 需要同步的实际路径
comment = This is Test # 描述信息. 随便写
read only = no # 读写权限
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 # 同步时不再压缩的文件类型
auth users = zhangsan # 授权同步的账户
secrets file = /etc/rsync_users.db # 账户所在的数据文件
你们要是复制我上面的话,是没问题的,但是要把 #
去掉,这是个坑,需要注意。
[root@B-Server ~]# sed -i 's/#.*//g' /etc/rsyncd.conf
创建备份目录
[root@B-Server ~]# mkdir -p /app/backup && chmod 777 /app/backup
创建备份账户密码文件
[root@B-Server ~]# echo "zhangsan:123123" > /etc/rsync_users.db # zhangsan 是用户名. 123123 是密码
[root@B-Server ~]# chmod 600 /etc/rsync_users.db # 对用户的数据文件进行权限保护
记得防火墙开放 873端口 或者关闭防火墙
1.配置主服务器
vi /etc/rsyncd.conf
uid = root
gid = root
port = 873
fake super = yes
use chroot = no
max connections = 200
timeout = 600
read only = false
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = *
写入认证密码文件和创建文件夹
[root@B-Server ~]# echo '123123' > /etc/rsync_users.db
chmod 600 /etc/server.pass
mkdir /app/backup
echo "Hello World" > /app/backup/Hello.sql # 创建测试文件
同步文件测试
[root@B-Server ~]# rsync -avH --port 873 --progress --delete /app/backup/ zhangsan@192.168.1.2::PengYuYan --password-file=/etc/rsync_users.db
sending incremental file list
./
Hello.sql
17 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=0/4)
sent 184 bytes received 46 bytes 153.33 bytes/sec
total size is 46 speedup is 0.20
三、安装inotify-tools工具,实现实时触发rsync进行同步
1、主服务器上安装inotify-tools
yum -y install inotify-tools
2、调整 Inotify 内核参数 (监控事件队列);最多监控实例数;每个实例最多监控文件数:
[root@A-Server ~]# cat /proc/sys/fs/inotify/max_queued_events
16384
[root@A-Server ~]# cat /proc/sys/fs/inotify/max_user_instances
128
[root@A-Server ~]# cat /proc/sys/fs/inotify/max_user_watches
8192
把三个参数数值加大: 监控的目录、文件数量较多或变化频繁
[root@A-Server ~]# cat <> /etc/sysctl.conf
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
END
[root@A-Server ~]# sysctl -p
验证: 监控 /opt
目录的变化
[root@A-Server ~]# inotifywait -mrq -e modify,create,move,delete /app/backup
监控选项 | 作用 |
---|---|
-m |
表示持续监控 |
-r |
表示递归整个目录 |
-q |
简化输出消息 |
-e |
指定监控哪写事件 |
modify |
修改 |
create |
创建 |
move |
移动 |
delete |
删除 |
attrib |
属性变化 |
3、创建目录/scripts,并在此目录上编写脚本文件inotify.sh,(设置755权限)内容如下:
[root@B-Server ~]# mkdir /scripts
[root@B-Server ~]# cd /scripts
[root@B-Server ~]# vi inotify.sh
#!/bin/bash
#监控路径
SRC="/app/backup"
/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %f%e' -e modify,delete,create,attrib ${SRC} | while read files
do
/usr/bin/rsync rsync -avH --port 873 --progress --delete /app/backup/ zhangsan@192.168.1.2::PengYuYan --password-file=/etc/rsync_users.db
echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
done
4、启动脚本(以后台方式运行),并查看是否启动成功,创建日志文件
[root@B-Server ~]# touch /tmp/rsync.log
[root@B-Server ~]# nohup bash /scripts/inotify.sh & ps -ef|grep inotify
[1] 89789
nohup: 忽略输入并把输出追加到"nohup.out"
root 89789 78623 0 17:15 pts/7 00:00:00 bash /scripts/inotify.sh
root 89791 78623 0 17:15 pts/7 00:00:00 grep --color=auto inotify
5、去同步目录下添加一个文件试试
[root@B-Server ~]# echo '989865323' > /app/backup/65656.txt
6、去web服务器的同步目录下是否有该文件
[root@beautiful-baud-19 /] cd /app/backup
[root@beautiful-baud-19 backup]# ls
111.txt 65656.txt Hello.txt kk.txt
7、 看到文件已经同步过来,结束
Comments | NOTHING