1.rsync简介

rsync是linux系统下的数据备份工具。支持本地复制,或者与其他SSH、rsync主机同步。

2.rsync的部分特性

rsync支持很多特性:

  • 可以镜像保存整个目录树和文件系统
  • 可以很容易做到保持原来文件的权限、时间、软硬链接等等
  • 无须特殊权限即可安装
  • 快速:第一次同步时rsync会复制全部内容,但在下一次只传输修改过的文件。rsync在传输数据的过程中可以实行压缩及解压缩操作,因此可以使用更少的带宽
  • 安全:可以使用scp、ssh等方式来传输文件,当然也可以通过直接的socket连接
  • 支持匿名传输,以方便进行网站镜象

3.rsync的ssh认证协议

rsync命令来同步系统文件之前要先登录remote主机认证,认证过程中用到的协议有2种:

  • ssh协议
  • rsync协议

rsync server端不用启动rsync的daemon进程,只要获取remote host的用户名和密码就可以直接rsync同步文件
rsync server端因为不用启动daemon进程,所以也不用配置文件/etc/rsyncd.conf

4.rsync命令的常用选项

  * -a, --archive       //归档* -v, --verbose       //啰嗦模式* -q, --quiet         //静默模式* -r, --recursive     //递归* -p, --perms         //保持原有的权限属性* -z, --compress      //在传输时压缩,节省带宽,加快传输速度* --delete            //在源服务器上做的删除操作也会在目标服务器上同步

5.rsync+inotify

Inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了Inotify支持,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况,而inotify-tools就是这样的一个第三方软件。

示例环境:源服务器:
* IP地址:192.168.1.83;
* 应用:rsync,inotify-tools,脚本;
* 操作系统:centos7目标服务器:
* IP地址:192.168.1.82;
* 应用:rsync;
* 操作系统:centos7

6.实例

场景:部署rsync+inotify同步/etc/nginx/default.d目录至目标服务器的/etc/nginx/default.d下;

6.1 源服务器和目标服务器都需要操作:

 //关闭防火墙与selinux[root@cm2 ~]# systemctl stop firewalld[root@cm2 ~]# setenforce 0[root@cm2 ~]# getenforce Permissive[root@cm2 ~]# systemctl disable firewalldRemoved symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.//安装rsync服务端软件[root@cm2 ~]# yum -y install rsync安装过程省略...

6.2 目标服务器上进行以下操作(192.168.1.82):

 //设置rsyncd.conf配置文件[root@cm2 ~]# vim /etc/rsyncd.conf log file = /var/log/rsyncd.logpidfile = /var/run/rsyncd.pidlock file = /var/run/rsync.locksecrets file = /etc/rsync.password[sync_from_cm3]path = /etc/nginx/default.d/comment = sync nginx config file from cm3uid = rootgid = rootport = 873ignore errorsuse chroot = noread only = nolist = nomax connections = 200timeout = 600auth users = roothosts allow = 192.168.1.83hosts deny = 192.168.1.1//配置用户认证文件[root@cm2 ~]# vim /etc/rsync.password[root@cm2 ~]# cat /etc/rsync.passwordroot:gmg_2019//设置文件权限[root@cm2 ~]# chmod 600 /etc/rsync.password[root@cm2 ~]# ll /etc/rsync.pass -rw-------. 1 root root 13 2月  19 04:14 /etc/rsync.password//启动rsync服务并设置开机自启动[root@cm2 ~]# systemctl start rsyncd[root@cm2 ~]# systemctl enable rsyncd

6.3 源服务器上进行以下操作(192.168.1.83):

 //创建认证密码文件,只需要密码,不需要用户[root@cm2 ~]# vim /etc/rsync.passwordgmg_2019//设置文件权限,只设置文件所有者具有读取、写入权限即可[root@cm2 ~]# chmod 600 /etc/rsync.password //在源服务器的目录/etc/nginx/default.d/操作文件,然后在源服务器运行以下命令[root@cm2 ~]# rsync -avH --port 873 --delete /etc/nginx/default.d/ root@192.168.1.82::sync_from_cm3 --password-file=/etc/rsync.password//安装inotify-tools工具,实时触发rsync进行同步//查看服务器内核是否支持inotify[root@cm2 ~]# ll /proc/sys/fs/inotify/总用量 0-rw-r--r-- 1 root root 0 2月  19 15:46 max_queued_events-rw-r--r-- 1 root root 0 2月  19 15:46 max_user_instances-rw-r--r-- 1 root root 0 2月  19 15:46 max_user_watches**如果有这个三个以max开头的文件,则表示服务器内核支持inotify**//下载并安装inotify-tools[root@cm2 ~]# wget https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/i/inotify-tools-3.14-9.el7.x86_64.rpm[root@cm2 ~]# rpm -ivh inotify-tools-3.14-8.el7.x86_64.rpm 

6.4 监控源服务器指定文件夹的文件操作和服务器之间的同步

这里编写/scripts/inotify.sh脚本(名字随便取,目录随便放)

