基本架构

如上图所示,线程组线程是等待线程队列的守护线程,当队列中有数据的时候,线程组守护线程逐个唤醒,当队列中inotify事件较多的时候就会被全部唤醒一起工作。这样设计的目的是能够同时处理多个inotify事件,重发利用服务器的并发能力(核数*2+2)。

之所以称之为线程组线程,是因为每个线程在工作的时候,会根据服务器的数量建立子线程,子线程可以保证所有的文件与各个服务器同时同步,当要同步的文件较大的时候,这样设计可以保证各个远程服务器可以同时获得要同步的文件。

服务线程的作用有三个,首先是处理同步失败的文件,将这些文件再次同步,对于再次同步失败的文件会生成rsync_fail_log.sh脚本,记录失败的事件。同时每隔10个小时执行脚本一次,同时清空脚本。服务线程的第三个作用是crontab功能,可以每隔一定时间,将所有路径整体同步一次。

由此图总结可见:

◆sersync支持多线程;

◆支持队列过滤,节省网络带宽;

◆失败后重传机制;

◆具有socket,httpd等套接字,方便二次开发。

Sersync还具有一下机制:

◆能实现双向同步,只需要在两个机器上都配置就行了;

◆双向同步过程中,如果同事修改一个文件,则以时间为准

1 、Server端安装配置(不用启动rsync)

#wget http://sersync.googlecode.com/files/sersync2.5_32bit_binary_stable_final.tar.gz
# tar xf sersync2.5_32bit_binary_stable_final.tar.gz
# cd GNU-Linux-x86/

这里rsync使用了认证用户和密码,所以要定义一下密码文件(相当于--password-file=/etc/rsyncd/rsync.pass)

vim /etc/rsyncd/rsync.pass
123456

然后修改权限

chmod 600 /etc/rsyncd/rsync.pass

修改配置文件confxml.xml

<?xml version="1.0" encoding="ISO-8859-1"?>
<head version="2.5"><host hostip="localhost" port="8008"></host><debug start="false"/><fileSystem xfs="false"/><filter start="false"><exclude expression="(.*)\.svn"></exclude><exclude expression="(.*)\.gz"></exclude><exclude expression="^info/*"></exclude><exclude expression="^static/*"></exclude></filter><inotify><delete start="true"/><createFolder start="true"/><createFile start="false"/><closeWrite start="true"/><moveFrom start="true"/><moveTo start="true"/><attrib start="false"/><modify start="false"/></inotify><sersync><localpath watch="/data"><remote ip="192.168.1.121" name="mp3"/><!--<remote ip="192.168.8.39" name="tongbu"/>--><!--<remote ip="192.168.8.40" name="tongbu"/>--></localpath><rsync><commonParams params="-artuz"/><auth start="true" users="peep" passwordfile="/etc/rsyncd/rsync.pass"/><userDefinedPort start="false" port="874"/><!-- port=874 --><timeout start="false" time="100"/><!-- timeout=100 --><ssh start="false"/></rsync><failLog path="/tmp/rsync_fail_log.sh" timeToExecute="60"/><!--default every 60mins execute once--><crontab start="false" schedule="600"><!--600mins--><crontabfilter start="false"><exclude expression="*.php"></exclude><exclude expression="info/*"></exclude></crontabfilter></crontab><plugin start="false" name="command"/></sersync><plugin name="command"><param prefix="/bin/sh" suffix="" ignoreError="true"/>  <!--prefix /opt/tongbu/mmm.sh suffix--><filter start="false"><include expression="(.*)\.php"/><include expression="(.*)\.sh"/></filter></plugin><plugin name="socket"><localpath watch="/opt/tongbu"><deshost ip="192.168.138.20" port="8009"/></localpath></plugin><plugin name="refreshCDN"><localpath watch="/data0/htdocs/cms.xoyo.com/site/"><cdninfo domainname="ccms.chinacache.com" port="80" username="xxxx" passwd="xxxx"/><sendurl base="http://pic.xoyo.com/cms"/><regexurl regex="false" match="cms.xoyo.com/site([/a-zA-Z0-9]*).xoyo.com/p_w_picpaths"/></localpath></plugin>
</head>

2、client配置Rsync服务

首先安装rsync

yum install rsync

创建rsync的配置文件

vim /etc/rsyncd.conf

uid = root
gid = root
use chroot = noi
max connections = 300
timeout = 300
pid file =/var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
[mp3]
path = /data
read only = false
ignore errors
list = true
hosts allow = 192.168.1.0/24
hosts deny = 0.0.0.0/24
auth users = peep
secrets file = /etc/rsyncd/rsync.pass

定义密码文件

vim /etc/rsyncd/rsync.pass
peep:123456kaikaiq

开启服务

[root@node100 ~]# rsync --daemon --config=/etc/rsync.conf
[root@node100 ~]# ps -ef | grep rsync
root      3124     1  0 17:26 ?        00:00:00 rsync --daemon --config=/etc/rsync.conf
root      3130  3085  0 17:26 pts/0    00:00:00 grep rsync

如果需要将sersync运行前,已经存在的所有文件或目录全部同步到远程,要以-r参数运行sersync,将本地与远程整体同步一次。

如果设置了过滤器,即在xml文件中,filter为true,则暂时不能使用-r参数进行整体同步。-r参数将会无效

./sersync2 -r

开启服务使用以下命令

./sersync2 -d

对于sersync使用可执行文件目录下的默认配置文件confxml.xml,如果需要使用另一个配置文件,可以使用-o参数指定其它配置文件。

./sersync2 -o XXXX.xml

