rsync是linux系统下的数据镜像备份工具,使用快速增量备份工具remote sync可以远程同步,可以在不同主机之间进行同步,可以实现全量备份与增量备份,保持链接和权限,且采用优化的同步算法,传输前执行压缩,因此非常适合用于架构集中式的备份或异地备份等应用。同时rsync支持本地复制,或者与其他ssh、rsync主机同步。
1)可以镜像保存整个目录树和文件系统 2)可以很容易做到保持原来文件的权限、时间、软硬链接等等。 3)无须特殊权限即可安装 4)快速:第一次同步时rsync复制全部内容,但在下一次值传输修改过的内容 5)压缩传输:rysnc在传输的过程中可以实行压缩及解压缩操作,可以使用更少的带宽 6)安全:可以使用scp、ssh等方式来进行文件传输 7)支持匿名传输,以方便进行网站镜像 8)选择性保持:符号链接、硬链接、文件属性、权限、时间等
1)采用C/S模式(实际上是一个点到点的传输,直接使用rsync命令即可完成) 2)rsync监听的端口是:873
1)发起端:负责发起rsync同步操作的客户端叫做发起端。通知服务器我要备份你的数据 2)备份源:负责响应来自客户端rsync同步操作的服务器叫做备份源,需要备份的服务器 3)服务端:运行rsyncd服务,一般来说,需要备份的服务器 4)客户端:存放备份数据。
一台主机负责吧数据传送给其他主机,服务器开销很大,比较适合后端服务器少的情况 推:目的主机配置为rsync服务器,源主机周期性的使用rysnc命令把要同步的目录推过去(需要备份的机器是客户端,存储备份的机器是服务端)
所有主机定时去找一台主机拉数据,可能就会导致数据缓慢 拉:源主机配置为rysnc服务器,目的主机周期性的使用rync命令把要同步的目录拉过来(需要备份的机器是服务端,存储备份的机器是客户端)
(1) -a:–archive archive mode 权限保存模式,相当于 -rlptgoD 参数,存档,递归,保持属性等。 (2) -r:–recursive 复制所有下面的资料,递归处理。 (3) -p:–perms 保留档案权限,文件原有属性。 (4) -t:–times 保留时间点,文件原有时间。 (5) -g:–group 保留原有属组。 (6) -o:–owner 保留档案所有者(root only)。 (7) -D:–devices 保留device资讯(root only)。 (8) -l:–links 复制所有的连接,拷贝连接文件。 (9) -z:–compress 压缩模式,当资料在传送到目的端进行档案压缩。 (10) -H:–hard-links 保留硬链接文件。 (11) -A:–acls 保留ACL属性文件,需要配合–perms。 (12) -P:-P参数和 --partial --progress 相同,只是为了把参数简单化,表示传进度。 (13) --version:输出rsync版本。 (14) -v:–verbose 复杂的输出信息。 (15) -u:–update 仅仅进行更新,也就是跳过已经存在的目标位置,并且文件时间要晚于要备份的文件,不覆盖新的文件。 (16) --port=PORT:定义rsyncd(daemon)要运行的port(预设为tcp 873)。 (17) --delete:删除那些目标位置有的文件而备份源没有的文件。 (18) --password-file=FILE :从 指定密码文件中获取密码。 (19) --bwlimit=KBPS:限制 I/O 带宽。 (20) --filter “-filename”:需要过滤的文件。 (21) --exclude=filname:需要过滤的文件。 (22) --progress:显示备份过程。 注释:通常常用的选项 –avz -z的命令一般用在小文件进行压缩,数据量比较大的文件在传输的过程中就比较慢,如果再压缩传输会更加慢。所以根据需求来选择是否需要加这个参数
rsync 是系统自带的,无需额外安装,如果是最小化安装的话,用 yum安装一下即可。
[root@master yum.repos.d]# vi /etc/rsyncd.conf
uid = nobody
gid = nobody
use chroot = yes '//禁锢在源目录'
address = 192.168.233.131 '//监听地址'
port 873 '//监听端口号'
log file = /var/log/rsyncd.log '//日志文件位置'
pid file = /var/run/rsyncd.pid '//存放进程ID的文件位置'
hosts allow = 192.168.233.133 '//允许访问的客户机地址'
[wwwroot] '//共享模块名称'
path = /var/www/html '//源目录的实际路径'
comment = Document Root of www.51xit.top
read only =yes '//是否只读'
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar *.z '//同步时不在压缩的文件类型'
auth users = lisi '//授权账户'
secrets file = /etc/rsyncd_users.db '//存放账户信息的数据文件'
配置文件制定的路径创建
[root@master yum.repos.d]# rsync --daemon '//启动rsync服务,如果要停止这个服务请使用kill $(cat /var/run/rsyncd.pid)'
[root@master yum.repos.d]# netstat -ntap |grep rsync
tcp 0 0 192.168.233.131:873 0.0.0.0:* LISTEN 4371/rsync
如果要停止服务 要将pid文件删除 在/var/run/rsyncd.pid
[root@master yum.repos.d]# rsync --daemon '//启动rsync服务,如果要停止这个服务请使用kill $(cat /var/run/rsyncd.pid)'
[root@master yum.repos.d]# netstat -ntap |grep rsync
tcp 0 0 192.168.233.131:873 0.0.0.0:* LISTEN 4371/rsync
[root@master yum.repos.d]# cd /var/www/html/
[root@master html]# ls
[root@master html]# touch 111.html
[root@master html]# touch 222.html
[root@master html]# ls
111.html 222.html
'//创建完成后,我们稍后到客户机上操作,进行验证'
查看rsync的软件是否安装
[root@localhost ~]# rpm -q rsync
rsync-3.1.2-10.el7.x86_64
[root@slave opt]# mkdir myweb
'//方法一'
[root@slave opt]# rsync -avzH --delete lisi@192.168.233.131::wwwroot /opt/myweb
Password:
receiving incremental file list
./
111.html
222.html
sent 98 bytes received 207 bytes 87.14 bytes/sec
total size is 0 speedup is 0.00
[root@slave opt]# ls /opt/myweb/
111.html 222.html
'//方法二'
[root@slave opt]# rsync -avz rsync://lisi@192.168.233.131/wwwroot /root
Password:
receiving incremental file list
./
111.html
222.html
sent 98 bytes received 207 bytes 87.14 bytes/sec
total size is 0 speedup is 0.00
为了写脚本能方便一些,使用免密登录
[root@slave opt]# vi /etc/server.pass '//创建密码文件'
lisi123
[root@slave opt]# chmod 600 /etc/server.pass '//给密码文件权限'
[root@slave opt]# rm -rf myweb/* '//先删除/opt/myweb目录下的内容用来测试
[root@slave opt]# ls myweb/
[root@slave opt]# rsync -az --delete --password-file=/etc/server.pass lisi@192.168.233.131::wwwroot /opt/myweb '//指定刚刚创建的密码文件,发现已经不需要输入密码了'
[root@slave opt]# ls myweb/
111.html 222.html
可以创建周期性任务进行同步源服务器
[root@slave opt]# crontab -e
30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass lisi@192.168.233.131::wwwroot /opt/myweb/ '//每天晚上10点半对服务器网站目录更新一次'
[root@slave opt]# systemctl restart crond
[root@slave opt]# systemctl enable crond
实现思路如下
[root@master html]# vi /etc/rsyncd.conf
read only = no '//改为no'
[root@master html]# kill `cat /var/run/rsyncd.pid` '//关闭rsync服务'
[root@master html]# netstat -ntap |grep rsync
[root@master html]# rsync --daemon '//开启rsync服务'
[root@master html]# netstat -ntap |grep rsync
tcp 0 0 192.168.233.131:873 0.0.0.0:* LISTEN 88302/rsync
[root@master html]# chmod 777 /var/www/html
[root@slave opt]# cat /proc/sys/fs/inotify/max_queued_events '//监控队列大小'
16384
[root@slave opt]# cat /proc/sys/fs/inotify/max_user_instances '//最多监控实例数'
128
[root@slave opt]# cat /proc/sys/fs/inotify/max_user_watches '//每个实例最多监控文件数'
8192
[root@slave opt]# vi /etc/sysctl.conf
[root@slave opt]# sysctl -p
fs.inotify.max_queued_events = 32768
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
[root@slave opt]# tar zxf inotify-tools-3.14.tar.gz
[root@slave opt]# cd inotify-tools-3.14/
[root@slave inotify-tools-3.14]# yum install gcc gcc-c++ -y
[root@slave inotify-tools-3.14]# ./configure
[root@slave inotify-tools-3.14]# make && make install
重新打开一个终端
[root@slave ~]# inotifywait -mrq -e modify,create,move,delete /opt/myweb '//运行持续监控监控'
inotifywait:用于持续监控,实时输出结果
inotifywatch:用于短期监控,任务完成后再出结果
inotifywait 监控软件 -m, 持续进行监控 -r, 递归监控所有子对象 -q , 简化输出信息, -e ,指定要监控哪些事件类型
modify 修改 create 创建 move 移动 delete 删除
[root@slave inotify-tools-3.14]# vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,move,delete /var/www/html/"
RSYNC_CMD="rsync -avzH --delete --password-file=/etc/server.pass /var/www/html/ lisi@192.168.233.133::wwwroot/"
#读取输出的监控记
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
#如果rsync未在执行,则立即启动
if [ $(pgrep rsync | wc -l) -le 0 ]; then
$RSYNC_CMD
fi
done
[root@slave inotify-tools-3.14]# chmod 777 /opt/myweb/
[root@slave inotify-tools-3.14]# chmod +x /opt/inotify.sh
[root@slave inotify-tools-3.14]# cd ..
[root@slave opt]# ./inotify.sh '//执行脚本进行监控'
[root@slave myweb]# touch 111.html '//客户机创建文件,删除文件也可以同步成功'
[root@master html]# ll '//服务端查看'
总用量 0
-rw-r--r--. 1 root root 0 3月 24 09:22 111.html '//同步成功'