# 编写监控和同步脚本
[root@cm3 ~]# vi /scripts/inotify.sh
host=192.168.1.82
src=/etc/nginx/default.d/
des=sync_from_cm3
password=/etc/rsync.password
user=root
inotifywait=/usr/bin/inotifywait$inotifywait -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src | while read files
dorsync -avzP --delete  --timeout=100 --password-file=${password} $src $user@$host::$desecho "rsync -avzP --delete  --timeout=100 --password-file=${password} $src $user@$host::$des" >> /tmp/rsync.logecho "${files} was rsynced" >> /tmp/rsync.log 2>&1
done# 修改可执行权限
[root@cm3 ~]# chmod 777 /scripts/inotify.sh # 启动脚本
nohup /bin/bash /scripts/inotify.sh &# 设置脚本为开机自动启动
[root@cm3 ~]# vim /etc/rc.d/rc.local
nohup /bin/bash /scripts/inotify.sh &[root@cm3 ~]# chmod +x /etc/rc.d/rc.local

到此已经完成了,你可以修改源服务器指定文件夹内部的内容,就可以完成同步了

注:

对于文件夹中文件特别多的,会发现同步速度比较慢。可以参考一下文章

http://www.ttlsa.com/web/let-infotify-rsync-fast/

Linux服务器之间的文件同步(单向同步:rsync+inotify)相关推荐

  1. Linux命令(20)linux服务器之间复制文件和目录

    linux的scp命令: scp就是secure copy的简写,用于在linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器.  有时我们需要获得远程服务器 ...

  2. linux主机数据拷贝,linux 服务器之间拷贝文件

    scp就是secure copy,是用来进行远程文件拷贝的.数据传输使用ssh1,并且和ssh1使用相同的认证方式,提供相同的安全保证.与rcp不同的是,scp会要求你输入密码如果需要的话. 最简单的 ...

  3. linux服务器之间传输文件的四种方式

    转载自:https://www.jb51.net/article/82608.htm 1. scp [优点]简单方便,安全可靠:支持限速参数  [缺点]不支持排除目录 [用法] scp就是secure ...

  4. Linux服务器之间传输文件 scp命令

    scp命令可用于用一台服务器向另一台服务器上传文件 scp -p file.tar.gz root@192.168.107.193:/root 把当前目录下的  file.tar.gz 推送到 192 ...

  5. 【scp】【数据传输】服务器之间拷贝数据、数据同步

    方法一:scp(secure copy)安全拷贝 (1)scp定义: scp可以实现服务器与服务器之间的数据拷贝.(   from serverA  to serverB ) 1.scp方法 最简单的 ...

  6. mac服务器文件传输,scp实现mac与linux服务器之间文件传输

    1.mac上传文件到linux服务器 scp 文件名 用户名@服务器ip:目标路径 如:scp -P端口号 /Users/test/testFile test@xxx.xxx.xxx.xxx:/tes ...

  7. linux 服务器之间数据复制—scp

    文章目录 一.命令详情介绍 二.使用实例 三.批量文件传输 另一个方法 scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝 ...

  8. linux100台服务器免密,多台Linux服务器之间互相免密登陆,脚本同步免密

    多台Linux服务器之间互相免密登陆,脚本同步免密 环境: 三台Linux 服务器 IP                          Release                        ...

  9. 关于解决多台linux服务器间的文件实时同步问题

    关于解决多台linux服务器间的文件实时同步问题 参考文章: (1)关于解决多台linux服务器间的文件实时同步问题 (2)https://www.cnblogs.com/fps2tao/p/1003 ...

最新文章

  1. 【加强版】js原生实现拖拽效果,这次没有用document的mousedown、mousemove、mouseup事件我们来点实际的(但是有个弊端:拖拽过程中鼠标会变成一个禁用符号,不太友好)
  2. C++ trivial和non-trivial构造函数及POD类型(转)
  3. MySQL关联更新update
  4. C#实现Windows后台服务实例浅析
  5. 3d正方体旋转相册代码_3d旋转正方体的多种html和css制作方法和相关知识复习讲解
  6. 阿里云的RDS 查看binlog日志的方法
  7. windows 2012 非pdc DC强行重置NTP
  8. vs2013代码模板设置
  9. Tesseract-OCR识别中文与训练字库实例
  10. intel编译器linux2020依赖,▲记录▲ linux下intel的ifort编译器下载安装及配置
  11. 《大数据基础教程、实验和案例教程---林子雨版》分布式模式的HBase配置
  12. eclipse git 取远程代码_【JAVA】Eclipse中使用git进行pull远程代码
  13. XMU2018摸底测试 星际战争I(Easy)
  14. 全球365隐私政策服务协议
  15. ext2.2全选反选修复
  16. 使用Nginx搭建直播服务器(nginx-rtmp-module)
  17. 【OpenCV4】opencv2/core/core.hpp : No such file or directory
  18. 使用Docker还是Rocket?也许可以一起来
  19. Python基础笔记_Day14_Python图形化界面、Python GUI、tkinter、Python英汉词典
  20. vue开发本地调试微信网页授权

热门文章

  1. 根据位图文件头,求BMP文件大小
  2. 全球关注 这个夏天世界劲刮“青奥风”
  3. mistral 工作流组件之二 思维导图
  4. 偶然性不可重现BUG怎么处理?
  5. C语言计算赤道周长,地球赤道周长是多少
  6. ahua(大华面试题原题+详解)
  7. mysql kill 无效_mysql kill不生效?
  8. Linux QQ(Ubuntu系、Debian系、红帽系、Arch Linux系)
  9. Android中DatePicker只显示年月的方法
  10. Ajax post sql注入,cmseasy前台无需登录直接获取敏感数据的SQL注入(有POC证明)