可以镜像保存整个目录树和文件系统
可以很容易的保持原来文件的权限、时间、软硬链接等,无须特殊权限即可安装
效率高,第一次同步时rsync会复制全部内容,但是下一次只会传输修改过的文件,rsync在传输数据的过程中可以实行压缩以及解压操作,使用到的带宽更少
安全性高,rsync支持匿名传输,以方便进行网站镜像,传输数据时可以使用ssh加密传输
注意:在centos系统中rsync是系统自带的,无需额外安装,但是如果使用最小化安装,可以使用 yum install -y rsync 安装一下。
启动rsync服务:rsync --daemon
关闭rsync服务:kill $(cat /var/run/rsyncd.pid)
同步本地文件系统数据:rsync [选项] 原始位置 目标位置
例如:
rsync /etc/fstab /opt '同步本机的fstab文件到opt目录'
rsync -rl /boot/grub /opt '同步本机的grub目录到opt目录'
'如果想要在/opt目录下也创建一个boot目录,那么命令需要为:rsync -R rl /boot/grub /opt '
常用选项:
-a:归档模式,递归并保留对象属性,等同于 -rlptgoD
-r 对子目录以递归模式处理,主要是针对目录来说的,如果单独传一个文件不需要加-r,但是传输的是目录必须加-r选项
-l 保留软链接
-p 保持文件权限
-v:显示同步过程的详细(verbose)信息
-z:在传输文件时进行压缩(compress)
-H:保留硬连接文件
-A:保留ACL属性信息
--delete:删除目标位置有而原始位置没有的文件
--checksum:根据对象的校验和来决定是否跳过文件
--progress 在同步的过程中可以看到同步的过程状态,比如统计要同步的文件数量、同步的文件传输速度等等
路径的格式可以是本地路径,也可以是使用user@host:path或user@host::path的远程路径,如果主机和path路径之间使用单个冒号隔开,表示使用的是远程shell通信方式,而使用双冒号隔开的则表示的是连接rsync daemon
下行同步的两种方式(使用客户端将rsync服务器下的wwwroot共享模块下的内容同步到本地的/opt目录下(共享模块下的真实共享路径需要对other用户具有 ‘r’ 权限))
用户名@主机地址::共享模块名
例如:[root@rsyncClient ~]# rsync -avz [email protected]::wwwroot /opt
rsync://用户名@主机地址/共享模块名
例如:[root@slave opt]# rsync -avz rsync://[email protected]/wwwroot /root
rsync通过ssh的方式同步
rsync -avz /opt/abc.txt [email protected]:/opt
rsync -avz [email protected]:/opt/qwe.txt /opt
[root@localhost ~]# systemctl stop firewalld '关闭防火墙'
[root@localhost ~]# systemctl disable firewalld '关闭防火墙开机自启'
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@localhost ~]# setenforce 0 '关闭核心防护'
[root@localhost ~]# vi /etc/sysconfig/selinux '禁止核心防护开启自启'
SELINUX=disabled
vim /etc/rsyncd.conf
'开启以下功能,将#注释,以及添加'
uid = nobody
gid = nobody
use chroot = yes '禁锢在家目录,用chroot,在传输文件之前,服务器守护程序在将chroot 到文件系统中的目录中,这样做的好处是可能保护系统被安装漏洞侵袭的可能'
address = 20.0.0.51 '监听地址'
port 873 '监听端口号'
log file = /var/log/rsyncd.log '日志文件位置'
pid file = /var/run/rsyncd.pid '存放进程ID的文件位置'
hosts allow = 20.0.0.0/24 '设置白名单,允许哪些地址可以访问'
'添加共享模块'
[wwwroot] '共享模块名称'
path = /var/www/html '源目录的实际路径'
comment = www.kevin.com '描述'
read only = yes '是否只读'
dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 '同步时不在压缩的文件类型'
auth users = backuper '授权账户'
secrets file = /etc/rsyncd_user.db '存放账户信息的数据文件'
vim /etc/rsyncd_users.db '创建存放账户信息的数据文件'
backuper:abc123 '采用“用户名:密码”的记录格式,每行一个用户记录独立的账号数据,不依赖于系统账号'
cd /etc
chmod 600 /etc/rsyncd_users.db '给数据文件设置权限是为了安全,不让其他用户进行操作'
rsync --daemon '启动服务'
netstat -ntap | grep rsync
[root@localhost etc]# yum install httpd -y
[root@localhost etc]# cd /var/www/html/
[root@localhost html]# touch 111.html
[root@localhost html]# touch 222.html
'方法一'
[root@slave opt]# rsync -avzH --delete lisi@192.168.233.131::wwwroot /opt
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]# 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@localhost opt]# vim /etc/server.pass '创建密码文件'
abc123 '写对方密码'
[root@localhost opt]# chmod 600 /etc/server.pass
[root@localhost opt]# rsync -zva --delete --password-file=/etc/server.pass backuper@20.0.0.51::wwwroot /opt '指定刚刚创建的密码文件,发现已经不需要输入密码了'
[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 20.0.0.51:873 0.0.0.0:* LISTEN 88302/rsync
[root@master html]# chmod 777 /var/www/html
[root@localhost opt]# yum install httpd -y
[root@localhost opt]# cd /var/www/html/
[root@localhost html]# vim /etc/sysctl.conf
'文件末尾添加'
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
[root@localhost html]# sysctl -p '立即生效'
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
[root@localhost html]# cd /opt/
[root@localhost opt]# rz -E
rz waiting to receive.
[root@localhost opt]# tar zxvf inotify-tools-3.14.tar.gz '安装inotify-tools辅助工具'
[root@localhost opt]# cd inotify-tools-3.14/
[root@localhost inotify-tools-3.14]# yum install gcc gcc-c++ -y
[root@localhost inotify-tools-3.14]# ./configure
[root@localhost inotify-tools-3.14]# make && make install
[root@localhost inotify-tools-3.14]# inotifywait -mrq -e modify,create,move,delete /var/www/html
'测试'
[root@localhost ~]# cd /var/www/html/
[root@localhost html]# touch index.html
[root@localhost html]# echo "this is test" > test.html
'看执行的那台终端'
/var/www/html/ CREATE index.html
/var/www/html/ CREATE test.html
/var/www/html/ MODIFY test.html
'配置启动脚本,并将上一个测试关闭'
[root@localhost opt]# vim /opt/inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html
"RSYNC_CMD="rsync -avz --delete --password-file=/etc/server.pass /var/www/html/ backuper@20.0.0.51::wwwroot/"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ]; then
$RSYNC_CMD
fi
done
[root@localhost opt]# chmod +x inotify.sh
[root@localhost opt]# chmod 777 /var/www/html/
[root@localhost opt]# ./inotify.sh '开启监控'
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1052) [sender=3.0.9]
'发现会有这个报错,但是文件是正常传过去的,这里的这个报错我没有解决掉,如果有朋友解决了可以私信我或者评论告诉我,多谢!'