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

2023-11-18

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 firewalld
	Removed 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.log
	pidfile = /var/run/rsyncd.pid
	lock file = /var/run/rsync.lock
	secrets file = /etc/rsync.password

	[sync_from_cm3]
	        path = /etc/nginx/default.d/
	        comment = sync nginx config file from cm3
	        uid = root
	        gid = root
	        port = 873
	        ignore errors
	        use chroot = no
	        read only = no
	        list = no
	        max connections = 200
	        timeout = 600
	        auth users = root
	        hosts allow = 192.168.1.83
	        hosts deny = 192.168.1.1


	//配置用户认证文件
	[root@cm2 ~]# vim /etc/rsync.password
	[root@cm2 ~]# cat /etc/rsync.password
	root: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.password
	gmg_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
do
	rsync -avzP --delete  --timeout=100 --password-file=${password} $src $user@$host::$des
	echo "rsync -avzP --delete  --timeout=100 --password-file=${password} $src $user@$host::$des" >> /tmp/rsync.log
	echo "${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/


 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐

  • Mac上亲测好用的BlueStacks蓝叠安卓模拟器

    bluestacks mac是一款基于macOS系统打造的安卓模拟器 其优秀的稳定性 良好的兼容性一直是玩家的模拟器的首选哦 BlueStacks 4 for mac使Mac用户能够在他们的Mac上下载并享受他们喜欢的Android应用程序
  • vs2019运行asp.net framework(c# 基础) 排课系统的完整步骤

    前言 没想过有朝一日还会学net 毕竟java太强了 但因为特殊需要 还是学了一下net 发现她两真的好像呀 源码仓库 https gitee com web paul scheduling system 前期准备 vs2019 需要asp
  • Handler和Controller的区别

    以前一直以为这两个概念貌似是没有太大的区别 调研发现还是有一些区别的 Handler HandlerMapping接口实现从URL映射到请求处理程序bean 支持映射到bean实例和bean names Controller Base Co
  • 2021-08-10基于人脸识别的学生签到系统

    这是这学期web前端开发的大作业 因为要考研时间有限 很多功能只是先把页面做好了 没事实现和数据库的连接 用的数据大多数是在json中存储的 需求分析 一 教师端 功能需求 1登录 数据需求 用户名 密码 邮箱号 2能够管理课程 增加 删除
  • string16类型转string

    std string WChar2Ansi LPCWSTR pwszSrc int nLen WideCharToMultiByte CP ACP 0 pwszSrc 1 NULL 0 NULL NULL if nLen lt 0 retu
  • android 屏幕适配(亲测最兼容方便)

    Android屏幕适配有很多方式 1 设置屏幕固定尺寸适配 例如适配1280x720 只适合少量固定屏幕的设备 2 百分比布局 开发中多了很多代码 3 通过密度值px转dp来适配 方便兼容 基本准确 4 通过修改系统密度值适配 例如抖音适配
  • 【Linux】定时任务crontab/at

    在linux系统中定时任务常用两个命令crontab及at命令 两者区别在于crontab用于设置循环定时任务 即每隔一定时间或固定时间后启动对应任务命令 at用于设置一次性定时任务 在任务完成后定时任务即删除 1 crontab命令 1
  • 【送书活动】借助ChatGPT和Python,轻松实现办公自动化✨

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 React从入门到精通 前端炫酷代码分享 从0到英雄 vue成神之路 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架
  • malloc和strcpy,入门的指针面试题

    指针是C和C 编程语言中一个重要的概念 因此在面试以及工作中经常会涉及到指针相关的问题 现在列举几个比较基础问题 一 void getMemory char p p char malloc 100 void test void char s
  • 【使用Excel批量修改文件名称——超详细教程——无需复杂操作;bat,ren指令】

    基本指令 bat concatenate concatenate 该公式用于给新文件名名称添加后缀 ren公式 ren A2 B2 要注意的是ren后边有一个空格 后边有一个空格 此公式用于合并旧文件与新文件名称 操作步骤 首先创建一个文本
  • C语言 函数 下

    函数的定义 如果函数的定义在main函数之后 函数要在main函数前先进行声明 写一个函数完成两个整数的相加 int Add int a int b 函数的声明 int main printf 请您输入a b的值 int a 0 int b
  • Python入门---初识

    Python简介 Python的历史 1989年圣诞节 Guido von Rossum开始写Python语言的编译器 1991年2月 第一个Python编译器 同时也是解释器 诞生 它是用C语言实现的 后面 可以调用C语言的库函数 在最早
  • python入门教程(非常详细)

    Python是一种高级 解释性的脚本语言 其简单易学 灵活 强大等特点 使其成为了当代最流行的编程语言之一 如果您是想学习Python编程的新手 以下是详细的Python入门教程 以帮助您快速掌握Python编程基础 1 安装Python
  • STM32 基础系列教程 50 – MbedTls

    前言 mbed TLS 以前称为PolarSSL 是TLS和SSL协议的实现 并且需要相应的加密算法和支持代码 这是双重许可与Apache许可证 2 0版 与GPLv2许可也可 网站上指出 mbed TLS的目标是 易于理解 使用 集成和扩
  • 详解 C 语言中的弱符号与弱引用

    C语言中的 attribute weak 与 attribute weakref 引言 最近在看 linux 中一些驱动代码 驱动代码中为了实现程序的扩展性和兼容性用了很多 C 语言中的高级特性 本节就来谈一谈 C 语言中的弱符号和弱引用的
  • 机器学习在工程中使用要点

    机器学习现在有很多分支 大部分使用数据和模型优化入手 在此之前机器学习按照学派划分是有可靠的理论依据的 那么我们使用应该注意以下几点 1 如何获取训练集 一般我们下载现有的训练集为了学习或者来测试自己的算法泛化能力的表现水平 这时候我们对训
  • Java并发问题--乐观锁与悲观锁以及乐观锁的一种实现方式-CAS

    首先介绍一些乐观锁与悲观锁 悲观锁 总是假设最坏的情况 每次去拿数据的时候都认为别人会修改 所以每次在拿数据的时候都会上锁 这样别人想拿这个数据就会阻塞直到它拿到锁 传统的关系型数据库里边就用到了很多这种锁机制 比如行锁 表锁等 读锁 写锁
  • 每日站会是在浪费时间...吗?

    原文链接作者 Mark Levison 又要开站会 实在是浪费时间 打断我的工作啦 每日站会只是为ScrumMaster刷存在感而设计的 便于他微观管理 每日站会上就是汇报一下状态 而我写个邮件就行了啊 你以前听说过这些抱怨吗 我听过 不过
  • Java中获取数组长度

    Java中获取数组长度 方法 使用数组属性length来获取数组长度 代码 public class ArrayLength public static void main String args String data new Strin
  • Linux服务器之间的文件同步(单向同步:rsync+inotify)

    1 rsync简介 rsync是linux系统下的数据备份工具 支持本地复制 或者与其他SSH rsync主机同步 2 rsync的部分特性 rsync支持很多特性 可以镜像保存整个目录树和文件系统 可以很容易做到保持原来文件的权限 时间