阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

使用rsync进行主机间数据同步

453次阅读
没有评论

共计 5009 个字符,预计需要花费 13 分钟才能阅读完成。

前言

首先,还是先提一下我使用数据同步的一个背景:

公司的电脑是 windows 7 系统,一般程序开发在本地机器进行,代码开发完之后,需要同步到远程 linux 编译机上编译。

之前使用 eclipse 时的同步方案:通过 samba 将 linux 主机的项目目录映射到 windows 主机的一个系统盘 J 上,然后通过一个 eclipse 的数据同步插件将本地项目目录同步到系统盘 J 上。

后面通过 Babun(《在 Windows 上使用 Babun 进行 Linux 开发工作》)用上 vim 之后,没有找到数据同步的 vim 插件,于是需要寻找其他数据同步的方案。

为什么不直接在 samba 映射的目录下进行开发呢?

  • 开发目录的读写、变动比较大,直接在该目录下开发的话,由于网络原因,速度非常慢,经常出现卡死的情况。
  • 映射过来的目录是编译机上的目录,存在许多编译产生的中间文件,这些文件对开发目录来说是一个很大的负担。

总结以上,我需要的是以下的一个同步机制:

  • 开发目录与编译目录独立(也就是不能直接在 samba 映射的目录下开发);
  • 开发目录的变动同步到编译目录,而编译目录的变动不会同步带开发目录,即单向同步。

rsync

rsync,remote synchronize。顾名思意,它是一款实现远程同步功能的软件,它在同步文件的同时,可以保持原来文件的权限、时间、软硬链接等附加信息。rsync 是用“rsync 算法”提供了一个客户机和远程文件服务器的文件同步的快速方法,而且可以通过 ssh 方式来传输文件,这样其保密性也非常好。

rsync 包括如下的一些特性:

  • 能更新整个目录和树和文件系统;
  • 有选择性的保持符号链链、硬链接、文件属于、权限、设备以及时间等;
  • 对于安装来说,无任何特殊权限要求;
  • 对于多个文件来说,内部流水线减少文件等待的延时;
  • 能用 rsh、ssh 或直接端口做为传输入端口;
  • 支持匿名 rsync 同步文件,是理想的镜像工具;

rsync 安装与配置

首先可以先看看你的系统中是否已经安装了 rsync:

$ rsync

如果没有安装的话,可通过包管理器或者源码安装。

安装完毕之后,就是软件的配置了。

下面我们假设:

  • 主服务器端(master),向从服务器端(slave)同步数据;
  • master 端 IP 地址:192.168.1.39(模块名为 node1);
  • slave 端 IP 地址:192.168.1.40 (模块名为 node2)。

master 配置

由于是单向同步,所以 master 不需要做特殊的配置,只要安装 rsync 就可以了。

slave 配置

在 /etc 目录下创建 rsyncd.conf,配置如下:

uid = root 
gid = root 
pid file = /var/run/rsyncd.pid  #pid 文件的存放位置 
lock file = /var/run/rsync.lock # 锁文件的存放位置 
log file = /var/log/rsyncd.log  # 日志记录文件的存放 

[node2]                         # 模块名字,自己命名 
path = /data/node2              # 指定文件目录所在位置,这是必须指定 
read only = no
list = no                       # 是否把 rsync 服务器上提供同步数据的目录显示 
hosts allow = 192.168.1.39      # 允许访问的主机 
hosts deny = *                  # 拒绝访问的主机 

这是比较简单的配置,如果需要认证,则需要指定 rsync.passwd 文件。

测试

启动 rsync:

$ mkdir -p /data/node2 
$ rsync --daemon 
$ ps -ef | grep rsync| grep -v "grep" 
root      1723    1  0 22:17 ?        00:00:00 rsync --daemon 
$ netstat -anpt | grep rsync 
tcp        0      0 0.0.0.0:873                0.0.0.0:*                  LISTEN      1723/rsync          
tcp        0      0 :::873                      :::*                        LISTEN      1723/rsync

