rsync应用场景
(1)文件和目录备份: rsync可以对文件和目录进行快速、高效的备份。它使用差异算法进行文件同步,只传输差异部分,避免了重复传输的问题,从而实现快速备份。
(2)文件镜像和复制: 在分布式环境中,多个节点需要保持一致性。rsync可以实现节点间的文件同步和复制,使得分布式文件系统保持一致性并及时反映文件更改。
(3)远程文件同步: rsync可以将本地和远程文件的变更快速地同步,通过网络进行文件传输,并自动检测并传输差异部分,从而减少网络带宽和传输时间。
(4)自动化脚本运行: rsync可以结合脚本进行自动化的文件同步和备份。在定期运行脚本中,rsync会对目标文件夹进行快速同步,达到自动化备份文件的目的。
(5)带宽限制文件同步: rsync支持带宽限制同步,用户可以对上传和下载带宽进行限制控制。在网络条件不好或者流量支付较高的场景中,控制带宽可以有效减少数据传输时间,节约资源。
总:rsync拥有强大的文件同步和备份功能,广泛应用于各种场景下,可以为用户提供高效的数据备份、远程文件访问等服务。
两种认证协议
rsync 进行远程同步时需要认证远程主机的账号密码,支持两种认证方式:ssh 协议认证与 rsync 协议认证。
(1)ssh 认证
rsync 默认使用 ssh 协议进行远程登录和数据传输。远程主机需要开启 sshd 服务,rsync 在传输数据之前会先与远程主机进行一次 ssh 登录认证,然后通过 ssh 隧道进行数据传输。只需数据同步双方安装 rsync,但不必启动 rsyncd 服务。
可用 -e 选项指定协议:
rsync -r -e ssh /var/rsync-src/ [email protected]:/var/rsync-dest/
也可省略 -e:
rsync -r /var/rsync-src/ [email protected]:/var/rsync-dest/
使用 ssh 认证与传输的缺点是不安全:
<1>登录认证使用的账号是远程主机可登录的系统账号,且需要手动输入密码;
<2>同步数据不受目录限制。
(2)rsync 协议认证
与 ssh 认证不同,rsync 协议认证不需要依赖远程主机的 sshd 服务,但需要远程主机开启 rsyncd 服务,本地 rsyncd 服务可不必开启。另外,rsync 协议认证不是直接使用远程主机的真实系统账号,而是虚拟账号和虚拟密码,且可实现无需手动输入密码,同时 rsync 协议认证需要配置模块对远程同步的目录进行限制。对比 ssh 认证,rsync 协议认证安全性更高。
两种认证方式的本质区别:
ssh 协议认证连接的两端是通过管道完成通信和数据传输的,当连接到远程主机时,将在远程主机 fork 出 rsync 进程使其成为 rsync server;而 rsync 协议认证是事先在远程主机上运行 rsync 守护进程,监听套接字等待客户端的连接,建立连接后所有通信方式都是通过套接字完成的。
rsync+inotify的应用场景
inotify——监控
(1)文件备份和镜像: 可以使用rsync和inotify结合来定期或实时备份重要文件和目录,以确保数据的安全性和可恢复性。当被监视的文件或目录发生变化时,inotify将触发rsync命令,将变更部分快速同步到备份位置。
(2)分布式文件系统同步: 在分布式系统中,多个节点之间的文件需要保持一致性。通过结合rsync和inotify,可以实现节点间的实时文件同步,使得分布式文件系统保持一致性并及时反映文件更改。
(3)实时网站同步: 在多台服务器部署的网站环境中,当网站的静态资源或动态内容发生变化时,需要即时地将这些更改同步到其他服务器上,以提供一致的用户体验和高可用性。使用rsync和inotify结合可以实现实时的网站内容同步。
(4)实时日志备份和分析: 对于有大量产生日志的系统,如服务器集群、应用程序等,可以使用rsync和inotify结合将产生的日志文件实时备份到集中的存储位置,并进行实时的分析和处理。
注:rsync和inotify的结合使用需要考虑到资源消耗和性能问题。
在高频率的文件变更场景中,频繁的同步操作可能会导致高CPU使用率和带宽消耗。因此,在设计和配置时需要权衡实时性与性能之间的关系,并进行合理的调整。
rsync+cron的应用场景
cron是一种常用的Linux定时任务工具,可以定期执行一些任务,例如文件备份、日志清理、数据统计等操作。我们可以使用cron的定时功能,运行一个脚本,该脚本会调用rsync命令,来实现文件的定时/周期性同步。
在使用rsync和cron结合实现文件同步时,需要注意以下几点:
确定同步的时间间隔和方式
我们需要确定文件同步的时间间隔和同步方式。时间间隔的长短和同步方式的选择,将会直接影响到文件同步的实时性和资源利用率。
保证同步的准确性和安全性
我们需要确保文件在同步的过程中不会丢失或被篡改,同时也需要保证同步的准确性和安全性,避免恶意攻击和数据泄露等问题。
设置日志和监控
为了方便问题的追踪和排查,我们需要在文件同步过程中设置相应的日志记录和监控机制,及时发现和解决问题。
总:结合rsync和cron实现文件同步需要综合考虑多个因素,根据具体的需求选择合适的方式和策略
配置rsync备份源(同步方式)
1.rsync同步源
指备份操作的远程服务器,也称为备份源
运营模式:客户端模式、服务端模式
即是cs模式:点到点的传输方式
监听端口:873
2.同步方式
(1) 宽整备份:每次备份都是从备份源将所有的文件或目录备份到目的地
(2) 差量备份:备份上次完全备份以后有变化的数据(他针对的上次的完全备份,他备份过程中不清除存档属性)。
(3) 增量备份:备份上次备份以后有变化的数据(他才不管是那类型的备份,有变化的数据就备份,他会清除存档属性 )
3.备份的方式
(1)发起端:负责rsync 同步操作的客户机叫做发起端,通知服务器我要备份你的数据
(2)备份源:负责响应来自客户机rsync,同步操作的服务器叫做备份源,需要备份的服务器
(3)服务端:运行rsyncd服务,一股来说,需要备份的服务器
(4)客户端:存放备份数据
常用rsync命令
1.基本格式
rsync [选项] 原始位置 目标位置
2.常用选项
选项 注释
-r 递归模式,包含目录及子目录中的所有文件
-l 对于符号链接文件仍然复制为符号链接文件
-v 显示同步过程的详细信息
-z 在传输文件时进行压缩
-a 归档模式,保留文件的权限、属性等信息
-p 保留文件的权限标记
-t 保留文件的时间标记
-g 保留文件的属组标记(仅超级用户使用)
-o 保留文件的属主标记(仅超级用户使用)
-H 保留硬连接文件
-A 保留 ACL属性信息
-D 保留设备文件及其他特殊文件
–delete 删除目标位置有而原始位置没有的文件
–checksum 根据校验和(而不是文件大小、修改时间) 来决定是否跳过文件
配置源的两种表达
(1)格式一
用户名(rsync用户)@主机地址::共享模块名
rsync -avz [email protected](服务端地址)::wwwroot /opt/
(2)格式二
rsync://用户名@主机地址/共享模块名rsync -avz rsync://[email protected](服务端地址)/wwwroot /opt/
实时同步rsync(下行同步)
服务器:192.168.10.130
客户端:192.168.10.133
配置服务器
#关闭防火墙和增强功能
[root@Server ~]#setenforce 0
setenforce: SELinux is disabled
[root@Server ~]#systemctl stop firewalld
[root@Server ~]#rpm -q rsync #一般系统已默认安装rsync
[root@Server ~]#vim /etc/rsyncd.conf #建立/etc/rsyncd.conf配置文件, #添加以下配置项
uid = root
gid = root
use chroot = yes #禁锢在源目录
address = 192.168.10.130 #监听地址
port = 873 #监听端口tcp/udp 873,可通过cat /etc/services | grep rsync查看
log file = /var/1og/rsyncd.1og #日志文件位置
pid file = /var/run/rsyncd.pid #存放进程ID的文件位置
hosts allow = 192.168.10.0/24 #允许访问的客户机地址。多个地址以空格分隔
dont compress = *.gz *.bz2 *.tgz *.zip *.rar *.z #同步时不再压缩的文件类型
[backup] #共享模块名称
path = /var/www/html #源目录的实际路径
comment = this is rsync of www.zzt.com #备注
read only = yes #是否为只读。yes表示客户端只能读取目录内容,不能写入。只允许下行,不允许上行。
auth users = zz #授权账户,多个账号以空格分隔。授权用户,允许读取的用户名。
secrets file = /etc/rsyncd_users.db #存放账户信息的数据文件
#保存退出即可
#存放授权账户信息的数据文件
#如采用匿名的方式,只要将其中的“auth users"和“secrets file"配置项去掉即可。
解析rsyncd.conf
pid file = /var/run/rsyncd.pid #进程 pid 文件所在位置
port = 873 #指定监听端口,默认是873,可以自己指定
address = 192.168.1.171 #服务器监听的IP地址,可省略
uid = root #守护进程所属的uid,默认是nobody,可能会碰到文件或目录权限问题,此处偷懒用的 root
gid = root #守护进程的gid
#chroot,即改变程序执行时所参考的根目录位置,在传输文件之前,服务器守护程序在将chroot 到文件系统中的目录中
#这样做的好处是可能保护系统被安装漏洞侵袭的可能。缺点是需要超级用户权限。另外对符号链接文件,将会排除在外
#也就是说,你在 rsync服务器上,如果有符号链接,你在备份服务器上运行客户端的同步数据时,只会把符号链接名同步下来,并不会同步符号链接的内容
use chroot = yes
read only = no #只读选择,只让客户端从服务器上读取文件
write only = yes #只写选择,只让客户端到服务器上写入
#允许访问的IP,可以指定单个IP,也可以指定整个网段,能提高安全性。
#格式是 ip 与 ip 之间、ip 和网段之间、网段和网段之间要用空格隔开;
hosts allow = 192.168.1.0/255.255.255.0 10.0.1.0/255.255.255.0
max connections = 5 #客户端最多连接数
#当用户登录时会看到这个信息。比如显示当前时间、公告等
motd file = /etc/rsyncd/rsyncd.motd
log file = /var/log/rsync.log #rsync 服务器的日志;
transfer logging = yes #记录传输文件的日志
log format = %t %a %m %f %b #日志格式
syslog facility = local3 #日志级别
#通过该选项可以覆盖客户指定的IP超时时间。可以确保rsync服务器不会永远等待一个崩溃的客户端。
#超时单位为秒钟,0表示没有超时定义,这也是默认值。
#对于匿名rsync服务器来说,一个理想的数字是600。
timeout = 300
#模块定义
#主要是定义服务器哪个目录要被同步。
#每个模块都要以[name]形式。这个名字就是在 rsync 客户端看到的名字。
#但是服务器真正同步的数据是通过 path 指定的。可以依次创建多个模块。
#每个模块要指定认证用户、密码文件,但排除并不是必须的。
[ logs ] #模块名,以下配置都属于此模块
path = /var/log #文件目录所在位置
list = no #当查看服务器上提供了哪些目录时是否列出来,no比较安全
ignore errors #忽略I/O错误
#指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。
#这里的用户和系统用户没有任何关系,是 rsyncd.secrets 中的用户名!
#如果"auth users"被设置,那么客户端发出对该模块的连接请求
#以后会被rsync请求challenged进行验证身份。
#这里使用的 challenge/response 认证协议。
#用户的名和密码以明文方式存放在"secrets file"选项指定的文件中。
#默认情况下无需密码就可以连接模块(也就是匿名方式)。
auth users = zhangzk
secrets file = /etc/rsyncd/rsyncd.secrets #密码文件
exclude = error_log httpd.pid #忽略的文件或目录
comment this is my log #本模块注释,可选
[root@Server ~]#mkdir -p /var/www/html
[root@Server ~]#chmod +r /var/www/html/ #给权限,保证所有用户对源目录/var/www/html都有读取权限
[root@Server ~]#ls -ld /var/www/html/ #查看
给备份账户创建数据库文件
#为备份账户创建数据文件。
[root@Server ~]#vim /etc/rsyncd_users.db
zz:abc123 #无须建立同名系统用户。zz为用户名,abc123为密码。
[root@Server ~]#chmod 666 /etc/rsyncd_users.db
[root@Server ~]#rsync --daemon #启动rsync 服务,以独立监听服务的方式(守护进程)运行
[root@Server ~]#ss -natp |grep rsync
#关闭rsync 服务
kill $(cat /var/run/rsyncd.pid)
rm -rf /var/run/rsyncd.pid
验证效果
服务器
[root@Server html]#cp /etc/shadow /etc/passwd ./
[root@Server html]#ls
passwd shadow
[root@Server html]#vim passwd
zz:x:1000:1000:zhang:/home/zhang:/bin/bash
客户端
[root@Client opt]# rsync -avz [email protected]::backup /opt/test/ #登录
发起端配置
格式一: #用户名@主机地址::共享模块名
rsync -avz [email protected]::zz /opt/ #backup为共享模块名,密码abc123
#zz指的是我在同步的时候用的哪个用户身份
#backup代表的是模块,模块下面会写同步的默认路径和一些特性,所以我们只需要写模块就好了
#/opt/test/指的是同步到本地的目录
格式二: #rsync:/用户名@主机地址/共享模块名
rsync -avz rsync://[email protected]/backup /opt/test
[root@Server html]#cp /etc/fstab ./
[root@Server html]#ls
fstab passwd shadow
[root@Client opt]# echo "abc123" > /etc/server.pass
[root@Client opt]# chmod 600 /etc/server.pass #密码文件权限必须为600,即除了属主,其他人都没有查看权限
[root@Client opt]#rsync -az --delete --password-file=/etc/server.pass [email protected]::backup /opt/test/
#定时同步
30 22 * * * /usr/bin/rsync -az --delete --password-file=/etc/server.pass [email protected]::backup /opt/test/
[root@Client opt]# systemctl restart crond
[root@Client opt]# systemctl enable crond
实时同步rsync
1、定期同步的不足
执行备份的时间固定,延迟明显、实时性差
当同步源长期不变化时,密集的定期任务是不必要的
2、实时同步的优点
一旦同步源出现变化,立即启动备份
只要同步源无变化,则不执行备份
3、Linux内核的inotify机制
从版本2.6.13开始提供
可以监控文件系统的变动情况,并做出通知响应
辅助软件 inotify-tools
4、发起端口配置rsync+Inotify
使用inotify通知接口,可以用来监控文件系统的各种变化情况,如文件存取、删除、移动、修改等。利用这一机制,可以非常方便地实现文件异动告警、增量备份,并针对目录或文件的变化及时作出响应。
将inotify机制与rsync工具相结合,可以实现触发备份(实时同步),即只要原始位置的文档发生变化,则立即启动增量备份操作,否则处于静默等待状态。
因为inotify通知机制由Linux内核提供,因此主要做本机监控,在触发式备份中应用更适合上行同步。
配置rsync实时同步(上行同步)
发起端需要配置 rsync+Inotify
1、修改rsync配置文件
[root@Server html]# vim /etc/rsyncd.conf
......
read only = no #关闭只读,上行同步需要可以写
path = /data #此处地址可以不更改,更改为了区分之前的地址此为上行同步
发起端,调整 inotify 内核参数
在Linux内核中,默认的inotify机制提供了三个调控参数:
max_queue_events ( 监控事件队列,默认值为16384)
max_user_instances (最多监控实例数,默认值为128)
max_user_watches (每个实例最多监控文件数,默认值为8192)
当要监控的目录、文件数量较多或者变化较频繁时,建议加大这三个参数的值
[root@Client opt]# cat /proc/sys/fs/inotify/max_queued_events
16384
[root@Client opt]# cat /proc/sys/fs/inotify/max_user_instances
128
[root@Client opt]# cat /proc/sys/fs/inotify/max_user_watches
8192
[root@Client opt]# vim /etc/sysctl.conf
[root@Client opt]# sysctl -p
fs.inotify.max_queued_events = 16384
fs.inotify.max_user_instances = 1024
fs.inotify.max_user_watches = 1048576
发起端安装inotify-tools
用inotify 机制还需要安装inotify-tools, 以便提供inotifywait、 inotifywatch 辅助工具程序,用来监控、汇总改动情况。
inotifywait:可监控modify (修改)、create (创建)、move (移动)、delete (删除)、attrib ( 属性更改)等各种事件,一有变动立即输出结果。
inotifywatch:可用来收集文件系统变动情况,并在运行结束后输出汇总的变化情况
下载地址:http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
[root@Client opt]# tar zxf inotify-tools-3.14.tar.gz #解压包
[root@Client inotify-tools-3.14]# ./configure && make && make install #编译安装
#监控
#可以先执行“inotifywait”命令,然后另外再开启一个新终端向 /opt/dog 目录下添加文件、移动文件,在原来的终端中跟踪屏幕输出结果。
[root@test4 inotify-tools-3.14]# inotifywait -mrq -e modify,create,move,delete /opt/dog
#选项“-e”:用来指定要监控哪些事件
#选项“-m”:表示持续监控
#选项“-r”:表示递归整个目录
#选项“-q”:简化输出信息
#另起一个test4终端在/opt/dog创建文件,查看监控是否有变化
[root@test4 opt]# ls
dog inotify-tools-3.14.tar.gz test.txt
inotify-tools-3.14 summer.txt tree.txt
[root@test4 opt]# cp summer.txt dog/
[root@test4 dog]# echo "www" >> dog
[root@test4 dog]# echo "www" >> cat.txt
[root@test4 inotify-tools-3.14]# inotifywait -mrq -e modify,create,move,delete /opt/dog
/opt/dog/ CREATE summer.txt
/opt/dog/ MODIFY summer.txt
/opt/dog/ CREATE dog
/opt/dog/ MODIFY dog
/opt/dog/ CREATE cat.txt
/opt/dog/ MODIFY cat.txt
#变动编辑文件会随时监控
发起端,编写触发式同步脚本
ssh 协议认证方式:
两台机器需要做好 ssh 免密登录
# mdkir /data/test/dest/ --dest机器
# mdkir /data/test/src/ --src机器
# rsync -av --delete /data/test/src/ 192.168.22.12:/data/test/dest --测试下命令
# vim /data/test/test.sh
#!/bin/bash
/usr/local/inotify/bin/inotifywait -mrq -e modify,create,move,delete,attrib /data/test/src | while read events
do
rsync -a --delete /data/test/src/ 192.168.22.12:/data/test/dest
echo "`date +'%F %T'` 出现事件:$events" >> /tmp/rsync.log 2>&1
done
# chmod 755 /data/test/test.sh
# /data/test/test.sh &
# echo '/data/test/test.sh &' >> /etc/rc.local --设置开机自启
rsync 协议认证方式:
[root@Client opt]# vim inotify.sh
#!/bin/bash
INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /opt/test/"
RSYNC_CMD="rsync -az --delete --password-file=/etc/server.pass /opt/test/ [email protected]::backup"
$INOTIFY_CMD | while read DIRECTORY EVENT FILE
do
if [ $(pgrep rsync | wc -l) -le 0 ]; then
$RSYNC_CMD
fi
done
[root@Client opt]# chmod 777 /opt/test/
[root@Client opt]# chmod +x inotify.sh
[root@Client opt]# chmod +x /etc/rc.
rc.d/ rc.local
[root@Client opt]# chmod +x /etc/rc.d/rc.local
[root@Client opt]# echo '/opt/inotify.sh' >> /etc/rc.d/rc.local
[root@Client opt]# bash inotify.sh #运行脚本
使用rsync快速删除大量文件
假如要在linux下删除大量文件,比如100万、1000万,像/usr/local/nginx/proxy_temp的nginx缓存等,那么rm -rf * 可能就不好用了,因为要等待很长一段时间。
在这种情况下我们可以使用rsync来巧妙处理。
rsync实际用的是替换原理。
1、先建立一个空的文件夹
[root@localhost opt~]#mkdir /data/user
[root@localhost opt~]#cd /data/user/
[root@localhost opt~]#ls
[root@localhost opt~]#
2、在/opt/zz下建立一万个文件
[root@localhost ~]#mkdir /opt/zz -p
[root@localhost ~]#cd /opt/zz/
[root@localhost zz~]#touch zt{1..10000}
3、用rsync删除
[root@localhost zz~]rsync --delete-before -a -H -v --progress --stats /data/user/ /opt/zz/
本文为原创文章,版权归123ppp资源网所有,欢迎分享本文,转载请保留出处!