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. 超详细的PS抠图方法

    步骤: 1.打开图片,根据图片的特点选择抠图工具: 2.在图像上找到第一个定点,要求定点要完全暴露在画布中,并且是清晰可见的顶点: 3.抠取图像时,多边形套索的定点以及边线应该向内1-2个像素,为了避 ...

  2. centos6.5虚拟机每次都要ifup eth0的解决办法

    修改文件/etc/sysconfig/network-scripts/ifcfg-eth0把ONBOOT=no改ONBOOT=yes

  3. 【密码学】轻松理解“加盐”的原理与java实现

    转自:https://blog.csdn.net/DavidHuang2017/article/details/80283469 一.什么是加盐? 1.背景 现在很多公司后台以hash值形式存储用户密 ...

  4. python学习 day3 (3月4日)---字符串

    字符串: 下标(索引) 切片[起始:终止] 步长[起始:终止:1] 或者-1 从后往前 -1 -2 -3 15个专属方法: 1-6  : 格式:大小写 , 居中(6) s.capitalize() s ...

  5. 初识kbmmw 5 中httpsys的支持

    前两天kbmmw 发布了5.0 版.里面一个非常令人兴奋的特性就是原生内部支持http.sys. 有关http.sys 的介绍及优势,我就在这里不多说了,大家可以参照一下我以前的文章. 关于http. ...

  6. Codeforces gym 102062 简要题解

    文章目录 A. Bob and BoB B. Vibranium Gift C. The Blood Moon D. Palindrome and Chocolate E. Jumpy Robot F ...

  7. 2019.01.26 codeforces 1096G. Lucky Tickets(生成函数)

    传送门 题意简述:现在有一些号码由000~999中的某些数字组成(会给出),号码总长度为nnn,问有多少个号码满足前n2\frac n22n​个数码的和等于后n2\frac n22n​个数码的和(保证 ...

  8. 2018.11.02 NOIP模拟 优美的序列(数论+单调栈/链表)

    传送门 考虑如果一个区间满足最小值等于最大公约数那么这个区间是合法的. 因此我们对于每一个点维护可以延展到的最左/右端点保证这一段区间的gcdgcdgcd等于这个点的值. 这个可以用之前同类的链表或者 ...

  9. Linux 目录说解

    目录 1.树状目录结构图 2./目录 3./etc/目录 4./usr/目录 5./var/目录 6./proc/目录 7./dev/目录 该文章主要来自于网络进行整理. 目录结构参考地址: http ...

  10. 计算误差函数的积分--erf(x)

    注意exp(-x^2-y^2) 可以拆成exp(-x^2) * exp(-y^2) 对 dx积分时,另外一个可以当常数提出到积分号外,另外 -b到b的积分看做常数提取到积分号外