在 slave 上创建同步目录:

$ cd /data/node2/ 
$ echo "123456">a.txt 
$ echo "abcd">b.txt  
$ cat a.txt b.txt  
123456 
abcd 

在 master 上创建同步目录,并将 slave 上的 node2 模块同步到 /data/node1/ 目录下:

$ mkdir -p /data/node1 
$ rsync -avzP 192.168.1.40::node2 /data/node1/ 
receiving incremental file list 
./ 
a.txt 
          7 100%    6.84kB/s    0:00:00 (xfer#1, to-check=1/3) 
b.txt 
          5 100%    0.12kB/s    0:00:00 (xfer#2, to-check=0/3) 

sent 68 bytes  received 180 bytes  23.62 bytes/sec
total size is 12  speedup is 0.05 
$ cd /data/node1/ 
$ ls 
a.txt  b.txt 
$ cat a.txt b.txt  
123456 
abcd

以上是将 slave 的 node2 模块对应的目录同步到 master 的目录下,如果要将 master 的目录同步到 slave 的 node2 模块对应的目录下,则使用以下命令:

$ rsync -avzP /data/node1/ 192.168.1.40::node2

以上完成后,我们就可以进行同步了,为了方便,我们可以把同步命令写成一个脚本。rsync 有一些配置参数,可以直接输入命令 rsync 来查看。比如–delete 选项表示,会同步删除的文件,比如源主机没有文件 a,而目标主机有,则文件 a 将会从目标主机上删除。

如果你不需要实时性,则可以在每次需要同步的时候,手动运行一下该脚本。

如果你需要实时性,但不需要特别强,则可以使用 crontab 设置一个定时任务来自动同步。

如果你需要很强的实时性,则需要 inotify 的支持。

inotify

使用 inotify 之后,只要文件有任何变动,就会触发 inotify,因此 inotify 基本可以达到实时的效果。

inotify 是一个 Linux 内核特性,它监控文件系统,并且及时向专门的应用程序发出相关的事件警告,比如删除、读、写和卸载操作等。

inotify 安装完成之后会有两个命令,inotifywait 和 inotifywatch。inotifywait 用于等待文件或者文件集上的一个特定事件,可以监控任何文件或者目录位置,并且可以递归地监控整个目录树;inotifywatch 用于收集被监控的文件系统统计数据,包括每个 inotify 事件发生多少次等信息。

安装

$ cd /tmp  
$ wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz --no-check-certificate  
$ tar zxvf inotify-tools-3.14.tar.gz  
$ cd inotify-tools-3.14  
$ ./configure&&make&&make install  


$ ln -sv /usr/local/lib/libinotify* /usr/lib/  
$ ln -s /usr/local/lib/libinotifytools.so.0 /usr/lib64/libinotifytools.so.0  

以上安装的是 linux 版本的,如果你是 windows 系统,可以安装 inotify-win(https://github.com/thekid/inotify-win)。

编写测试脚本

#!/bin/bash  

src=/tmp/test/  # directory to monitor  
/usr/local/bin/inotifywait -rmq -e modify $src |  while read  event  
do  
echo "hello" >> 1.txt  
done  

做成开机启动

$ chmod u+x /tmp/mon.sh  
$ echo "nohup /bin/bash /tmp/mon.sh &" >> /etc/rc.d/rc.local  
$ nohup /bin/bash /tmp/mon.sh &  

这时候只要 /tmp/test/ 一有改动,就会触发 inotifywait,运行 echo 命令。

同步脚本

#!/bin/bash 
host=192.168.1.40 
data_dir=/data/node1/
dst=node2 
/usr/local/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $data_dir | while read files 
do
  #rsync -avzP $host::$dst $data_dir 
  rsync -avzP --delete --progress $data_dir $host::$dst 
  echo "${files} was rsynced" >> /tmp/rsync.log 2>&1  
done

以上让 inotifywait 监听 /data/node1/ 目录,当监听到有发生 modify,create,delete,attrib 等事件发生时,按 %T %w%f%e 的格式输出。

inotifywait 的输出结果,作为 while read files 的输入。这里的脚本比较粗糙,因为每次有文件改动,inotifywait 就会输出一行,改行表示有改动的文件。之后执行 do 和 done 之间的操作,调用 rsync 进行同步(全目录扫描,而不是只同步单个文件)。因此如果有 10 个文件改动,rsync 将会被调用 10 次,从而造成性能上的损耗。因此对于有兴趣的同学,可以想想如何优化这个脚本,以获得更高的同步性能。

$ chmod u+x inotify_rsync.sh  
$ bash inotify_rsync.sh & 
[1] 4533 
$ ps -ef | grep inoti | grep -v "grep" 
root      4533  1880  0 18:02 pts/1    00:00:00 bash inotify_rsync.sh 
root      4534  4533  0 18:02 pts/1    00:00:00 /usr/local/bin/inotifywait -mrq --timefmt %d/%m/%y %H:%M --format %T %w%f%e -e modify,delete,create,attrib /data/node1/
root      4535  4533  0 18:02 pts/1    00:00:00 bash inotify_rsync.sh

inotifywait 的一些参数可能根据系统有所不同,请通过 inotifywait 命令查阅下相关参数及其意义。

总结

rsync 为我们提供了一个很好的文件同步方案,在不同的应用场景下,我们对实时性的要求不一,因此可以根据自己的需要选择对应的同步方式。在大多数情况下 rsync+inotify 是足够了的,当然,当同步的文件比较大的时候,可以选择 lsyncd 等更合适的方案。

RSync 实现文件备份同步详解   http://www.linuxidc.com/Linux/2014-09/106967.htm

利用 inotifywait 监控主机文件和目录 http://www.linuxidc.com/Linux/2013-03/81075.htm

利用 inotify+rsync 实现 Linux 文件批量更新 http://www.linuxidc.com/Linux/2012-01/52132.htm

inotify-tools+rsync 实时同步文件安装和配置 http://www.linuxidc.com/Linux/2012-06/63624.htm

rsync 同步完整配置 http://www.linuxidc.com/Linux/2013-06/85781.htm

CentOS 6.5 下 Rsync 远程同步 http://www.linuxidc.com/Linux/2014-05/101084.htm

Linux 文件夹对比并提取的差分文件技巧 -rsync 的妙用 http://www.linuxidc.com/Linux/2016-02/128307.htm

Rsync 的详细介绍 :请点这里
Rsync 的下载地址 :请点这里

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-11/136819.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计5009字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19350
评论数
4
阅读量
7956490
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装Black群晖DSM7.2系统安装教程(在Vmware虚拟机中、实体机均可)!

安装 Black 群晖 DSM7.2 系统安装教程(在 Vmware 虚拟机中、实体机均可)! 前言 大家好,...
12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换,告别多工具切换

12.2K Star 爆火!开源免费的 FileConverter:右键一键搞定音视频 / 图片 / 文档转换...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

4盘位、4K输出、J3455、遥控,NAS硬件入门性价比之王

  4 盘位、4K 输出、J3455、遥控,NAS 硬件入门性价比之王 开篇 在 NAS 市场中,威...
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
150元打造低成本NAS小钢炮,捡一块3865U工控板

150元打造低成本NAS小钢炮,捡一块3865U工控板

150 元打造低成本 NAS 小钢炮,捡一块 3865U 工控板 一块二手的熊猫 B3 工控板 3865U,搭...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞定

多服务器管理神器 Nexterm 横空出世!NAS/Win/Linux 通吃,SSH/VNC/RDP 一站式搞...
自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个AI智能体—跟创业大佬对话

自己手撸一个 AI 智能体 — 跟创业大佬对话 前言 智能体(Agent)已经成为创业者和技术人绕...