广告
返回顶部
首页 > 资讯 > 后端开发 > Python >lsyncd实时同步工具
  • 497
分享到

lsyncd实时同步工具

实时工具lsyncd 2023-01-30 21:01:46 497人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

首先介绍一下架构有3台app服务器,每次上线,是通过shell脚本将代码传输至app_1然后app_1自动同步到app_2和app_3代码路径为/www有一台code服务器,专门用来下载所有服务器代码的。路径为/data最开始的同步策略是r

首先介绍一下架构

blob.png


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

然后app_1自动同步到app_2和app_3

代码路径为/www


有一台code服务器,专门用来下载所有服务器代码的。

路径为/data


最开始的同步策略是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种方法可以安装

yum安装,前提是安装了epel更新源。使用命令:yum install -y lsyncd

GitHub下载,地址为:https://github.com/axkibe/lsyncd


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

软件部署:

app_1,app_2,app_3必须要安装rsync

必须要有/usr/bin/rsync文件

这3台服务器,必须要拥有/usr/bin/rsync文件

这3台服务器,必须要拥有/usr/bin/rsync文件

这3台服务器,必须要拥有/usr/bin/rsync文件

重要的事情说三遍!


app_1必须能无密码登录app_2和app_3

ssh秘钥认证,请自行百度。

app_1只需要安装lsyncd就可以了

3台rsync配置文件,不需要创建,不需要修改


安装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/dts",

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

 target = server..":/www/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/dts",

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

 target = "192.168.74.130:/data/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连接,是否成功。注意,是不需要输入密码的!!!

ssh -p 端口 root@ip地址


编译启动脚本

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的文件,在其他服务器查看文件是否有更新。

cd /www/dts

touch 1.txt


备注:

如果只是一对一的同步

配置文件可以简化一点

settings {

 --pid文件

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

 --状态文件

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

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

 inotifyMode = "CloseWrite or Modify",

 --最大8个进程

    maxProcesses = 8,

}


sync {

 default.rsync,

 source = "/www/dts",

 --定义目的地址

 target = "192.168.74.130:/data/dts",

 delay = 0,

 rsync ={

  binary ="/usr/bin/rsync",

  archive =true,

  compress =true,

  verbose = true,

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

 },

}


如果遇到不同步的情况:

1.检查几台服务器是否存在文件/usr/bin/rsync

2.检查source和target文件目录是否存在

3.检查iptables和selinux是否关闭

4.检查几台服务器之间是否做了秘钥认证,能够无密码ssh登录


文章参考:

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


--结束END--

本文标题: lsyncd实时同步工具

