一、rsync概述
rsync是类Unix系统下的数据镜像备份工具,一款支持快速完全备份和增量备份的工具,支持本地复制,远程同步等,类似于scp命令:rsync命令在同步文件之前要先登录目录主机进行用户身份认证,认证过后才能进行数据同步,身份认证方式取决于所使用的协议类型,rsync一般使用两种协议进行数据同步:ssh协议和rsync协议
增量备份和差异备份:消耗的资源较少
完全备份:消耗的资源最多,更安全。
二、rsync特性
能更新整个目录树和文件系统
有选择性的保留符号连接/硬链接/文件属性/权限/设备以及时间等
对于安装来说,无任何特殊权限要求
对于多个文件来说,文件传输效率高
能用ssh或自定义端口作为传输入口端口
三、rsync工作原理
既然涉及到数据同步,必要的两个概念是:源地址(文件)目标地址(文件),以及以哪一方为基准,例如,想让目标主机上的文件和本地文件保持同步,则是以本地文件为同步基准,将本地文件作为源文件推送到目标主机上。
rsync在进行数据同步之前需要先进行用户身份验证,验证方式取决于使用的连接方式
ssh登录验证模式:使用ssh协议作为基础进行用户身份认证,然后进行数据同步
rsync登录验证模式:使用rsync协议进行用户身份认证(非系统用户)然后进行数据同步
数据同步方式:推送(上传)拉取(下载)

