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

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

公司的电脑是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

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/d4882998adefbfb3edb7a103e4e2af31.html