指定默认的线程池的线程总数

./sersync2 -n num

——————————————

拉取,即同步复制rsync server的文件至web1,web2

[root@web1 ~]#rsync -avzP --delete --progress peep@192.168.1.123::mp3 --password-file=/etc/rsyncd/rsync.pass /data

本地复制

rsync -avzP files.bz2 /tmp/

远程复制

rsync -avzP files.bz2 root@192.168.8.10:/tmp

转载于:https://blog.51cto.com/dragonball/1408364

sersync实现多台服务器实时同步文件相关推荐

  1. 使用sersync实现多台服务器实时同步文件

     一.Sersync项目介绍 项目地址:http://code.google.com/p/sersync/ 我们常用到的是rsync+inotify来对服务器进行实时同步,其中inotify用于监控文 ...

  2. 两台服务器双向同步文件,远程同步文件 两台服务器上

    远程同步文件 两台服务器上 内容精选 换一换 将文件上传至Windows云服务器一般会采用MSTSC远程桌面连接的方式.本节为您介绍本地Windows计算机通过远程桌面连接,上传文件至Windows云 ...

  3. 实现linux多台服务器间目录文件同步

    由于平台要上负载均衡,后面有4个emc节点,每次更新系统都比较麻烦,所以这里记录一下收集到的一个看着靠谱的同步方案 出处:Linux中文件实时同步 - 刘新元 - 博客园 注意:看着靠谱,暂时没有实验 ...

  4. 两台linux之间互传php脚本,linux下两台服务器实现同步的方法

    本文主要和大家分享linux下实现两台服务器实时同步方法介绍,假设两个服务器:192.168.0.1 源服务器 有目录 /opt/test/和192.168.0.2 目标服务器 有目录 /opt/ba ...

  5. Linux 两台服务器之间传输文件和文件夹

    今天处理一个项目要迁移的问题,突然发现这么多图片怎么移过去,可能第一时间想到的是先从这台服务器下载下来,然后再上传到另外一台服务器上面去,这个方法确实是可行,但是实在是太费时间了,今天我就教大家怎么快 ...

  6. linux两台服务器间复制文件scp

    换服务器或添加服务器时常会用到两台服务器之间复制文件,这个时候就可以使用scp命令. scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是 ...

  7. 使用scp把另外一台服务器上的文件夹/文件拷贝到当前服务器

    目的:把另外一台服务器上的文件夹拷贝到当前服务器上 一.复制文件夹 (1)从远端服务器将文件夹拷回当前服务器 # scp -r 远端服务器账号@IP:源目录 目标路径 scp -r cqfnenu@X ...

  8. 两台群晖服务器如何同步文件,两台群晖之间Moments异地同步方法探索

    两台群晖之间Moments异地同步方法探索 2020-07-29 21:12:05 3点赞 6收藏 3评论 手里有一黑一白两台群晖,一直在寻找两台设备之间Moments文件异地同步的方法. 因为群晖里 ...

  9. Sersync和lsyncd实现数据实时同步

    文章目录 一.实时同步概念 1. 什么是实时同步 2. 实时同步原理 3. 实时同步的场景 4. 实时同步工具 二.实时同步案例 1.环境准备 2.配置思路 3.nfs服务端配置(172.16.1.3 ...

  10. MYSQL数据库跨服务器实时同步更新实践----文献阅读(污水管网水质预测)

    文章目录 摘要 一. MYSQL 数据库主从复制,实时同步的再现 1. 1 先下载虚拟机(硬件)与lunxi系统(centos7) 1.2 在lunxi 系统安装rpm 版mysql 5.5.55 1 ...

最新文章

  1. php 转义 回车 空格 file put content,为什么在服务器上php里执行file_put_contents创建文件返回是false呢,文件目录已经设置为777的权限了,不解...
  2. python 立体图像_OpenCV-Python 立体图像的深度图 | 五十二
  3. c++学习笔记之构造函数
  4. 配置表CRMC_SORG_R3ORG在SPRO里的配置路径
  5. WebP 在减少图片体积和流量上的效果如何?—— WebP 技术实践分享
  6. Blink, 通向哈里·波特的魔法世界
  7. SFTP环境搭建及客户代码调用公共方法封装
  8. 大神干货:腾讯广告算法大赛亚军女极客生存图鉴
  9. lch 儿童围棋课堂 初级篇2 (李昌镐 著)
  10. 基于Cocos2d-x学习OpenGL ES 2.0之多纹理
  11. [UPF]理解UPF功率域和域边界
  12. 最详细的讲解过滤器,拦截器,AOP的区别
  13. PDManer数据库建模工具介绍
  14. 用Python制作我的核酸检测日历
  15. Trying to access array offset on value of type int
  16. linux学习日志,linux学习日记范文
  17. 软件测试,谱尼为网络安全护航
  18. form表单Get方式提交时,action中带参数传递不了
  19. 【虚拟机】虚拟化架构与系统部署(Windows系统安装)
  20. 小学生C++编程基础 课程20(共7题)

热门文章

  1. java打包-exe文件-最终以setup形式发布的解决之道
  2. kernel命令行参数(grub启动项参数)
  3. Android 学习JNI,用JAVA调用C
  4. 中断(一)—— 综述
  5. WifiConnectivityManager 管理扫描
  6. Linux时间子系统之一:clock source(时钟源)
  7. K - 最少拦截系统(动态规划)
  8. python默认字体_matplotlib默认字体设置
  9. 递归 非递归 遍历二叉树
  10. python以下导入包的格式错误的是_Python结合Tableau,万字长文搞定传统线下连锁店数据分析...