四、rsync实验演示
我们一般使用rsync来进行单向数据同步,因此我们需要确定一个基准,比如:两台服务器,一台NFS作为网站数据服务器(基准服务器),另一台专门做rsync数据备份服务器,我们以此为基础开始我们的实验
1、ssh协议数据同步:将NFS服务器数据同步备份到rsync服务器
// 1、实验环境:一台NFS服务器,一台rsync服务器// centos6.x:20.20.20.21 SRC——数据服务器,推送:服务器端// centos6.x:20.20.20.22 DST——备份服务器,下载:本地客户端// 在两台服务器上分别创建目录(/filesrc、/filedst)///2、下行同步(下载)// 格式:rsync -avz 服务器地址:/服务器目录/* /本地目录// 示例:rsync -avz root@20.20.20.21:/filesrc/* /filedst// -a: 归档模式,递归保留对象属性// -v:显示同步过程// -z:在传输文件时进行压缩[root@server21 ~]# yum install-y rsync[root@server22 ~]# yum install -y rsync[root@server21 ~]# mkdir /filesrc[root@server21 ~]# touch /filesrc/{1..5}.txt[root@server22 ~]# mkdir /filedst#报错信息:[root@server22 ~]# rsync -avz root@10.10.10.12:/filesrc/* /filedst/rsync: Failed to exec ssh: No such file or directory (2)rsync error: error in IPC code (code 14) at pipe.c(84) [receiver=3.0.6]rsync: connection unexpectedly closed (0 bytes received so far) [receiver]rsync error: error in IPC code (code 14) at io.c(600) [receiver=3.0.6]#解决方案:检查原因是ssh客户端没有安装[root@server22 ~]# yum install openssh-clients -y#报错信息[root@server22 ~]# rsync -avz root@20.20.20.21:/filesrc/* /filedst/root@20.20.20.21's password:bash: rsync: command not foundrsync: connection unexpectedly closed (0 bytes received so far) [receiver]rsync error: remote command not found (code 127) at io.c(600) [receiver=3.0.6]#解决方案: //目标服务器没有安装rsync服务[root@server21 ~]# yum install-y rsync[root@server22 ~]# rsync -avz root@20.20.20.21:/filesrc/* /filedst/root@20.20.20.21's password: 空格^[[Areceiving incremental file list1.txt2.txt3.txt4.txt5.txt[root@server22 ~]# ls /filedst/1.txt 2.txt 3.txt 4.txt 5.txt///3、上行同步(上传)// 格式:rsync -avz /本地目录/* 服务器地址:/服务器目录// 示例:rsync -ava /filedst/* root@192.168.88.10:/filesrc[root@server21 ~]# rm -rf /filesrc/*[root@server22 ~]# rsync -avz /filedst/* root@20.20.20.21:/filesrc/root@20.20.20.21's password:sending incremental file list1.txt2.txt3.txt4.txt5.txtsent 250 bytes received 107 bytes 238.00 bytes/sectotal size is 0 speedup is 0.00[root@server21 ~]# ls /filesrc/1.txt 2.txt 3.txt 4.txt 5.txt// 注意:使用root用户进行实验可以,但生产环境中尽量使用创建的普通用户,减少权限溢出//4、 创建用来做数据同步的用户,并给予用户对目录的相应权限,一般使用ACL设置权限[root@server21 ~]# ssh-keygen -t rsa -b 2048Generating public/private rsa key pair.Enter file in which to save the key (/root/.ssh/id_rsa):Created directory '/root/.ssh'.Enter passphrase (empty for no passphrase):Enter same passphrase again:Your identification has been saved in /root/.ssh/id_rsa.Your public key has been saved in /root/.ssh/id_rsa.pub.The key fingerprint is:f4:71:ca:0d:cb:b8:21:c3:6d:9e:a6:97:56:eb:0e:b1 root@server21The key's randomart image is:+--[ RSA 2048]----+| || || . o . || . o = B || + S * . || = *. || Eo . || o+.. || .o oo |+-----------------+#报错信息[root@server21 ~]# ssh-copy-id root@20.20.20.22-bash: ssh-copy-id: command not found#问题分析[root@server21 ~]# rpm -qa|grep opensshopenssh-5.3p1-117.el6.x86_64openssh-server-5.3p1-117.el6.x86_64#解决方案:发现没有安装客户端[root@server21 ~]# yum install -y openssh-clients[root@server21 ~]# ssh -copy-id root@20.20.20.22Unknown cipher type 'opy-id'[root@server21 ~]# ssh-copy-id root@20.20.20.22to make sure we haven't added extra keys that you weren't expecting.[root@server22 ~]# ssh-keygen -t rsa -b 2048[root@server22 ~]# ssh-copy-id root@20.20.20.21root@20.20.20.21's password:to make sure we haven't added extra keys that you weren't expecting.#验证不需要密码直接传输[root@server22 ~]# rm -rf /filedst/*[root@server21 ~]# rsync -avz /filesrc/* root@20.20.20.22:/filedst1.txt2.txt3.txt4.txt5.txt// 拓展:若要实现免密码数据同步,只需要做好ssh秘钥对登录即可
2、rsync协议数据同步,将NFS服务器数据同步备份到rsync服务器
// 实验环境:一台服务器,一台客户端// 1、在两台服务器上分别创建目录(/filesrc、/filedst)// 2、搭建rsync服务(仅需要在NFS服务器上搭建即可)// 2.1、创建主配置文件[root@server21 ~]# vim /etc/rsyncd.conf #这个文件默认没有,自己创建即可address = 20.20.20.21 #rsync服务绑定IPport 873 #默认服务端口873log file = /var/log/rsyncd.log #日志文件位置pid file = /var/run/rsyncd.pid #进程号文件位置[web] #共享名:用来连接是写在url上的,切记comment = web directory backup #共享描述话语path = /filesrc #实际共享目录read only = no #是否仅允许读取dont compress = *.gz *.bz2 #那些文件类型不进行压缩auth users = user1 #登录用户名(非系统用户,需要自行创建)secrets file = /etc/rsyncd_users.db #认证所需账号密码文件(需自行创建同上)// 2.2、创建认证所需账户密码文件//2、创建认证所需账户密码文件[root@server21 ~]# vim /etc/rsyncd_users.dbuser1:123456[root@server21 ~]# chmod 600 /etc/rsyncd_users.db #必须修改权限,否则登录报错// 2.3、启动服务[root@server21 ~]# rsync --daemon[root@server21 ~]# netstat -antp |grep :873tcp 0 0 20.20.20.21:873 0.0.0.0:* LISTEN 1679/rsync// 2.4、设置映射用户对共享目录有权限(r)[root@server21 ~]# setfacl -m u:nobody:rwx /filesrc#注意:关闭服务可使用kill命令,但偶尔会造成服务被结束,但进程号配置we年不被删除的问题,若遇到此类问题可自己手动删除,再启动则正常(建议自己写一个rsync的服务管理脚本)// 3、下行同步(下载)// 格式:rsync -avz rsync://用户名@服务器地址/共享模块名 /本地目录// 示例:rsync -avz rsync://user1@20.20.20.21/web /filedst// 拓展:--delete:删除本地比服务器多出来的文件(源地址没有,目标地址有的删掉)[root@server22 ~]# rm -rf /filedst/*[root@server21 ~]# touch /filesrc/6.txt[root@server21 ~]# ls /filesrc/1.txt 2.txt 3.txt 4.txt 5.txt 6.txt#报错信息:出现以上情况说明,服务器已经连接上了,密码验证失败[root@server22 ~]# rsync -avz rsync://user1@20.20.20.21/web /filedst/Password:@ERROR: auth failed on module webrsync error: error starting client-server protocol (code 5) at main.c(1503) [receiver=3.0.6]#解决方案:[root@server22 ~]# rsync -avz --delete rsync://user1@20.20.20.21/web /filedst/ #客户端下载Password: 123456./1.txt2.txt3.txt4.txt5.txt6.txt[root@server22 ~]# touch /filedst/7.txt #本地创建7.txt文件[root@server22 ~]# rsync -avz rsync://user1@20.20.20.21/web /filedst/Password:receiving incremental file list #同步7.txt并没有同步过去./[root@server22 ~]# rsync -avz --delete rsync://user1@20.20.20.21/web /filedst/Password:receiving incremental file listdeleting 7.txt #同步删除差异文件:会拿着本地文件和本地对比,服务器端有,下载下来,服务器端没有,本地有,删除本地即可;保持本地文件和服务器端文件一致[root@server22 ~]# ls /filedst/1.txt 2.txt 3.txt 4.txt 5.txt 6.txt//4、上行同步(上传)// 格式:rsync -avz /本地目录/* rsync://用户名@服务器地址/共享模块名// 示例:rsync -ava /filedst/* rsync://user1@20.20.20.21/web[root@server21 ~]# rm -rf /filesrc/*[root@server22 ~]# rsync -avz /filedst/ rsync://user1@20.20.20.21/webPassword:sending incremental file list./rsync: failed to set times on "/." (in web): Operation not permitted (1)1.txt2.txt3.txt4.txt5.txt6.txt//5、 拓展:rsync协议的免密码可以借助一个环境变量实现// export RSYNC_PASSWORD=虚拟用户密码(客户端生成)[root@server22 ~]# export RSYNC_PASSWORD=123456 #rsync协议的免密码可以借助一个环境变量实现[root@server22 ~]# rm -rf /filedst/*[root@server22 ~]# touch /filedst/{a..f}.txt[root@server22 ~]# ls /filedst/a.txt b.txt c.txt d.txt e.txt f.txt[root@server22 ~]# rsync -avz --delete rsync://user1@20.20.20.21/web /filedst/receiving incremental file list #没有用户名及密码deleting f.txt #删除本地差异文件deleting e.txtdeleting d.txtdeleting c.txtdeleting b.txtdeleting a.txt./1.txt #没有的文件同步过来2.txt3.txt4.txt5.txt6.txt
五、配置rsync+inotify实时同步
定期同步的缺点:
当执行备份的时间固定,延期明显,实时性差
当同步源长期不变化时,密集的定期任务是不必要的(浪费资源)
实时同步的优点:
一旦同步源出现变化,立即启动备份,实时性好
只要同步源无变化,则不执行备份,节省资源
1、inotify简介
inotify是一个Linux内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如删除/读/写/卸载等操作,要使用inotify,必须具备一台带有2.6.13版本的内核操作系统
inotify两个监控命令:
inotifywait:用于持续监控,实时输出结果(常用)
inotifywatch:用于短期监控,任务完成后再出结果
2、inotify部署
//1、安装编译工具[root@server21 inotify-tools-3.14]# yum install -y gcc* #在不知道你需要的软件是gcc还是gcc-c++,直接gcc*即可全部安装//2、部署在服务器端:centos6.x:20.20.20.21 #服务器端#将inotify-tools.zip上传到服务器[root@server21 ~]# unzip inotify-tools.zip[root@server21 ~]# cd inotify-tools[root@server21 inotify-tools]# tar -zxvf inotify-tools-3.14.tar.gz[root@server21 inotify-tools]# cd inotify-tools-3.14[root@server21 inotify-tools-3.14]# ./configure && make && make install// inotifywait命令格式// 格式:inotifywait -mrq -e 监控动作2 /监控目录&// 示例:inotifywait -mrq -e create,delete /filesrc &// -m:始终保持事件监听状态// -r:递归查询目录// -q:只打印监控事件的信息// 监控动作:modify(内容),create ,attrib(权限),move,delete[root@server21 ~]# inotifywait -mrq -e create,delete,modify /filesrc/ #监控实时显示操作状态/filesrc/ CREATE aaa/filesrc/ DELETE 1.txt/filesrc/ MODIFY aaa[root@server21 ~]# touch /filesrc/aaa[root@server21 ~]# rm -rf /filesrc/1.txt[root@server21 ~]# echo "aaaaaaa">>/filesrc/aaa//3、 利用rsync+inotifywait结合脚本实现单向实时同步// 注:用户登录时要求面密码验证[root@server21 ~]# vim src.sh#!/bin/basha="inotifywait -mrq -e create,delete,modify /filesrc" #变量ab="rsync -avz /filesrc/* root@20.20.20.22:/filedst" #变量b$a | while read directory event file#while判断是否接受到监控记录 $a:执行变量a;$a只要有变化就传输给$bdo$bdone[root@server21 ~]# rm -rf /filesrc/*[root@server22 ~]# rm -rf /filedst/*[root@server21 ~]# bash ~/src.sh & #执行脚本放在后台执行// 4、实验结果验证// 在服务器端创建,删除文件,查看备份端是否正常#创建同步[root@server21 ~]# touch /filesrc/a.txt[root@server21 ~]# sending incremental file lista.txt[root@server22 ~]# ls /filedst/a.txt[root@server21 ~]# touch /filesrc/xxx.txt[root@server21 ~]# sending incremental file list #服务端自动执行xxx.txtsent 82 bytes received 31 bytes 75.33 bytes/sectotal size is 0 speedup is 0.00#更改文件内容[root@server22 ~]# ls /filedst/a.txt xxx.txt[root@server21 ~]# echo "1111111111aaaaaaaa" >>/filesrc/a.txt[root@server21 ~]# sending incremental file list #服务端自动执行a.txtsent 91 bytes received 31 bytes 81.33 bytes/sectotal size is 14 speedup is 0.11echo "1111111111aaaaaaaa" >>/filesrc/a.txt[root@server22 ~]# cat /filedst/a.txtaaaaaaaaaaaaa1111111111aaaaaaaa
拓展:跳整inotify监控的文件数量
| 调整inotify内核参数(/etc/sysctl.conf) | |
| mak_queue_events | 监控队列大小 |
| mak_user_instances | 是多监控实例数 |
| max_user_watches | 每个实例最多监控文件数 |
六、配置unison+inotify实现双向实时同步
rsync在单向同步上支持的非常好,且效率很高,但是在双向同步支持较差;unison则是同步的优秀工具,但其缺点是同步效率较低、
rsync单向同步就可以满足我们的需求,
// 1、环境要求// 1.1、准备好同步所需的两个目录// 1.2、如若用root来实现登录的话,生成秘钥对,以便于免密码验证// 1.3、准备好inotify和unison的软件包// 2、安装步骤:[root@server21 ~]# rm -rf /filesrc/*[root@server22 ~]# rm -rf /filedst/*[root@server21 ~]# ps aux |grep bash #停止脚本root 4458 0.0 0.0 106072 1308 pts/2 S 11:37 0:00 bash /root/src.shroot 4460 0.0 0.0 106072 816 pts/2 S 11:37 0:00 bash /root/src.sh[root@server21 ~]# kill 4458[root@server21 ~]# kill 4460// 2.1、先安装inotify(客户端)[root@server21 ~]# cp -a inotify-tools.zip /filesrc/ #将文件传输到20.20.20.22下,[root@server22 ~]# ls /filedst/inotify-tools.zip[root@server22 ~]# mv /filedst/inotify-tools.zip .[root@server22 ~]# unzip inotify-tools.zip[root@server22 ~]# cd inotify-tools[root@server22 inotify-tools]# lsinotify-tools-3.14.tar.gz ocaml-3.10.1.tar.gz unison-2.13.16.tar.gz[root@server22 inotify-tools]# tar -zxvf inotify-tools-3.14.tar.gz[root@server22 inotify-tools]# cd inotify-tools-3.14[root@server22 inotify-tools-3.14]# yum install -y gcc**[root@server22 inotify-tools-3.14]# ./configure && make && make install// 2.2、再安装ocaml[root@server22 inotify-tools-3.14]# cd ..[root@server21 ~]# cd inotify-tools[root@server21 inotify-tools]# tar -zxvf ocaml-3.10.1.tar.gz[root@server21 inotify-tools]# cd ocaml-3.10.1[root@server21 ocaml-3.10.1]# ./configure #忽略所有报错[root@server21 ocaml-3.10.1]# make world opt[root@server21 ocaml-3.10.1]# make install#同步流程部署客户端ocml:20.20.20.22// 3、安装unison(服务端,客户端)[root@server21 ocaml-3.10.1]# cd ..[root@server21 inotify-tools]# tar -zxvf unison-2.13.16.tar.gz[root@server21 inotify-tools]# cd unison-2.13.16[root@server21 unison-2.13.16]# make UISTYLE=text THREADS=true STATIC=true #已经存在Makefile文件,不需要./configuremake[1]: [tags] Error 127 (ignored) #错误:忽略即可[root@server21 unison-2.13.16]# cp unison /usr/local/bin/ #把生成的脚本拷贝出来#同步流程部署客户端unison:20.20.20.22// 4、配置脚本#注:双向自动同步,监控目录和数据同步时,源目录不能使用*通配符传输,否则会变成死循环。// filesrc端[root@server21 ~]# vim filesrc.sh#!/bin/basha="inotifywait -mrq -e create,delete,modify /filesrc"b="/usr/local/bin/unison -batch /filesrc/ ssh://20.20.20.22//filedst/"#-batch:批处理$a | while read directory event filedo$bdone[root@server21 ~]# bash filesrc.sh &[1] 10586// filedst端[root@server22 ~]# vim filedst.sh#!/bin/basha="inotifywait -mrq -e create,delete,modify /filedst"b="/usr/local/bin/unison -batch /filedst/ ssh://20.20.20.21//filesrc/"#-batch:批处理$a | while read directory event filedo$bdone[root@server22 ~]# bash filedst.sh &[1] 10998// 4、测试// 将两个脚本放入后台执行:bash filesrc.sh &// 分别在两个主机上创建主机查看是否可以实现双向实时同步(可能会有延迟)#创建同步[root@server21 ~]# touch /filesrc/a.txt[root@server21 ~]# Contacting server... #自动执行命令Looking for changes[root@server22 ~]# Contacting server... #客户端自动执行命令[root@server22 ~]# ls /filedst/a.txt[root@server22 ~]# touch /filedst/1.txt#删除同步[root@server22 ~]# rm -rf /filedst/1.txt[root@server22 ~]# Contacting server... #自动执行,删除的时候可能会有延迟,生产环境多检查[root@server21 ~]# Contacting server... #服务端自动执行Looking for changes[root@server21 ~]# ls /filesrc/1.txt a.txt#改变文件内容[root@server21 ~]# echo "1111111111aaaaaaaa" >>/filesrc/a.txt[root@server21 ~]# Contacting server... #自动执行[root@server22 ~]# Contacting server... #客户端自动执行Contacting server...[root@server22 ~]# cat /filedst/a.txt1111111111aaaaaaaa[root@server22 ~]# echo "aaaaaaaa111111111" >>/filedst/a.txt[root@server22 ~]# Contacting server... #自动执行[root@server21 ~]# Contacting server... #服务端自动执行[root@server21 ~]# cat /filesrc/a.txt1111111111aaaaaaaaaaaaaaaa111111111
=================================END==================================
辅助文本
四、rsync实验演示
我们一般使用rsync来进行单向数据同步,因此我们需要确定一个基准,比如:两台服务器,一台NFS作为网站数据服务器(基准服务器),另一台专门做rsync数据备份服务器,我们以此为基础开始我们的实验
1、ssh协议数据同步:将NFS服务器数据同步备份到rsync服务器
// 实验环境:一台NFS服务器,一台rsync服务器// 在两台服务器上分别创建目录(/filesrc、/filedst)// 下行同步(下载)// 格式:rsync -avz 服务器地址:/服务器目录/* /本地目录// 示例:rsync -avz root@192.168.88.10:/filesrc/* /filedst// -a: 归档模式,递归保留对象属性// -v:显示同步过程// -z:在传输文件时进行压缩// 上行同步(上传)// 格式:rsync -avz /本地目录/* 服务器地址:/服务器目录// 示例:rsync -ava /filedst/* root@192.168.88.10:/filesrc// 注意:使用root用户进行实验可以,但生产环境中尽量使用创建的普通用户,减少权限溢出// 创建用来做数据同步的用户,并给予用户对目录的相应权限,一般使用ACL设置权限useradd zhangsanpasswd zhangsansetfacl -m u:zhangsan:rwx /filesrc// 拓展:若要实现免密码数据同步,只需要做好ssh秘钥对登录即可
2、rsync协议数据同步,将NFS服务器数据同步备份到rsync服务器
// 实验环境:一台服务器,一台客户端// 1、在两台服务器上分别创建目录(/filesrc、/filedst)// 2、搭建rsync服务(仅需要在NFS服务器上搭建即可)// 2.1、创建主配置文件address = 192.168.88.10 #rsync服务绑定IPport 873 #默认服务端口873log file = /var/log/rsyncd.log #日志文件位置pid file = /var/run/rsyncd.pid #进程号文件位置[web] #共享名:用来连接是写在url上的,切记comment = web directory backup #共享描述话语path = /filesrc #实际共享目录read only = on #是否仅允许读取dont compress = *.gz *.bz2 #那些文件类型不进行压缩auth users = user1 #登录用户名(非系统用户,需要自行创建)secrets file = /etc/rsyncd_users.db #认证所需账号密码文件(需自行创建同上)// 2.2、创建认证所需账户密码文件vim /etc/rsyncd_users.dbuser1:123456chmod 600 /etc/rsyncd_users.db #必须修改权限,否则登录报错// 2.3、启动服务rsync --daemonnetstat -antp |grep :873// 2.4、设置映射用户对共享目录有权限(r)setfacl -m u:nobody:rwx /filesrc#注意:关闭服务可使用kill命令,但偶尔会造成服务被结束,但进程号配置we年不被删除的问题,若遇到此类问题可自己手动删除,再启动则正常(建议自己写一个rsync的服务管理脚本)// 下行同步(下载)// 格式:rsync -avz rsync://用户名@服务器地址/共享模块名 /本地目录// 示例:rsync -avz rsync://user1@192.168.88.10/web /filedst// 拓展:--delete:删除本地比服务器多出来的文件(源地址没有,目标地址有的删掉)rsync -avz --delete rsync://user1@192.168.88.10/web /filedst//上行同步(上传)//格式:rsync -avz /本地目录/* rsync://用户名@服务器地址/共享模块名// 示例:rsync -ava /filedst/* rsync://user1@192.168.88.10/web// 拓展:rsync协议的免密码可以借助一个环境变量实现// export RSYNC_PASSWORD=虚拟用户密码(客户端生成)
五、配置rsync+inotify实时同步
定期同步的缺点:
当执行备份的时间固定,延期明显,实时性差
当同步源长期不变化时,秘籍的定期任务是不必要的(浪费资源)
实时同步的优点:
一旦同步源出现变化,立即启动备份,实时性好
只要同步源无变化,则不执行备份,节省资源
1、inotify简介
inotify是一个Linux内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如删除/读/写/卸载等操作,要使用inotify,必须具备一台带有2.6.13版本的内核操作系统
inotify两个监控命令:
inotifywait:用于持续监控,实时输出结果(常用)
inotifywatch:用于短期监控,任务完成后再出结果
2、inotify部署
yum install -y gcc*tar -xf inotify-tools-3.14.tar.gzcd inotify-tools-3.14./configure && make && make install// inotifywait命令格式// 格式:inotifywait -mrq -e 监控动作2 /监控目录&// 示例:inotifywait -mrq -e create,delete /filesrc &// -m:始终保持事件监听状态// -r:递归查询目录// -q:只打印监控事件的信息// 监控动作:modify(内容),create ,attrib(权限),move,delete// 利用rsync+inotifywait结合脚本实现单向实时同步vim src.sh!#/bin/basha="inotifywait -mrq -e create,delete /filesrc"b="rsync -avz /filesrc/* root@192.168.88.20:/filedst"$a | while read directory event file #while判断是否接受到监控记录do$bdone// 注:用户登录时要求面密码验证// 实验结果验证// 在服务器端创建,删除文件,查看备份端是否正常
拓展:跳整inotify监控的文件数量
| 调整inotify内核参数(/etc/sysctl.conf) | |
| mak_queue_events | 监控队列大小 |
| mak_user_instances | 是多监控实例数 |
| max_user_watches | 每个实例最多监控文件数 |
六、配置unison+inotify实现双向实时同步
rsync在单向同步上支持的非常好,且效率很高,但是在双向同步支持较差;unison则是同步的优秀工具,但其缺点是同步效率较低
// 1、环境要求// 1.1、准备好同步所需的两个目录// 1.2、如若用root来实现登录的话,生成秘钥对,以便于免密码验证// 1.3、准备好inotify和unison的软件包// 2、安装步骤:// 2.1、先安装inotifytar -xf inotify-tools-3.14.tar.gzcd inotigy-tools-3.14./configure && make && make install// 2.2、再安装ocamltar -xf ocaml-3.10.1.tar.gzcd ocaml-3.10.1./configure #忽略所有报错make world optmake install// 3、安装unisontar -xf unison-2.13.16.tar.gzcd unison-2.13.16make UISTYLE=text THREADS=true STATIC=true #已经存在Makefilewe年,不需要./configurecp unison /usr/local/bin #把生成的脚本拷贝出来#注意:同样的操作在服务器端也做一遍// 4、配置脚本#注:双向自动同步,监控目录和数据同步时,源目录不能使用*通配符传输,否则会变成死循环。// filesrc端#!/bin/basha="inotifywait -mrq -e create,delete /filesrc"b="/usr/local/bin/unison -batch /filesrc/ ssh://192.168.88.20//filedst/" #-batch:批处理$a | while read directory event filedo$bdone// filedst端#!/bin/basha="inotifywait -mrq -e create,delete /filedst"b="/usr/local/bin/unison -batch /filedst/ ssh://192.168.88.20//filesrc/" #-batch:批处理$a | while read directory event filedo$bdone// 4、测试// 将两个脚本放入后台执行:bash src.sh &// 分别在两个主机上创建主机查看是否可以实现双向实时同步(可能会有延迟)
END
声明:JavaBBS论坛主要用于IT技术专题的交流学习,为开源技术爱好者提供广泛、权威的技术资料。若您在技术专题有更好的想法或者建议,欢迎交流!!!




推荐阅读
Recommended reading


JavaBBS
Git → https://www.javabbs.cn/git
JavaBBS大数据→ https://www.javabbs.cn/dsj
JavaBBS云存储→ https://www.javabbs.cn/ycc
JavaBBS数据库→ https://www.javabbs.cn/sjk
JavaBBS云计算→ https://www.javabbs.cn/yjs
JavaBBSIT.Log→ https://www.javabbs.cn/itl
JavaBBSNginx→ https://www.javabbs.cn/ngx
JavaBBSzabbix→ https://www.javabbs.cn/zbx
JavaBBSJavaSE→ https://www.javabbs.cn/jse JavaBBS社区文章→ https://www.javabbs.cn/bwz
JavaBBS社区资料→ https://www.javabbs.cn/bzl





