运维管理 ·

Linux 下部署 sersync+rsync 数据自动同步备份

一、为什么要用rsync+sersync架构?

1、sersync是基于inotify开发的,类似于inotify-tools的工具

2、sersync可以记录下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或者某一个目录的名字,然后使用rsync同步的时候,只同步发生变化的文件或者目录

二、rsync+inotify-tools与rsync+sersync架构的区别?

1、rsync+inotify-tools

a、inotify只能记录下被监听的目录发生了变化(增,删,改)并没有把具体是哪个文件或者哪个目录发生了变化记录下来;

b、rsync在同步的时候,并不知道具体是哪个文件或目录发生了变化,每次都是对整个目录进行同步,当数据量很大时,整个目录同步非常耗时(rsync要对整个目录遍历查找对比文件),因此效率很低

2、rsync+sersync

a、sersync可以记录被监听目录中发生变化的(增,删,改)具体某个文件或目录的名字;

b、rsync在同步时,只同步发生变化的文件或目录(每次发生变化的数据相对整个同步目录数据来说很小,rsync在遍历查找对比文件时,速度很快),因此效率很高。
总结:

当同步的目录数据量不大时,建议使用rsync+inotify

当同步的目录数据量很大时(几百G甚至1T以上)文件很多时,建议使用rsync+sersync

三、sersync+rsync 安装配置

3.0.1 sersync同步逻辑图

当前版本的sersync依赖于rsync进行数据同步;

Linux 下部署sersync+rsync 实现数据实时自动同步备份

3.0.2 原理步骤:

  1. 1.  在同步服务器(work231)上开启sersync服务,sersync负载监控配置路径中的文件系统事件变化;
  2. 2.  调用rsync命令把更新的文件同步到目标服务器(work232 和work233);
  3. 3.  需要在主服务器配置sersync,在同步目标服务器配置rsync server(注意:是rsync服务)

同步原理:

1.  用户实时的往sersync服务器(work231)上写入更新文件数据;

2.  此时需要在同步主服务器(work231)上配置sersync服务;

3.  在work232 和work233上开启rsync守护进程服务,以同步拉取来自sersync服务器(work231)上的数据;

通过rsync的守护进程服务后可以发现,实际上sersync就是监控本地的数据写入或更新事件;然后,在调用rsync客户端的命令,将写入或更新事件对应的文件通过rsync推送到目标服务器(work232 和work233),如此简单;

3.0.3 安装环境准备

A.系统资源列表

角色 IP 机器名
sersync服务 192.168.99.231 work231
rsync服务 192.168.99.232 work232
rsync服务 192.168.99.233 work232

B.检查系统环境

四、配置同步服务器

4.0.1.部署rsync服务,在work231 work232 work233上部署rsync和xinetd服务
4.0.2.安装xinetd服务来管理rsync服务

xinetd管理rsync服务工作原理

 4.0.3. 编辑配置文件,设置rsync执行路径

[root@work231 ~]# vim /etc/xinetd.d/rsync

disable = yes   改为:

disable = no
server          = /usr/bin/rsync  改为:
server          = /webserver/rsync/bin/rsync

 4.0.4. rsync监听端口873添加到/etc/services服务里

       rsync           873/tcp                         # rsync
       rsync           873/tcp                         # rsync

 4.0.5. 升级rsync到3.1.2版本

rsync version 3.0.6 protocol version 30
Copyright (C) 1996-2009 by Andrew Tridgell, Wayne Davison, and others.

  4.0.6. 创建 rsyncd.conf 配置文件

rsyncd.mod 文件不存在,客户端登陆之后弹出的消息,需要创建

#++++++++++++++++++++++++++++++++++++++++++++++

   Welcome to use the fooher.com rsync services!

#++++++++++++++++++++++++++++++++++++++++++++++

配置文件详细说明,请查看 Linux下使用 rsync+inotify 实现同步服务器数据自动备份 文章

特别提示: work232,work233的机器 同时部署上述服务;

上面rsync服务的配置文件,表面允许sersync主服务器(ip:192.168.99.231)访问rsync同步模块名为[www][bbs][blog] 将同步过来的文件分别放入对应的path指定的目录/data/{www,bbs,blog}下面; 如果有多台目标服务器,则每一台都需要进行类似的rsync服务配置,上面的uid、gid要换成您服务器的相应的同步用户;注意,rsync服务账户(本文用的是root)要有对被同步目录(/data/)的写入更新权限;

 7. 创建rsync同步密码文件,并设置权限为 600

-rw------- 1 root root 26 May 27 16:24 /webserver/rsync/etc/rsyncd.secrets

对应的用户名和密码内容如下:

wwwfoohercom:wwwfoohercom
bbsfoohercom:bbsfoohercom
blogfoohercom:blogfoohercom

8. 启动守护进程,并写入开机自启动

tcp        0      0 0.0.0.0:873                 0.0.0.0:*                   LISTEN      10702/rsync

        COMMAND   PID     USER   FD   TYPE    DEVICE    SIZE/OFF    NODE NAME

        rsync   10702      root    3u  IPv4       20793             0t0     TCP *:rsync (LISTEN)

 9. 添加 873 端口到防火墙

