lsyncd实时同步工具

首先介绍一下架构

有3台app服务器,每次上线,是通过shell脚本将代码传输至app_1

然后app_1自动同步到app_2和app_3

最开始的同步策略是rsync+inotify

用了一段时间,发现有时会出现app_2和app_3没有同步代码的问题。

发现是因为inotify的shell脚本,意外终止了。

后来发现有unison,测试发现,还是要写shell脚本

再后来sersync,这个是基于rsync的,需要有rsync客户端和服务端,比较麻烦

配置文件是xml。

最后用的是lsyncd

Lysncd 实际上是lua语言封装了 inotify 和 rsync 工具,采用了 Linux 内核(2.6.13 及以后)里的 inotify 触发机制,然后通过rsync去差异同步,达到实时的效果。

完美解决了 inotify + rsync海量文件同步带来的文件频繁发送文件列表的问题 —— 通过时间延迟或累计触发事件次数实现。

有2种方法可以安装

  1. yum安装,前提是安装了epel更新源。使用命令:yum install -y lsyncd
  2. github下载,地址为:https://github.com/axkibe/lsyncd

我用的是github方式,因为版本是比yum要新一点

安装lua软件包

yum install -y lua lua-devel

解压下载的压缩包

unzip lsyncd-master.zip -d /usr/src/

进入目录

cd /usr/src/lsyncd-master/

使用cmake编译,如果没有安装cmake,可以yum安装一下

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lsyncd

make && make install

进入安装目录

cd /usr/local/lsyncd/

创建配置文件目录和日志目录

mkdir etc var

进入配置文件目录

cd etc/

编译配置文件

vim lsyncd.conf

内容如下:

settings {

--pid文件

logfile = "/usr/local/lsyncd/var/lsyncd.log",

--状态文件

statusFile = "/usr/local/lsyncd/var/lsyncd.status",

--同步模式,意思就是有更新就同步

inotifyMode = "CloseWrite or Modify",

--最大8个进程

maxProcesses = 8,

}

--需要同步服务器的IP地址池

servers = {

"192.168.74.128",

"192.168.74.129",

}

--使用for循环遍历IP池

for _, server in ipairs(servers) do

sync {

--本地目录间同步,使用rsync

default.rsync,

--同步的源目录,使用绝对路径

source = "/www/kuaidihelp_dts",

--定义目的地址,注意:冒号后面是绝对路径

target = server..":/www/kuaidihelp_dts",

--累计事件,等待rsync同步延时时间。这里设置0秒,表示实时同步。

delay = 0,

rsync ={

--rsync命令的绝对路径

binary ="/usr/bin/rsync",

archive =true,

compress =true,

verbose = true,

--使用ssh协议连接到目标服务器,如果端口不是22,请修改一下。

rsh = "/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no"

},

}

end

--因为有一台服务器,是供下载代码的。路径跟for循环里面的不一样,所以单独列出来。

sync {

default.rsync,

source = "/www/kuaidihelp_dts",

--定义目的地址,这里和上面的不一样。因为IP就一个,所以就直接写了。

target = "192.168.74.130:/data/kuaidihelp_dts",

delay = 0,

rsync ={

binary ="/usr/bin/rsync",

archive =true,

compress =true,

verbose = true,

rsh = "/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no"

},

}

启动服务

/usr/local/lsyncd/bin/lsyncd /usr/local/lsyncd/etc/lsyncd.conf

查看进程是否存在

ps -aux | grep lsyncd

如果不存在进程,请查看/usr/local/lsyncd/var/lsyncd.log

如果正常的话,请测试配置文件里面出现的每一个IP

用ssh连接,是否成功。注意,是不需要输入密码的!!!

编译启动脚本

vim /etc/init.d/lsyncd

#!/bin/bash

#

# chkconfig: - 85 15

# description: Lightweight inotify based sync daemon

#

# processname:  lsyncd

# config:       /usr/local/lsyncd/etc/lsyncd.conf

# config:       /etc/sysconfig/lsyncd

# pidfile:      /var/run/lsyncd.pid

# Source function library

. /etc/init.d/functions

# Source networking configuration.

. /etc/sysconfig/network

# Check that networking is up.

[ "$NETWORKING" = "no" ] && exit 0

LSYNCD_OPTIONS="-pidfile /var/run/lsyncd.pid /usr/local/lsyncd/etc/lsyncd.conf"

if [ -e /etc/sysconfig/lsyncd ]; then

. /etc/sysconfig/lsyncd

fi

RETVAL=0

prog="lsyncd"

thelock=/var/lock/subsys/lsyncd

start() {

[ -f /usr/local/lsyncd/etc/lsyncd.conf ] || exit 6

echo -n $"Starting $prog: "

if [ $UID -ne 0 ]; then

RETVAL=1

failure

else

daemon ${LSYNCD_USER:+--user ${LSYNCD_USER}} /usr/local/lsyncd/bin/lsyncd $LSYNCD_OPTIONS

RETVAL=$?

[ $RETVAL -eq 0 ] && touch $thelock

fi;

echo

return $RETVAL

}

stop() {

echo -n $"Stopping $prog: "

if [ $UID -ne 0 ]; then

RETVAL=1

failure

else

killproc lsyncd

RETVAL=$?

[ $RETVAL -eq 0 ] && rm -f $thelock

fi;

echo

return $RETVAL

}

reload(){

echo -n $"Reloading $prog: "

killproc lsyncd -HUP

RETVAL=$?

echo

return $RETVAL

}

restart(){

stop

start

}

