Remote Sync,远程同步,它是一个开源的快速备份工具,可以在不同主机之间镜像同步整个目录,支持增量备份、保持连接和权限,且采用优化的同步算法,传输前执行压缩,因此分床适用于异地备份、镜像服务器等应用。支持本地复制,或者与其他SSH、rsync主机同步。官方网站:http://rsync.samba.org
语法格式:
#rsync [选项] 原始位置 目标位置
常用选项:
-a: 归档模式,递归并保留对象属性,等同于 -rlptgoD
-v: 显示同步过程的详细(verbose)信息
-z: 在传输文件时进行压缩(compress)
-H: 保留硬连接文件
-A: 保留ACL属性信息
–delete: 删除目标位置有而原始位置没有的文件
–checksum:根据对象的校验和来决定是否跳过文件
rsync 同步源服务器配置:
基本思路
建立rsyncd.conf配置文件、独立的账号文件
启用rsync的–daemon模式
用户backuper,允许下行同步
操作的目录为 /var/www/html/
(1)下载安装包
# yum -y install httpd 安装 httpd环境
# yum -y install rsync 安装 rsync服务
(2)修改配置文件
# vi /etc/rsyncd.conf
全删,复制进去
uid = nobody
gid = nobody
use chroot = yes
address = 192.168.188.135
port 873
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
hosts allow = 192.168.188.0/24
[wwwroot]
path = /var/www/html
comment = Document Root of www1.bdqn.com
read only = yes
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z
auth users = backuper
secrets file = /etc/rsyncd_users.db
同步源最好仅允许以只读方式做同步,另外,同步可以采用匿名的方式,
只要将其中的“auth users” "secrets file"配置去掉
(3)设置 rsync账号文件
采用“用户名:密码”的记录格式,每行一个用户记录,独立的账号数据,不依赖于系统账号
# vi /etc/rsyncd_users.db
添加:
backuper:pwd123
# chmod 600 /etc/rsyncd_users.db
(4)启用rsync服务
通过--daemon独自提供服务
# rsync --daemon
--如果要停止这个服务 kill $(cat /var/run/rsyncd.pid)
# netstat -anpt | grep rsync
(5)在 /var/www/html目录中,新建文件,做测试用
# cd /var/www/html/
# vi 123.html
写入123
# vi 456.html
写入456
客户端配置:
# yum -y install rsync --最小化是没有这个rsync命令的,需要安装下
# rsync /etc/fstab /opt --把 /etc/fstab拷贝到 /opt下
# ll /opt
# rsync -rl /etc/fstab /boot/grub /opt --把 /etc/fstab /boot/grub 拷贝到 /opt下
# ll /opt
配置源的两种表示方法
格式1:用户名@主机地址::共享模块名
# rsync -avz backuper@192.168.188.136::wwwroot /opt
输入密码:pwd123
# cd /opt
# ll --123.html、456.html 被拷贝过来
格式2: rsync://用户名@主机地址/共享模块名
# rsync -avz rsync://backuper@192.168.188.136/wwwroot /root
输入密码:pwd123
# cd /root
# ll --123.html、456.html 被拷贝过来
rsync同步操作:
下行rsync源:wwwroot共享 /opt/myweb
客户端:
# mkdir /opt/myweb
# rsync -avzH --delete backuper@192.168.188.136::wwwroot /opt/myweb
输入密码:pwd123
# cd /opt/myweb/
# ll
rsync源的免交互处理
客户端:
# vi /etc/server.pass
插入:pwd123
# chmod 600 /etc/server.pass 设置权限
# rsync -az --delete --password-file=/etc/server.pass backuper@192.168.188.136::wwwroot /opt/myweb/
# cd /myweb/
# ll
# crontab -e --每天晚上10点半对服务器网站目录更新一次
30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass backuper@192.168.188.136::wwwroot /opt/myweb/
# systemctl restart crond
# systemctl enable crond
rsync实时同步
由于定期同步 执行备份的时间固定,延迟明显、实时性差;当同步源长期不变化时,密集的定期任务是不必要的。所以使用实时同步更适合。
实时同步的优点:一旦同步源出现变化,立即启动备份;只要同步源无变化,则不执行备份。
辅助软件:inotify-tools
关于inotify:从版本2.6.13开始提供,可以监控文件系统的变动情况,并作出通知响应
rsync+inotify实时同步配置
客户端:
# cat /proc/sys/fs/inotify/max_queued_events --监控队列大小
16384
# cat /proc/sys/fs/inotify/max_user_instances --最多监控实例数
128
# cat /proc/sys/fs/inotify/max_user_watches --每个实例最多监控文件数
8192
调整inotify内核参数:
# vi /etc/sysctl.conf
末行添加:
fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
# sysctl -p 使生效
解释:
max_queue_events:监控队列大小
max_user_instances:最多监控实例数
max_user_watches:每个实例最多监控文件数
安装inotify-tools辅助工具
inotifywait:用于持续监控,实时输出结果
inotifywatch:用于短期监控,任务完成后再出结果
上传inotify-tools-3.14.tar.gz到/opt目录下
# yum install gcc gcc-c++ make -y
# cd /opt
# tar xzvf inotify-tools-3.14.tar.gz
# cd inotify-tools-3.14/
# ./configure
# make && make install
# inotifywait -mrq -e modify,create,move,delete /opt/myweb --监控/opt/myweb
这边要另外开个终端在/opt/myweb 写一个文件进文件监控
# cd /opt/myweb
# vi 789.html 随便写
看后台监控生效
通过inotifywait触发rsync同步操作
使用while、read持续获取监控结果
根据结果可以作进一步判断,决定执行何种操作
# vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e create,delete,move,modify,attrib /opt/myweb/"
RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /opt/myweb/ backuper@192.168.188.136::wwwroot"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ] ; then
$RSYNC_CMD
# echo "${FILE} was rsynced" >>/opt/inotify_rsync.log
fi
done
# chmod +x /opt/inotify.sh
# chmod 777 /opt/myweb/
rsync 同步源服务器配置:
写的权限放开
# vi /etc/rsyncd.conf
改为:
read only = no
# kill $(cat /var/run/rsyncd.pid) --关闭rsyncd服务
# rsync --daemon --启动rsyncd服务
# netstat -anpt |grep rsync
tcp 0 0 192.168.188.136:873 0.0.0.0:* LISTEN 64194/rsync
两边的同步目录权限都设置777
# chmod 777 /var/www/html/
客户端:
# cd /opt/
# ./inotify.sh
需要再开一个终端
# vi /opt/myweb/110.html --里面插入任意数据
在同步源 192.168.188.136:
#ll /var/www/html/ --会发现这个地方会多个110.html文件