一、概述
rsync是Linux下一个远程数据同步工具
它可通过LAN/WAN快速同步堕胎主机间的文件和目录,并适当利用rsync算法减少数据的传输
会对比两个文件的不同部分,传输差异部分,因此传输速度相当快
rsync可拷贝、显示目录属性,以及拷贝文件,并选择性的压缩及传递拷贝
二、特性
快速:第一次传输全部,下一次传输差异
Rsync在传输过程中可以实行压缩和解压缩,使用更少的带宽
安全:可以使用scp、ssh等方式传输
直接通过socket连接
支持匿名传输、方便进行网站镜像
三、应用场景
增量同步
备份迁移
四、数据的同步方式
数据备份:拉去(下载)
数据恢复:推送(上传)
五、rsync传输模式
本地传输:本地同步数据,类似于cp
远程传输:远程同步数据,类似与scp
守护进程:通过模块化的方式实现批量传输(实时同步传输)
六、rsync应用
[root@localhost ~]# yum -y install rsync
监听端口号:tcp/873
七、rsync配置
主配置文件:vim /etc/rsyncd.conf
配置:uid=rsync 定义运行用户
gid=rsync 定义运行组
fake super=yes 用于允许非root用户,在备份目录创建文件
list=false 默认true,允许查看本机有哪些模块
auth users=rsync_backup 用于指定认证用户
secreys file=/etc/rsync.passwd 指定认证用户密码
max connections=4 允许最大连接数
read only=false 默认yes,模块目录只读权限
lgnore errors 屏蔽错误报错
timeout=900 指定rsync传输超时时间
[backup] 指定模块目录
path=/backup 指定模块目录路径
创建用户:
[root@localhost ~]# useradd rsync -s /sbin/nologin -M
创建认证用户的密码:
[root@localhost ~]# echo “rsync_backup:123456” > /etc/rsync.passwd
[root@localhost ~]# chmod 600 /etc/rsync.passwd
准备模块目录:
[root@localhost ~]# mkdir /backup
[root@localhost ~]# chown rsync:rsync /backup
重启服务:
[root@localhost ~]# systemctl restart rsyncd
客户端远程传输:
[root@localhost ~]# rsync -avz /etc/hosts rsync_backup@192.168.20.10::backup
通过密码文件实现免密传输
[root@localhost ~]# vim /etc/rsync.passwd
[root@localhost ~]# chmod 600 /etc/rsync.passwd
[root@localhost ~]# rsync -avz /etc/hosts rsync_backup@192.168.20.10::backup --password-file /etc/rsync.passwd
八、rsync+inotfy实时同步
服务端
安装网站服务,启动,但是不写首页文件
修改主配置文件:
uid=root
gid=root
[wwwroot]
path=/var/www/html
comment=backup export area
read only=false
hosts allow=192.168.20.0/24
开发客户端
安装inotify工具
[root@localhost ~]# tar xf inotify-tools-3.14.tar.gz
[root@localhost ~]# ./configure && make && make install
配置内核参数
[root@localhost ~]# vim /etc/sysctl.conf
fs.inotify.max_user_instances=1024
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_watches=1048576
[root@localhost ~]# sysctl -p 查看是否写入
[root@localhost ~]# inotifywait -mrq -e modify,create,move,delete /var/www/heml
(实时监控本机/var/www/heml目录的变化,可打开另一个终端进行实验)
编写脚本:
[root@localhost ~]# vim /opt/inotify_rsync.sh
(#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html"
RSYNC_CMD="rsync-azH--delete /var/www/html 192.168.115.130::wwwroot"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
$RSYNC_CMD
Done)
赋予执行权限
[root@localhost ~]# chmod +x inotify_rsync.sh
写入文件
[root@localhost ~]# vim /etc/rc.local
/root/inotify_rsync.sh