condrestart(){

[ -e $thelock ] && restart

return 0

}

case "$1" in

start)

start

;;

stop)

stop

;;

restart)

restart

;;

reload)

reload

;;

condrestart)

condrestart

;;

status)

status lsyncd

RETVAL=$?

;;

*)

echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}"

RETVAL=1

esac

exit $RETVAL

设置权限

chmod 755 /etc/init.d/lsyncd

添加到开机自启动文件中

echo "/etc/init.d/lsyncd start" >> /etc/rc.local

测试编辑app_1的文件,在其他服务器查看文件是否有更新。

文章参考:

https://linux.cn/article-5849-1.html

时间: 2024-10-14 20:44:19

lsyncd实时同步工具的相关文章

14,Lsyncd实时同步工具服务

1,lsyncd实时同步工具 1)lsyncd实际上是lua语言封装了inotify和rsync工具,采用了Linux内核(2.6.13以后里的) inofify触发机制然后通过rsync去差异同步,达到实时的效果,它最厉害的地方是完美解决 了inotify+rsync的海量文件同步带来的文件频繁发生文件列表问题.其次配置方式简单.2,安装 yum -y install lsyncd3,创建配置文件(配置文件里原是无用信息)1)配置文件信息解析: 参考博客:https://www.cnblogs

lsyncd 实时同步

1. 几大实时同步工具比较 1.1 inotify + rsync 最近一直在寻求生产服务服务器上的同步替代方案,原先使用的是inotify + rsync,但随着文件数量的增大到100W+,目录下的文件列表就达20M,在网络状况不佳或者限速的情况下,变更的文件可能10来个才几M,却因此要发送的文件列表就达20M,严重减低的带宽的使用效率以及同步效率:更为要紧的是,加入inotifywait在5s内监控到10个小文件发生变化,便会触发10个rsync同步操作,结果就是真正需要传输的才2-3M的文

Inotify+rsync实时同步工具实战

Inotify+rsync实时同步工具实战 分别有机器:server-178/24,client-b-179/24,client-c-180/24 中心分发服务器Master:client-c-180/24 备份服务器    :client-b-179/24和server-178/24 基于备份服务器已经提供rsync --daemon的基础上,在中心分发服务器(rsync客户端)配置inotify,监控的目录设置为/www/ 1.查看当前系统是否支持inotify ls -l /proc/sy

局域网文件实时同步工具

自同步软件是一款自同步是最好用的局域网文件实时同步工具.软件使用方便.同步快速,并且支持五大平台,包括windows.mac.linux.android和IOS(未发布).轻松实现多设备之间的无线数据同步,无需注册下载即用,简单与智慧并存,安全与极速并重,您居家办公必备的之神器. 自同步软件特点1.全平台覆盖. 包揽所有平台,让跨平台使用数据不在那么遥远.你不必担心在Windows.Linux.Mac多平台间的数据传递:更不必担心在电脑.手机.平板等多设备间传输文件的跨平台问题. 自同步全平台覆

sersync/lsyncd实时同步

第一章 sersync/lsync实时同步 1.1 实时同步服务原理/概念 1)需要部署好rsync守护进程服务,实现数据传输 2)需要部署好inotify服务,实现目录中数据变化监控 3)将rsync服务和inotify服务建立联系,将变化的数据进行实时备份传输 1.2 inotify介绍 ? Inotify是一种强大的,细粒度的,异步的文件系统事件监视机制,Linux2.6.13起加入了inotify支持,通过inotify可以监控文件系统中添加,删除,修改,移动等各种事件,利用这个内核接口

实时同步工具原理解释及环境准备inotify

实时同步,确保主服务器故障时将丢失数据的风险降到最低,实现原理就是当主服务器接收到数据时同时复制到另一服务器上,确保有多一份数据.用到的工具:inotify或者sersync,这次使用inotify演示. 当inotify运行时会时刻监控着文件系统(inode.block等属性) 当inotify监控到目录有增加.修改.删除.移动操作时会调用rsync命令将目录传输到热备器上. image 部署: 安装inotify,检查系统是否支持inotify Linux内核从2.6.13起加入inotif

lsync目录文件实时同步工具

参考文档:https://vastxiao.github.io/article/2017/09/02/Linux/lsyncd_usage/ 防止连接丢失,已保存至百度网络-郑州-XXXXX 建议首先查看  参考文档连接,写的比较全了 1.简介 lsync 官网:https://axkibe.github.io/lsyncd/ Lysncd 实际上是lua语言封装了inotify和rsync工具,采用了Linux内核(2.6.13及以后)里的inotify触发机制,然后通过rsync去差异同步,

使用lsyncd实时同步.

安装lua关联包: yum install lua lua-static lua-devel 安装lsyncd: wget https://lsyncd.googlecode.com/files/lsyncd-2.1.5.tar.gz tar -xzvf lsyncd-2.1.5.tar.gz cd lsyncd-2.1.5 ./configure -prefix=/usr/local/lsyncd make&&make install ln -s /usr/local/lsyncd/bi

inotify实时同步工具理论和实战

inotify服务: 当用户在A服务器上操作了数据,inotify会抓取出来,然后通知rsync,然后同步到rsync服务器.所以inotify服务器却是rsync的客户端服务器. inotify性能比sersync强,inotify可能支持几百个图片,sersync可能一百所以就差不多了. 确认内核是否支持inotify 可通过ll /proc/sys/fs/inotify查看有三个文件即可. rz上传inotify软件包 tar xf inotify-tools-3.123.tar.gz c