一、RSYNC
1、RSYNC介绍
rsync 是一个强大的文件同步工具,常用于在不同的系统之间高效地复制和同步文件及目录。
它具有以下一些显著的特点和优势:
1、增量备份:rsync 只会传输源目录和目标目录之间有差异的部分,这大大减少了数据传输量,提高了同步效率。
例如,如果您有一个大型的文件库,并且只对其中的几个文件进行了修改,rsync 只会传输这些修改过的文件,而不是整个文件库。
2、数据完整性:它能够确保数据在传输过程中的完整性,通过校验和来验证文件是否正确传输。
3、多种传输方式:支持通过本地连接(如本地磁盘)、SSH 等方式进行文件同步。
4、保留权限和属性:可以保留文件和目录的权限、所有者、组、时间戳等属性。
5、排除特定文件或目录:通过配置,可以指定排除某些不需要同步的文件或目录。
在实际应用中,rsync 常用于服务器之间的数据备份、文件同步、版本控制等场景。以下是一个基本的 rsync 命令示例:
rsync -avz source_directory destination_directory
其中:
-a 表示归档模式,保留权限、属性等。
-v 表示详细模式,显示更多信息。
-z 表示在传输过程中进行压缩,以减少网络带宽使用。
2、RSYNC的使用
1、特点
1.可以镜像保存整个⽬录树和⽂件系统
2.可以保留原有的权限,时间,软硬链接,⽂件,⽂件属性信息等
3.传输==效率⾼==,使⽤同步算法,只⽐较变化的(增量备份)
4.⽀持匿名传输,⽅便⽹站镜像;也可以做验证,加强安全
2、使用
基本语法
上传:rsync 选项 上传文件 上传地址
下载:rsync 选项 下载地址 下载文件
选项:
-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属性
—delete 同步删除目录中多余的文件
3、rsync与scp的区别
两者都可以实现远程同步,但是相对⽐⽽⾔,rsync能⼒更强
1、⽀持增量备份
2、数据同步时保持⽂件的原有属性
4、rsync作为系统服务
rsyncd服务的配置⽂件/etc/rsyncd.conf
# uid = nobody 用户编号
# gid = nobody 所属组编号
# use chroot = yes 是否禁锢目录
# max connections = 4 最大连接数
# pid file = /var/run/rsyncd.pid 进程文件,每个服务都有有个PID编号,其中源就是PID文件
# exclude = lost+found/ 传输文件时,忽略lost+found/目录
# transfer logging = yes 传输日志是否需要写入日志文件
# timeout = 900 传输超时时间,默认15分钟
# ignore nonreadable = yes 是否忽略不可读文件
# dont compress = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 以下文件格式不压缩
5、编写计划任务 + Shell的脚本⽂件,⾃动实现代码备份
1、编写计划任务
# crontab -e
3 1 * * * /root/rsync_java.sh
2、编写rsync_java.sh脚本程序
# vim rsync_java.sh
#!/bin/bash
rsync -av root@10.1.1.10::app /backup/app1_java &>/dev/null
# chmod +x rsync_java.sh
6、给RSYNC服务添加密码
1、打开/etc/rsyncd.conf配置⽂件
# vim /etc/rsyncd.conf
[app]
path=/app/java_project
log file=/var/log/rsync.log
auth users = user1,user2 => ⽤户名
secrets file = /etc/rsyncd.secrets => 密码⽂件
2、在/etc⽬录下创建rsyncd.secrets⽂件
# vim /etc/rsyncd.secrets
user1:123 => 设置密码,⽤户名:密码
user2:123
3、更改密码⽂件权限为600
# chmod 600 /etc/rsyncd.secrets
4、重启rsyncd服务
# systemctl restart rsyncd
二、RSYNC集合INOTIFY⼯具实现代码实时同步
1、inotify介绍
inotify 是一个 Linux 内核提供的用于监控文件系统事件的机制。
它允许应用程序监控文件或目录的各种操作,例如创建、修改、删除、移动等。
以下是 inotify 的一些关键特点和用途:
特点:
实时性:能够实时地通知应用程序文件系统的变化。
细粒度监控:可以精确到单个文件或目录的操作级别。
用途:
文件同步工具:比如在多个服务器之间保持文件同步,当源端文件发生变化时,及时同步到目标端。
日志监控:监控日志文件的更新,以便及时处理新的日志内容。
例如,在一个自动化部署系统中,使用 inotify 来监测代码目录的变化,一旦有新的代码提交,自动触发部署流程。又或者在一个文件备份系统中,通过 inotify 来察觉文件的修改,然后及时进行备份操作。
2、直接安装inotify-tools
yum -y install inotify-tools
/usr/bin/inotifywait 等待
/usr/bin/inotifywatch 看守
/usr/bin/inotifywait-m : ⼀直监控某个⽬录,create、delete、modify等⾏为
-r : 递归,不仅仅监控⽬录还要监控⽬录下的⽂件
-q : 获取操作信息,但是不输出
-e : 哪些⾏为需要被监控,
modify,delete,create,attrib,move
modify: ⽂件被修改
delete: ⽂件被删除
create: ⽂件被创建
attrib: ⽂件属性被修改
move: ⽂件被移动
3、编写inotify.sh脚本
vim inotify.sh
#!/bin/bash
/usr/bin/inotifywait -mrq -e modify,delete,create,attrib,move /app/studentweb|while read events
do
rsync -av --delete /app/studentweb/ root@192.168.2.155:/opt/
done
4、添加可执⾏权限
# chmod +x inotify.sh
5、让inotify.sh⽂件⼀直执⾏下去
# nohup ./inotify.sh &