rsync+sersync+inotify实现服务器间文件同步之一:rsync安装配置
2013年12月14日 ⁄ Linux管理服务器集群技术 ⁄ 共 4925字 ⁄ rsync+sersync+inotify实现服务器间文件同步之一:rsync安装配置已关闭评论 ⁄ 被围观 2,720 views+

一、概述

前面讲了很多集群的内容,集群间服务器实现数据的同步一直是一个问题,比如一个lvs集群中,如果有上百台RS服务器,当更新Web程序时,如何在这么多台服务器间进行快速的更新,这是一个问题,如果使用手动更新,或者scp等命令,明显是不可取的。因此,今天介绍这样一组工具实现这样的应用,后面也会讲到puppet等工具的使用。

1.1 什么是rsync?

rsync是Unix下的一款应用软件,它能同步更新两处计算机的文件与目录,并适当利用差分编码以减少数据传输。rsync中一项与其他大部分类似程序或协议中所未见的重要特性是镜像对每个目标只需要一次传送。rsync可拷贝/显示目录属性,以及拷贝文件,并可选择性的压缩以及递归拷贝。 
在常驻模式(daemon mode)下,rsync默认监听TCP端口873,以原生rsync传输协议或者通过远程shell如RSH或者SSH伺服文件。SSH情况下,rsync客户端运行程序必须同时在本地和远程机器上安装。

1.2 什么是sersync?

sersync主要用于服务器同步,web镜像等功能。基于boost1.43.0,inotify api,rsync command.开发。目前使用的比较多的同步解决方案是inotify-tools+rsync ,另外一个是google开源项目Openduckbill(依赖于inotify- tools),这两个都是基于脚本语言编写的。相比较上面两个项目,本项目优点是: 
sersync是使用c++编写,而且对linux系统文件系统产生的临时文件和重复的文件操作进行过滤(详细见附录,这个过滤脚本程序没有实现),所以在结合rsync同步的时候,节省了运行时耗和网络资源。因此更快。

1.3 什么是inotify?

inotify是Linux核心子系统之一,做为文件系统的附加功能,它可监控文件系统并将异动通知应用程序。本系统的出现取代了旧有Linux核心里,拥有类似功能之dnotify模块。inotify的原始开发者为John McCutchan、罗伯特·拉姆与Amy Griffis。于Linux核心2.6.13发布时(2005年六月十八日),被正式纳入Linux核心。尽管如此,它仍可通过补丁的方式与2.6.12甚至更早期的Linux核心集成。

因此,利用inotify的文件系统更改通知功能,结合rsync和sersync等工具,就能很好的实现当主服务器文件变动后能及时更新到其他服务器。

1.4 单纯使用rsync和使用serync+rsync的区别:

使用rsync+crontab做定时同步时,主服务器端开启rsync守护进程,而镜像服务器是运行rsync客户端,平时一般会利用crontab定时获取rsync服务器上的数据。 
但使用rsync+sersync做实时同步时,用于推送文件的服务器运行sersync服务,用于接收文件的服务器则运行rsync守护进程,简单来说就是sersync会利用rsync命令将文件推送到rsync服务器,实际线上使用一般会把sersync作为主服务器,rsync作为镜像服务器,实现数据同步备份,web镜像等功能。

二、安装和使用rsync

2.1 rsync的安装

每个镜像服务器(需要同步的服务器)都需要安装rsync守护进程。

一般发行版都带有rsync,因此我这里直接使用yum安装。当然在很多发行版上默认已经安装了rsync。

[root@web1 ~]# yum install rsync

[root@web1 ~]# rpm -ql rsync 
/etc/xinetd.d/rsync 
/usr/bin/rsync 
/usr/share/doc/rsync-3.0.6 
/usr/share/doc/rsync-3.0.6/COPYING 
/usr/share/doc/rsync-3.0.6/NEWS 
/usr/share/doc/rsync-3.0.6/OLDNEWS 
/usr/share/doc/rsync-3.0.6/README 
/usr/share/doc/rsync-3.0.6/support 
/usr/share/doc/rsync-3.0.6/support/Makefile 
/usr/share/doc/rsync-3.0.6/support/atomic-rsync 
/usr/share/doc/rsync-3.0.6/support/cvs2includes 
/usr/share/doc/rsync-3.0.6/support/deny-rsync 
/usr/share/doc/rsync-3.0.6/support/file-attr-restore 
/usr/share/doc/rsync-3.0.6/support/files-to-excludes 
/usr/share/doc/rsync-3.0.6/support/git-set-file-times 
/usr/share/doc/rsync-3.0.6/support/logfilter 
/usr/share/doc/rsync-3.0.6/support/lsh 
/usr/share/doc/rsync-3.0.6/support/mnt-excl 
/usr/share/doc/rsync-3.0.6/support/munge-symlinks 
/usr/share/doc/rsync-3.0.6/support/rrsync 
/usr/share/doc/rsync-3.0.6/support/rsyncstats 
/usr/share/doc/rsync-3.0.6/support/savetransfer.c 
/usr/share/doc/rsync-3.0.6/tech_report.tex 
/usr/share/man/man1/rsync.1.gz 
/usr/share/man/man5/rsyncd.conf.5.gz

