目录
1、linux系统下数据同步服务RSYNC
sync同步::刷新⽂件系统缓存,强制将修改过的数据块写⼊磁盘,并且更新超级块。
async异步:将数据先放到缓冲区,再周期性(⼀般是30s)的去同步到磁盘。
rsync远程同步:==remote synchronous==
2、数据同步过程
sync数据同步 => 保存⽂件(⽬标)=> 强制把缓存中的数据写⼊磁盘(⽴即保存),实时性要求⽐较⾼的场景
asyn数据异步 => 保存⽂件(⽬标)=> 将数据先放到缓冲区,再周期性(⼀般是30s)的去同步到磁盘,适合⼤批量数据同步的场景
3、rsync与scp的区别
两者都可以实现远程同步,但是相对⽐⽽⾔,rsync能⼒更强
① ⽀持增量备份
② 数据同步时保持⽂件的原有属性
4、RSYNC的使⽤
基本语法
Pull: rsync [OPTION...] [USER@]HOST:SRC... [DEST]
Push: rsync [OPTION...] SRC... [USER@]HOST:DEST
OPTION选项说明
-v 详细模式输出
-a 归档模式,递归的⽅式传输⽂件,并保持⽂件的属性,equals -rlptgoD
-r 递归拷⻉⽬录
-l 保留软链接
-p 保留原有权限
-t 保留原有时间(修改)
-g 保留属组权限
-o 保留属主权限
-D 等于--devices --specials 表示⽀持b,c,s,p类型的⽂件
-R 保留相对路径
-H 保留硬链接
-A 保留ACL策略
-e 指定要执⾏的远程shell命令,ssh更改端⼝常⽤选项
-E 保留可执⾏权限
-X 保留扩展属性信息 a属
5、通过练习掌握rsync
[root@y ~]# mkdir folder
[root@y ~]# mkdir folder/f{1..3}
[root@y ~]# tree folder/
folder/
├── f1
├── f2
└── f3
[root@y ~]# mkdir folder/f1/file{0..4}
[root@y ~]# tree folder/
folder/
├── f1
│ ├── file0
│ ├── file1
│ ├── file2
│ ├── file3
│ └── file4
├── f2
└── f3
[root@y ~]# rsync -av ./folder/ /opt 将folder目录下的文件传到opt目录下
如果folder后面不加/则会把folder目录一起传过去,效果与-avR效果相同
[root@y ~]# tree /opt
/opt
├── f1
│ ├── file0
│ ├── file1
│ ├── file2
│ ├── file3
│ └── file4
├── f2
└── f3
[root@y ~]# rsync -av folder/f1/ folder/f2/
[root@y ~]# tree folder/f2/
folder/f2/
├── file0
├── file1
├── file2
├── file3
└── file4
[root@y ~]# mkdir folder/f1/file5
[root@y ~]# rsync -av folder/f1/ folder/f2/
folder/f2/
├── file0
├── file1
├── file2
├── file3
├── file4
└── file5
这里可以看到f1\f2同步了
[root@y ~]# rm -rf folder/f1/file0
[root@y ~]# rsync -av folder/f1/ folder/f2/
这里发现f1\f2并没有同步删除,将file0创建回来
[root@y ~]# touch folder/f1/file0
[root@y ~]# rsync -av --delete folder/f1/file0
[root@y ~]# rsync -av folder/f1/ folder/f2/
这里在同步一次就会发现已同步在文件里写入东西
[root@y ~]# vim folder/f1/file0
[root@y ~]# cat folder/f1/file0
我是渣渣辉
[root@y ~]# rsync -av folder/f1/ folder/f2/
[root@y ~]# cat folder/f2/file0
我是渣渣辉
这里可以看到内容也可以被同步修改文件的修改时间
[root@y ~]# touch folder/f1/file0 -m -d "2017-09-02 00:00:00"
[root@y ~]# ls -l folder/f1/
总用量 4
-rw-r--r--. 1 root root 16 9月 2 2017 file0
[root@y ~]# rsync -av folder/f1/ folder/f2/
[root@y ~]# ls -l folder/f2
总用量 4
-rw-r--r--. 1 root root 16 9月 2 2017 file0
这里可以看到属性也被同步了
打开另一台主机并下载rsync不然传送不了
[root@y ~]# rsync -av folder/ [email protected]:/opt/
这样就把文件传过去了
[root@localhost ~]# dd if=/dev/zero of=/tmp/laj bs=300M count=1
[root@y ~]# rsync -av [email protected]:/tmp/laj /tmp
ks-script-5GmJIr vmware-root
laj yum.log
systemd-private-9583028f07d74206ac525265fec45503-chronyd.service-4lY9q9
这样就可以看到4.10主机里的laj被同步过来了[root@y ~]# systemctl start rsyncd
[root@y ~]# netstat -lntup |grep rsync
6、RSYNC服务扩展
[root@y ~]# find / -name "rsync*conf" 这里我们需要找到rsync文件的配置路径
/etc/rsyncd.conf
[root@y ~]# mkdir -p /app/studentweb/src/main/java/co/goho/yuanyu.studentweb
[root@y ~]# touch /app/studentweb/src/main/java/co/goho/yuanyu.studentweb/File{0..9}.java
[root@y~]# vim /etc/rsyncd.conf
[app]
path=/app/studentweb/
log file=/war/log/rsync.log
[root@y studentweb]# systemctl restart rsyncd
现在在y主机中提供了一个针对app/下项目的rsyns服务,下次可以直接访问换成4.10的主机,但不启动rsyncd服务
[root@localhost ~]# rsync -av [email protected]::
app
[root@localhost ~]# rsync -av [email protected]::app /tmp
这里可以看到备用机没启动rsync服务也可以下载
6.1设置1分钟推送一次文件
这里我们采取的方案就是利用计划任务去完成文件的推送
[root@y studentweb]# crontab -e
*/1 * * * * /usr/bin/rsync -av /app/studentweb [email protected]:/tmp/
6.2为rsync服务添加密码
[root@y studentweb]# vim /etc/rsyncd.conf 在/etc/rsyncd.conf上添加账号密码路径
[app]
path=/app/studentweb/
log file=/war/log/rsync.log
auth users=user0,user1
secrets file=/etc/rsync.secrets
[root@y studentweb]# vim /etc/rsync.secrets 在/etc/rsync.secrets中添加账号和密码
账户:密码 这里的账户不可以和本机里的账户相同(很重要)
xxx:xxx
修改权限
[root@y studentweb]# chmod 600 /etc/rsync.secrets 重启rsyncd服务
[root@y studentweb]# systemctl restart rsyncd
换成4.10的主机用xxx账户访问并同步
[root@localhost ~]# rsync -av [email protected]::app /tmp/
7、RSYNC集合INOTIFY⼯具实现代码实时同步
标签:f1,RSYNC,INOTIFY,app,rsync,实时,studentweb,folder,root From: https://blog.csdn.net/m0_73671133/article/details/140528023
[root@y studentweb]# yum -y install inotify-tools
[root@y ~]# inotifywait -mr /app/ 监听app目录
在开一个窗口在app目录下写东西会发现监听的那有东西,说明监听成功这里我们编写一个实时同步的脚步,减少不必要的麻烦
[root@y ~]# vim inotifytext.sh
#!/bin/bash
/usr/bin/inotifywait -mrq -e modify,delete,create,attrib,move /app/studentweb|while re
ad events
do
rsync -av /app/studentweb/ [email protected]:/tmp/
done
[root@y ~]# chmod 700 inotifytext.sh
新建窗口在/app/studentweb/创建文件 去4.10主机查看/tmp目录有东西说明同步成功
[root@y ~]# nohup ./inotifytext.sh &
[root@y ~]# jobs
[root@y ~]# kill % +序号结束监控