本文链接: https://www.lsjlt.com/news/178904.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • lsyncd实时同步工具
    首先介绍一下架构有3台app服务器,每次上线,是通过shell脚本将代码传输至app_1然后app_1自动同步到app_2和app_3代码路径为/www有一台code服务器,专门用来下载所有服务器代码的。路径为/data最开始的同步策略是r...
    99+
    2023-01-30
    实时 工具 lsyncd
  • Java 打包同步工具推荐:哪些工具最实用?
    在 Java 开发中,打包和同步代码是非常常见的任务。对于一些大型项目来说,这些任务可能会消耗大量的时间和精力。为了提高效率和减少手动操作的错误,使用一些自动化的工具来完成这些任务是非常必要的。在本文中,我们将介绍几个 Java 打包同步...
    99+
    2023-06-20
    打包 同步 unix
  • PHP 实现实时 Unix 同步,有哪些值得推荐的工具?
    Unix 同步是一项非常重要的任务,尤其是当你需要将数据从一个服务器同步到另一个服务器时。在这种情况下,你需要一种可靠的工具来保证数据的安全性和一致性。本文将介绍一些值得推荐的 PHP 工具,以及如何使用它们来实现实时 Unix 同步。 ...
    99+
    2023-07-07
    实时 unix 同步
  • Awaitility同步异步工具实战示例详解
    目录引言1. awaitility入门1.1 静态导入1.2 简单例子2. awaitility在RocketMQ中的实战3. 总结引言 在编写测试用例的时候遇到有异步或者队列处理的...
    99+
    2022-11-13
  • PHP 实现 Unix 实时同步,哪些工具可以帮助我快速实现?
    在当今信息化的时代,数据的实时同步已经成为了企业和个人数据管理的必备要素。而在 Unix 系统中,实时同步也是非常重要的,因为 Unix 系统是一个多用户的操作系统,很多用户都会同时访问同一个文件,因此实时同步是必须的。那么,PHP 实现...
    99+
    2023-07-07
    实时 unix 同步
  • Elasticsearch数据同步工具怎么用
    本篇内容主要讲解“Elasticsearch数据同步工具怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Elasticsearch数据同步工具怎么用”吧! ...
    99+
    2022-10-19
  • Linux中rsync同步工具怎么用
    这篇文章给大家分享的是有关Linux中rsync同步工具怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。在对rsync服务器配置结束以后,下一步就需要在客户端发出rsync命令来实现将服务器端的文件备份到客户...
    99+
    2023-06-16
  • rsync远程同步(定期同步,实时同步实战!)
    本章结构 1.rsync同步简介2.配置rsync备份源3.rsync命令基本用法4.rsync备份操作示例5.rsync+inotify结合使用 关于rsync . 一款快速增量备份工具 1.Rem...
    99+
    2022-10-18
  • 详解Java中CountDownLatch异步转同步工具类
    使用场景 由于公司业务需求,需要对接socket、MQTT等消息队列。 众所周知 socket 是双向通信,socket的回复是人为定义的,客户端推送消息给服务端,服务端的回复是两条...
    99+
    2022-11-12
  • rsync实时同步
    与传统的cp、tar备份方式相比,rsync具有安全性高、备份迅速、支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需求,例如定期的备份文件服务器数据到远端服务器,对本地磁盘定期做数据镜像等。192.168.0.1 源服...
    99+
    2023-06-05
  • Java多线程之同步工具类CyclicBarrier
    目录1 CyclicBarrier方法说明2 CyclicBarrier实例3 CyclicBarrier源码解析CyclicBarrier构造函数 await方法 nextGene...
    99+
    2022-11-12
  • Java多线程之同步工具类CountDownLatch
    目录1 CountDownLatch主要方法2 CountDownLatch使用例子3 CountDownLatch源码分析构造函数countDown方法countDown方法的内部...
    99+
    2022-11-12
  • Java多线程之同步工具类Exchanger
    目录1 Exchanger 介绍2 Exchanger 实例exchange等待超时 3 实现原理1 Exchanger 介绍 前面分别介绍了CyclicBarrier、CountD...
    99+
    2022-11-12
  • Linux数据同步工具rsync怎么用
    这篇文章主要讲解了“Linux数据同步工具rsync怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux数据同步工具rsync怎么用”吧!讲解 rsync 用法之前,为了让大家对此...
    99+
    2023-06-27
  • MySQL数据库实现远程同步的工具alibaba otter
    本篇文章给大家主要讲的是关于MySQL数据库实现远程同步的工具alibaba otter的内容,感兴趣的话就一起来看看这篇文章吧,相信看完MySQL数据库实现远程同步的工具alibaba otter对大家多...
    99+
    2022-10-18
  • javascript实现同步服务器时间、同步倒计时
    这篇文章主要介绍“javascript实现同步服务器时间、同步倒计时”,在日常操作中,相信很多人在javascript实现同步服务器时间、同步倒计时问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方...
    99+
    2022-10-19
  • mysql表结构同步工具SchemaSync怎么用
    这篇文章将为大家详细讲解有关mysql表结构同步工具SchemaSync怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 SchemaS...
    99+
    2022-10-18
  • Java多线程同步工具类CountDownLatch详解
    目录简介核心方法CountDownLatch如何使用CountDownLatch运行流程运用场景总结简介 CountDownLatch是一个多线程同步工具类,在多线程环境中它允许多个...
    99+
    2022-11-13
  • java线程并发控制同步工具CountDownLatch
    目录前言了解CountDownLatch思考问题:主要参数与方法构造方法CountDownLatch底层实现原理执行流程图实践用法一:用法二:总结前言 大家好,我是小郭,前面我们学习...
    99+
    2022-11-13
    java线程并发CountDownLatch java线程并发
  • nodejs制作一个文档同步工具自动同步到gitee中的实现代码
    初衷 之所以要做这个工具是为了让自己可以随时用电脑时能记录日常工作或生活。一般只需要简单记录下就行了。这样我在家里的和公司里的记录都能同步看到。 这样后期整理的时候看到几个关键词就能...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作