rsync是由超级守护进程xinetd来启动的。因此需要启动xinetd服务。

2.2 配置rsync服务器

rsync服务器主要有三个配置文件:rsyncd.conf,rsyncd.secrets和rsyncd.motd,而rsync安装后并没有自动创建相关配置文件,因此我们还需手动创建:

[root@web1 ~]# mkdir /etc/rsyncd  ##创建配置目录 
[root@web1 ~]# touch /etc/rsyncd/rsyncd.conf  ##创建主配置文件 
[root@web1 ~]# touch /etc/rsyncd/rsyncd.secrets  ##创建用户密码文件 
[root@web1 ~]# chmod 600 /etc/rsyncd/rsyncd.secrets ##修改用户密码文件 
[root@web1 ~]# touch /etc/rsyncd/rsyncd.motd   ##创建定义服务器信息的文件

编辑主配置文件:

[root@web1 ~]# vi /etc/rsyncd/rsyncd.conf

# Minimal configuration file for rsync daemon 
# See rsync(1) and rsyncd.conf(5) man pages for help

# This line is required by the /etc/init.d/rsyncd script 
pid file = /var/run/rsyncd.pid 
port = 873   ##监听端口 
address = 192.168.204.129  ##监听地址 
#uid = nobody 
#gid = nobody   
uid = root 
gid = root

use chroot = yes   ##是否限制在指定目录,为了安装,一般需要启用 
read only = no

#limit access to private LANs 
hosts allow=192.168.204.0/255.255.255.0   ##允许网段 
hosts deny=*

max connections = 5 
motd file = /etc/rsyncd/rsyncd.motd

#This will give you a separate log file 
#log file = /var/log/rsync.log

#This will log every file transferred - up to 85,000+ per user, per sync 
#transfer logging = yes

log format = %t %a %m %f %b 
syslog facility = local3 
timeout = 300

##定义一个同步目录

[webhome] 
path = /var/www/html 
list=yes 
ignore errors 
auth users = apache 
secrets file = /etc/rsyncd/rsyncd.secrets  ##指定上述账号密码文件 
comment = web home

exclude =   data/   ##排除目录

编辑/etc/rsyncd/rsyncd.secrets文件:

[root@web1 ~]# vi /etc/rsyncd/rsyncd.secrets

apache:password123

##注意,这个账号是系统账号,但没有使用系统账号的密码,而是自定义密码

重启使rsync生效:

[root@web1 ~]# /usr/bin/rsync --daemon  --config=/etc/rsyncd/rsyncd.conf

设置为开机启动:

[root@web1 ~]# echo "/usr/bin/rsync --daemon  --config=/etc/rsyncd/rsyncd.conf" >> /etc/rc.d/rc.local

2.3 使用rsync客户端实现数据同步

客户端安装同上,额外只需配置一个密码文件,具体如下:

[root@web2 ~]# mkdir /etc/rsyncd  ##创建配置目录 
[root@web2 ~]# echo “passowd123”> /etc/rsyncd/rsyncd.password  ##创建密码文件,密码为服务器端rsyncd.secrets文件中的密码。

[root@web2 ~]# chmod 600 /etc/rsyncd/rsyncd.password

同步:

[root@web2 ~]# rsync -avzP --delete  --password-file=/etc/rsyncd/rsyncd.password apache@web1::webhome /var/www/html/