10. 创建同步的目录

提示: 此步骤在work232,work233都要执行,否则rsync serync 服务会因为没有PATH路径而无法启动

11. 在work231上配置rsync客户端,生成 bbs.password ,blog.password,www.password 密码文件

 12. 在work231上手工测试rsync同步情况

特别提示:此步非常关键,如果测试不成功,后面的sersync配好了也不会同步数据;

根据不同的需求同步对应的实例文件,执行同步命令

13. 推送的命令是在 work231端(也就是 sersync服务器上)操作的,同步后查看work232,work233

[root@work232 etc]# tree /data/
/data/
├── bbs
│ └── bbs.log
├── blog
│ └── blog.log
└── www
└── www.log

五、在 work231 上开始部署sersync服务

5.0.1. 下载sersync

在google code下载sersync的可执行文件版本,里面有配置文件与可执行文件,这用

5.0.2 配置多个confxml.xml文件(比如:www、bbs、blog....等等)

5.0.3. 下载sersync更改优化sersync配置文件:

a) 修改24--28行,默认内容如下:

分别修改后的对应文件内容为:

b)修改31--34行,认证部分【rsync密码认证】

默认内容如下:

修改后的内容如下:

c)修改37行,默认内容如下:

修改后的内容如下:

修改后的完整sersync服务配置文件参数详解:

5.0.4. 开启sersync守护进程同步数据

5.0.5. 多实例初始化同步命令

5.0.6. 配置开机启动,修改 rc.local

5.0.7. 添加脚本监控sersync是否正常运行:

#!/bin/sh
sersync2="/webserver/rsync/bin/sersync2"
www="/webserver/rsync/etc/www_confxml.xml"
bbs="/webserver/rsync/etc/bbs_confxml.xml"
blog="/webserver/rsync/etc/blog_confxml.xml"
status=$(ps aux |grep 'sersync2'|grep -v 'grep'|wc -l)
if [ $status -eq 0 ];
then
${sersync2} -d -r -o ${www} &
${sersync2} -d -r -o ${bbs} &
${sersync2} -d -r -o ${blog} &
else
exit 0;
fi

5.0.8. 设置计划任务每分钟检查一次:

*/5 * * * * root /webserver/rsync/etc/check_sersync.sh > /dev/null 2>&1

5.0.9. 压测:写入10K个文件批量同步测试结果:

提示:我们发现本地已经写完了10000个,但是同步的线程,依然在同步;甚至才同步了1000多个,work232 work231 同步同步时可以用 du 对比命令查看 du /data/wwwroot

六、sersync2 命令参数说明

Sersync参数 说明
 

./sersync -r

-r参数作用是:开启实时监控的之前对主服务器目录与远程目标机器的目录进行一次整体同步;如果需要将sersync运行前,主服务器目录下已经存在的所有文件或目录全部同步到远端,则要以 -r参数运行sersync,将本地与远程整体同步一次;

提别说明:如果设置了过滤器,即在xml文件中,filter为true,则暂时不能使用-r参数进行整体同步;

 

./sersync -o xx.xml

不指定 -o参数: sersync使用sersync可执行文件目录下的默认配置文件confxml.xml

指定 -o 参数:可以指定多个不同的配置文件,从而实现sersync多进程多实例的数据同步

 

./sersync -n num

-n参数为:指定默认的线程池的线程总数;

例如: ./sersync -n 5 则指定线程总数为5,如果不指定,默认启动线程池数量是10,如果cpu使用过高,可以通过该参数调低,如果机器配置较高,可以调高默认的线程总数,提升同步效率;

./sersync -d -d参数为:后台服务,通常情况下使用 -r参数对本地到远端整体同步一遍后,在后台运行此参数启动守护进程实时同步;在第一次整体同步时,-d 和 -r参数经常会联合使用;
./sersync -m

pluginName

-m参数:不进行同步,只运行插件 ./sersync -m pluginName

例如:./sersync -m command,则在监控到事件后,不对远程目标服务器进行同步,而是直接运行command插件

组合命令使用说明:
-n 8 -o liubl.xml -r -d 多个参数可以配合使用,例如:./sersync -n 16 -o config.xml -r -d 表示设置线程池工作线程为16个,指定liubl.xml作为配置文件,在实时监控前 做一次整体同步,以守护进程方式在后台运行;
./sersync --help 很遗憾,它没有查看帮助(需要的话2条路,要么看源代码,要么自测求验证)

对于大多数应用,可以尝试把createFile(监控文件事件选项)设置为false来提高性能,减少rsync通讯;

因为拷贝文件到监控目录会产生create事件与close_write事件,所以如果关闭create事件,只监控文件拷贝结束时的时间close_write,同样可以实现文件完整同步;

注意:强将creatFolder保持为true,如果将createFolder设为false,则不会对产生的目录进行监控,该目录下的子文件与子目录也不会被监控;所以除非特殊需要,请开启; 默认情况下对创建文件(目录)事件与删除文件(目录)事件都进行监控,如果项目中不需要删除远程目标服务器的文件(目录),则可以将delete参数设置为false,则不对删除事件进行监控。

关注运维天涯微信、新浪微博

评论已关闭