一、RSYNC概述
1、什么是rsync
(1)rsync的类型:
sync同步:刷新文件系统缓存,强制将修改过的数据块写入磁盘,并且更新超级快
async异步:将数据先放到缓冲区,在周期性(一般是30s)的去同步到磁盘
rsync远程同步:==remote synchronous==
(2)数据同步过程:
sync数据同步 ==》保存文件(目标)==》强制把缓存中的数据写入磁盘(立即保存),实时性要求比较高的场景
async数据异步==》保存文件(目标)==》将数据先放到缓冲区,在周期性(一般是30s)的去同步到磁盘,适合大批量数据同步的场景
2、rsync的特点
(1)可以镜像保存整个目录树和文件系统
(2)可以保留原有的权限(permission.mode),owner,group,时间(修改时间,modify time),软硬链接,文件acl,文件属性(attributes)信息等
(3)传输==效率高==,使用同步算法,只比较变化的(增量备份)
file1.txt,file2.txt,file3.txt(A服务器)
rsync实现数据同步 ==》 只同步file3.txt ==》 增量备份
file1.txt file2.txt(B服务器)
(4)支持匿名传输,方便网站镜像;也可以做验证,加强安全
3、rsync与scp的区别
两者都可以实现远程同步,但是相对比而言,rsync能力更强
(1)支持增量备份
(2)数据同步时保持文件的原有属性
二、RSYNC的使用
(一)本地同步
1、查看是否有rsync
[root@oneday ~]# rpm -aq | grep rsync
[root@oneday ~]# yum list installed|grep rsync
2、安装rsync
[root@oneday ~]# yum -y install rsync
[root@oneday ~]# find / -name "*rsync"
PUSH:推—相当于上传
PULL :拉—相当于下载
3、在家目录中创建一些文件,将文件同步到opt下
[root@oneday ~]# cd
[root@oneday ~]# mkdir folder
[root@oneday ~]# mkdir folder/{1..3}
[root@oneday ~]# tree folder/
[root@oneday ~]# touch folder/1/file{0..4}
[root@oneday ~]# tree folder
4、将folder目录下的文件传递到opt
[root@oneday ~]# rsync -av folder/ /opt/
[root@oneday ~]# ls /opt/
[root@oneday ~]# rm /opt/* -rf
[root@oneday ~]# ls -l /opt/
总用量 0
[root@oneday ~]# rsync -avR folder/ /opt/
[root@oneday ~]# tree /opt
(二)远程同步
1、rsync [选项] 原数据位置 目录位置
(1)文件的增加会同步
(2)文件的修改也会被rsync同步
(3)同步文件内容的修改,文件的删除,以及文件的属性的修改
2、向另外一台主机 /tmp目录同步数据
给另外一台主机安装rsync
[root@twoday ~]# yum -y install rsync
[root@oneday ~]# rsync -av folder/ root@192.168.1.15:/tmp/
(要实现远程同步,两台主机都得要安装rsync)
免密设置
[root@oneday ~]# ssh-keygen
一直按回车
[root@oneday ~]# ssh-copy-id root@192.168.1.15
3、从远程主机拉取数据
[root@oneday ~]# rsync -av root@192.168.1.15:/tmp/jiajiwenjian /tmp/
[root@oneday ~]# ls /tmp
三、rsync作为系统服务
1、启动rsync
[root@oneday ~]# systemctl status rsyncd #查看rsync的状态(是否启动)
● rsyncd.service - fast remote file copy program daemon
Loaded: loaded (/usr/lib/systemd/system/rsyncd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
[root@oneday ~]# systemctl start rsyncd #启动rsync
[root@oneday ~]# netstat -lntup|grep rsync #查看rsync状态
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 5952/rsync
tcp6 0 0 :::873 :::* LISTEN 5952/rsync
2、找服务配置文件,把rsync作为系统服务运行
[root@oneday ~]# find / -name "rsync*conf"
/etc/rsyncd.conf
[root@oneday ~]# mkdir -p /app/studentweb/src/main/java/co/goho/yuanyu.studentweb/
[root@oneday ~]# tree /app/
/app/
└── studentweb
└── src
└── main
└── java
└── co
└── goho
└── yuanyu.studentweb
[root@oneday ~]# touch /app/studentweb/src/main/java/co/goho/yuanyu.studentweb/File
{0..9}.java
[root@oneday ~]# tree /app/
/app/
└── studentweb
└── src
└── main
└── java
└── co
└── goho
└── yuanyu.studentweb
├── File0.java
├── File1.java
├── File2.java
├── File3.java
├── File4.java
├── File5.java
├── File6.java
├── File7.java
├── File8.java
└── File9.java
[root@oneday studentweb]# vim /etc/rsyncd.conf
[app]
path=/app/studentweb/
log file=/var/log/rsync.log
[root@oneday studentweb]# systemctl restart rsyncd
在oneday主机中提供了一个针对app/下的项目rsync服务,下次访问直接找服务
[root@twoday ~]# rsync -a root@192.168.1.25::
app
[root@twoday ~]# rsync -av root@192.168.1.25::app /tmp/
[root@twoday ~]# ls -l /tmp/
总用量 307200
drwxr-xr-x. 2 root root 84 7月 18 10:38 1
drwxr-xr-x. 3 root root 80 7月 18 10:39 2
drwxr-xr-x. 2 root root 6 7月 18 10:11 3
-rw-r--r--. 1 root root 314572800 7月 18 19:04 jiajiwenjian
drwxr-xr-x. 3 root root 18 7月 18 11:28 src
drwx------. 3 root root 17 7月 18 18:42 systemd-private-6d1e4e5be65247abaab05a8a32bb9ea5-chronyd.service-D8s1hP
drwx------. 3 root root 17 7月 17 19:28 systemd-private-bf4b814dd90745e98a674570ad50f42a-chronyd.service-aQMkOL
drwx------. 2 root root 6 7月 17 19:28 vmware-root
[root@twoday ~]# tree /tmp/src
/tmp/src
└── main
└── java
└── co
└── goho
└── yuanyu.studentweb
├── File0.java
├── File1.java
├── File2.java
├── File3.java
├── File4.java
├── File5.java
├── File6.java
├── File7.java
├── File8.java
└── File9.java
twoday不需要启动rsyncd服务
四、自动化推送拉取文件
1、设置每60s推送一次代码
编辑计划任务
找到rsync的which地址
[root@oneday ~]# which rsync
/usr/bin/rsync
[root@oneday ~]# crontab -e
*/1 * * * * /usr/bin/rsync -av /app/studentweb/ root@192.168.1.15:/tmp/ #设置一分钟自动更新
2、为rsync服务添加密码
(1)编辑vim /etc/rsync.conf
(2)添加两个属性
auth users=user0,user1 #添加账号文件的路径
secrets file=/etc/rsync.secrets #添加密码文件的路径
具体操作:
[root@oneday ~]# vim /etc/rsyncd.conf
[efg]
path=/app/studentweb/
log file=/var/log/rsync.log
auth users=zhangsan,lisi
secrets file=/etc/rsync.secrets
[root@oneday ~]# vim /etc/rsync.secrets #编辑rsync密码
tom:tom
jerry:jerry
必须为/etc/rsync.secrets文件设置权限
[root@oneday ~]# chmod 600 /etc/rsync.secrets #设置权限
[root@oneday ~]# systemctl restart rsyncd
[root@twoday ~]# rsync -av tom@192.168.1.25::efg /tmp/
Password:
receiving incremental file list
./
src/
src/main/
src/main/java/
src/main/java/co/
src/main/java/co/goho/
src/main/java/co/goho/yuanyu.studentweb/
src/main/java/co/goho/yuanyu.studentweb/File0.java
src/main/java/co/goho/yuanyu.studentweb/File1.java
src/main/java/co/goho/yuanyu.studentweb/File2.java
src/main/java/co/goho/yuanyu.studentweb/File3.java
src/main/java/co/goho/yuanyu.studentweb/File4.java
src/main/java/co/goho/yuanyu.studentweb/File5.java
src/main/java/co/goho/yuanyu.studentweb/File6.java
src/main/java/co/goho/yuanyu.studentweb/File7.java
src/main/java/co/goho/yuanyu.studentweb/File8.java
src/main/java/co/goho/yuanyu.studentweb/File9.java
五、实现代码实时同步(重点)
1、直接安装inotify-tools
[root@oneday ~]# yum -y install inotify-tools
(监听指定的目录,一旦目录发出修改,就执行指定的指令)
[root@oneday ~]# inotifywait -mr /app/ #开始监听
(一旦inotifywait监听到目录中的改变,)
2、编写inotify.sh
[root@oneday ~]# vim inotify.sh
[root@oneday ~]# chmod 700 inotify.sh
[root@oneday ~]# ./inotify.sh
另外开个窗口测试
[root@oneday ~]# touch /app/studentweb/打瞌睡了
[root@oneday ~]# touch /app/studentweb/想放屁
[root@oneday ~]# nohup ./inotify.sh & #后台执行