ky818smKy818sm  2023-11-01 13:52 123ppp资源网 隐藏边栏 |   抢沙发  23 
文章评分 0 次,平均分 0.0

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

用Rsync实现远程同步


[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实现远程同步
用Rsync实现远程同步

使用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/

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

声明:如果本站发布的内容侵犯到您的权益,请通过邮件【[email protected]】联系本站,我们将及时删除!

发表评论

表情 格式 链接 私密 签到