zoukankan      html  css  js  c++  java
  • lsyncd + rsync 实时同步海量小文件

    一: 基于epel源安装lsyncd 和 rsync

    环境准备

    1. lsyncd端: 需要进行实时同步的 rsync 客户端机器 IP地址: 192.168.227.128

    2. RsyncServer端: 需要同步数据到此端的机器IP地址: 192.168.227.129

    默认关闭selinux以及防火墙

    Lysncd 实际上是lua语言封装了 inotify 和 rsync 工具

    lsyncd的官方地址:https://github.com/axkibe/lsyncd

    安装:

    shell > yum install epel-release
    shell > yum install lsyncd rsync

    关于基于各种服务器的相关配置文档,安装之后的路径是:/usr/share/doc/lsyncd/examples,示例文档都再此目录下。

    
    

    settings {
        logfile ="/var/log/lsyncd.log",
        statusFile ="/var/log/lsyncd.status",
        inotifyMode = "CloseWrite or Modify",
        maxProcesses = 10,
        statusInterval = 10,
        nodaemon = true,
        maxDelays = 20
    }


    sync {
        default.rsync,
        source = "/data/",
        target = "rsyncuser@192.168.227.129::fastdfsback",
        delete="true",
        exclude = { "logs*" },
        delay = 10,
        rsync = {
          bwlimit=200,
          binary = "/usr/bin/rsync",
          archive = true,
          compress = true,
          verbose = true,
          perms = true,
          password_file = "/etc/rsync.password",
          _extra = {"--port=3873"}
    }
    }

     

    创建密码文件

    vim /etc/rsync.password    # 创建密码文件 
    123456

    chmod 600 /etc/rsync.password # 修改密码文件权限

    启动服务:

    shell > systemctl enable lsyncd && systemctl start lsyncd

    二: lsyncd 配置说明

    settings 部分,其实就是关于lsyncd工具自身的一些选项设置
       logfile : 指定lsyncd工具本身运行所产生的日志文件存放位置
    
    
       statusFile : 定义lsyncd监控目录状态文件的存放位置
    
    
       statusInterval : 隔多少秒记录一次被监控目录的状态
    
    
       nodaemon=true : 默认是不启用守护模式的
    
    
       inotifyMode : 指定要监控的事件,如,CloseWrite,Modify,CloseWrite or Modify
    
    
       maxProcesses : 指定同步时进程的最大个数
    
    
       maxDelays : 当事件被命中累计多少次后才进行一次同步
    sync 部分主要用来定义同步时的一些设置,可以同时同步多个目录,只需要在该代码块中事先定义好多个sync即可
    
    default.rsync    : 指定lsyncd运行模式,另外,还有default.direct,default.rsyncssh模式,个人建议缺省
    source        : 指定要监控的目录,务必全部用绝对路径
    target        : 要同步到的目标目录,一般为rsync服务端模块下指定的目录
    delay        : 当命中的事件累计到多少时再触发同步
    exclude        : 通过此选项排除掉不需要同步的文件,可用它自己的正则进行匹配
    delete        : 和rsync 的 --delete 作用一样,先清空再同步
    下面是关于 rsync 工具自身的一些设置选项
    
    compress    : 压缩后再同步
    bwlimit        : 限速同步,当你不想占满带宽时
    archive        : 归档模式同步
    perms        : 保留文件原有属性同步
    _extra = {"--port=873"}  :扩展的一些配置和参数,这里是因为我们内部的服务器使用了不同的rsync端口,也是为了安全考虑吧,当然在执行的时候依然可以将其他的参数放在此配置中
     

    其实,lsyncd 还支持当监控到某个指定事件时就执行什么样的命令,待自己详读官方文档后再做单独说明,由于是通过时间延迟和累计事件命中次数来触发同步,在设计上要优于inotify,更多内容,如果有兴趣大家可自行参考其官方文档,待续…

    三: RsyncServer端搭建,这里也有人叫客户端

    lsyncd其实是监听本地目录的文件变化,然后通过rsync server 将本地文件同步到远端。以实现备份的目的。

    1. 安装

    yum -y install rsync # 安装

    2. 修改配置文件

    [root@node2 ~]# cat /etc/rsyncd.conf
    uid = root
    gid = root
    use chroot = yes
    max connections=0
    log file=/var/log/rsyncd/rsyncd.log
    pid file=/var/run/rsyncd.pid
    lock file=/var/run/rsyncd.lock

    [fastdfsback]
    path = /var/backup/
    read only = no
    list = yes
    auth users = rsyncuser
    secrets file = /etc/rsync.password

    3. 创建密码文件

    vim /etc/rsync.password # 创建密码文件
    rsyncuser:123456
    chmod 600 /etc/rsync.password # 修改密码文件权限
    mkdir /var/log/rsyncd

    4. 启动

    /usr/bin/rsync --port=873 --address=192.168.227.129 --daemon

    四:rsync配置说明

    uid #进程对应的用户
    gid #进程对应的用户组
    use chroot #安全相关
    max connections #最大连接数 0代表不限制
    timeout = 300 #超时时间, 可选
    pid file #进程对应的进程号文件
    lock file #锁文件
    log file #日志文件
    [backup] #模块名称
    path #服务器提供访问的目录
    ignore errors #忽略错误, 可选
    read only = false #可选
    list = false #不能列表
    hosts allow = 192.168.10.0/24 #允许的ip地址,可选
    auth users #虚拟用户
    secrets file #虚拟密码

    接下来,就可以创建数据进行验证了。

     参考链接: 

    1. https://www.jianshu.com/p/808d173786c4

    2. https://klionsec.github.io/2017/11/18/lsyncd/

    3:https://www.cnblogs.com/zxci/p/6243574.html

  • 相关阅读:
    玩转Android之手摸手教你DIY一个抢红包神器!
    NetWork——关于TCP协议的三次握手和四次挥手
    请保持心情快乐,请保持情绪稳定
    第八节:Task的各类Task<TResult>返回值以及通用线程的异常处理方案。
    第七节:利用CancellationTokenSource实现任务取消和利用CancellationToken类检测取消异常。
    第六节:深入研究Task实例方法ContinueWith的参数TaskContinuationOptions
    第五节:Task构造函数之TaskCreationOptions枚举处理父子线程之间的关系。
    第四节:Task的启动的四种方式以及Task、TaskFactory的线程等待和线程延续的解决方案
    第三节:ThreadPool的线程开启、线程等待、线程池的设置、定时功能
    第二节:深入剖析Thread的五大方法、数据槽、内存栅栏。
  • 原文地址:https://www.cnblogs.com/skymyyang/p/13265161.html
Copyright © 2011-2022 走看看