receiving incremental file list 
./ 
index.html 
          22 100%   21.48kB/s    0:00:00 (xfer#1, to-check=1/3) 
newpage.html 
          26 100%    0.63kB/s    0:00:00 (xfer#2, to-check=0/3)

sent 100 bytes  received 264 bytes  728.00 bytes/sec 
total size is 48  speedup is 0.13

说明:

--delete:本地与服务器完全一样,如果本地存在不一样的,则删除,慎用

--password-file:指定密码文件,如果不指定,则需手动输入

-a :参数,相当于-rlptgoD,-r 是递归 -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件; 
-z :传输时压缩; 
-P :传输进度; 
-v :传输时的进度等信息

apache@web1::webhome  用双冒号引用主配置文件中的定义资源,也可以使用单引号跟绝对路径

以后同步时,只会同步新增内容。

最后将上述命令加入计划任务定时同步即可。

可能存在的问题:

  1. 防火墙端口开发问题:iptables -A INPUT -p tcp -m state --state NEW  -m tcp --dport 873 -j ACCEPT
  2. 权限问题,需要写权限

rsync+sersync+inotify实现服务器间文件同步之一的更多相关文章

  1. 使用rsync实现不同Linux服务器间目录同步

    实现目标:    A 服务器上 /opt/web 目录,与B服务器上 /opt/web目录实现同步.即:B主动与A进行同步.   OS: Reaht AS4   A Server  192.168.1 ...

  2. 使用inotify+rsync实现服务器间文件同步

      1. rsync 1.1 什么是rsync   rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.它使用所谓的“Rsync演算法”来使本地和远程两个主机之间的文件达到 ...

  3. C#实现服务器间文件同步

    using System.IO; /// <summary> /// 远程登陆服务器 /// </summary> /// <param name="remot ...

  4. windows服务器间文件同步搭建步骤搜集

    Rsync https://www.cnblogs.com/janas/p/3321087.html https://yq.aliyun.com/ziliao/110867 subersion协议 h ...

  5. linux系统中rsync+inotify实现服务器之间文件实时同步

    最近需要对服务器上的文件实施动态备份,我又不想每次都手动来进行备份,在网上找了挺多资料,发现使用rsync就可以实现,如果想要实现实时同步,还可以使用rsync+inotify组合,本文就是以组合方式 ...

  6. rsync+inotify实现服务器之间文件实时同步--转

    之前做了“ssh信任与scp自动传输脚本”的技术文档,此方案是作为公司里备份的方法,但在实际的运行中,由于主服务器在给备份服务器传输的时候,我们的主服务器需要备份的文件是实时.不停的产生的,造成不知道 ...

  7. centos6.5 rsync+inotify实现服务器之间文件实时同步

    1. rsync的优点与不足 与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据 ...

  8. linux下rsync+inotify实现服务器之间文件实时同步

    先介绍一下rsync与inotify. 1.rsync 与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例 ...

  9. Linux服务器间文件实时同步的实现

    使用场景 现有服务器A和服务器B,如果服务器A的指定目录(例如 /home/paul/rsync/ )中的内容发生变更(增删改和属性变更),实时将这些变更同步到服务器B的目标目录中(例如 /home/ ...

随机推荐

  1. Ubuntu下实现gedit支持nesC语法高亮

    在TinyOS下主要采用nesC语言(C语言的一个变种)编程,ubuntu系统默认打开文本的工具是gedit,为实现gedit支持nesC语法高亮,将最下面的代码保存为nesC.lang文件,然后将n ...

  2. kafka配置简要描述

    配置文件在config/server.properties 下面的一些配置可能是你需要进行修改的. 这里为官方提供配置文件解释:https://kafka.apache.org/08/configur ...

  3. pdo不抛出异常

    $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);

  4. Java 中转换为String类型的四种方法

    1. 使用 String 的构造方法,用于 byte[], char[], StringBuffer, StringBuilder 类型 2. 使用 String 的静态方法 valueOf() 推荐 ...

  5. Java 线程池 Executor 框架

    在Java中,可以通过new Thread 的方法来创建一个新的线程执行任务,但是线程的创建是非常耗时的,而且创建出来的新的线程都各自运行.缺乏统一的管理,这样的后果是可能导致创建过多的线程从而过度消 ...

  6. Subarray Sum Equals K LT560

    Given an array of integers and an integer k, you need to find the total number of continuous subarra ...

  7. 【UI测试】--美观与协调性

  8. HDU - 5658

    题意:给你一个字符串,给你Q次询问,每一次问你从l-r里有多少个回文串. 思路:len很小,所以直接遍历区间求就好了. /* gyt Live up to every day */ #include& ...

  9. dfs序理解-hdu3887

    dfs序就是相当于把树转化成了一个区间,在区间上进行操作. void dfs(int u, int fa) { l[u]=++key; ; i=e[i].next) { int v=e[i].v; i ...

  10. MySQL正则表达式 REGEXP详解

    在开始这个话题之前我们首先来做一个小实验,比较一下REGEXP和Like他们两个哪个效率高,如果效率太低,我们就没有必要做过多的研究了,实验的代码如下:<?phpRequire("co ...