lsyncd 实现远程目录同步

1、使用背景

将本地分布式文件系统(fdfs)迁移到云主机上

操作系统:CentOS release 6.9 (Final)

磁盘目录:

/dev/sda1       3.6T  2.2T  1.3T  65% /data00
/dev/sdb1       3.6T  2.2T  1.3T  65% /data01
/dev/sdd1       3.6T  2.2T  1.3T  65% /data02
/dev/sde1       3.6T  2.2T  1.2T  65% /data03
/dev/sdf1       3.6T  2.2T  1.3T  65% /data04
/dev/sdg1       3.6T  2.2T  1.2T  65% /data05

2、什么是Lsyncd

GitHub地址:https://github.com/axkibe/lsyncd

Lsyncd监视本地目录树事件监视器接口(inotify或fsevents)。它聚合并将事件组合在一起几秒钟,然后生成一个(或多个)进程来同步这些更改。默认情况下,由rsync实现同步。因此,Lsyncd是一种轻量级的实时镜像解决方案,相对容易安装,不需要新的文件系统或块设备,也不会妨碍本地文件系统的性能。

Rsync+ssh是一种高级操作配置,它使用ssh来执行文件和目录直接在目标上移动,而不是在线路上重新传输移动目标。细粒度的定制可以通过配置文件实现。自定义动作configs甚至可以从头编写,从shell脚本到Lua语言编写的代码。这种方法简单,强大,灵活的配置可以被解决。

Lsyncd 2.2.2要求在所有源和目标机器上rsync >= 3.1。

3、Lsyncd安装

$ yum install epel-release -y    
# 因为这个rpm包在epel源中,所以需要先安装epel源 
$ yum install lsyncd -y

可以参考《centos6 配置yum源》

 vim /etc/lsyncd.conf
 settings {
    logfile ="/var/log/lsyncd/lsyncd.log",
    inotifyMode = "CloseWrite",
    --根据自己CPU使用情况配置
    maxProcesses = 8,
    }
 -- 远程目录同步
sync {

    -- rsync , rsyncssh , direct 三种模式

    default.rsyncssh,

    -- 同步的源目录,使用绝对路径(注意:目录后跟/是只将当前目录下的子目录进行同步,不加/是将data同步过去)。

    source = "/data05/data",

    -- 定义目的地址.对应不同的模式有几种写法,这里使用远程同步的地址,rsync中的地址
    host      = "192.168.4.118",
    -- 目录后/,是将文件拷贝到当前目录下
    targetdir = "/data05/",

    -- 默认 true ,允许同步删除。还有 false, startup, running 值

    delete = true,

    -- 哪些文件不同步

    --exclude = { ".*" },

    -- 累计事件,等待rsync同步延时时间,默认15秒,最大累计到1000个不可合并的事件(1000个文件变动),

    delay = 15,

    -- 默认 true 当init = false ,只同步进程启动以后发生改动事件的文件,原有的目录即使有差异也不会同步

    --init = true,

    -- rsync 的配置

    rsync = {

        -- rsync 的二进制处理文件

        binary = "/usr/bin/rsync",

    -- 归档模式

        archive = true,

    -- 压缩传输

       -- compress = true,

    -- 增量

        verbose   = true,

    -- 密码文件

       -- password_file = "/etc/rsyncd.pwd",

    -- 其他 rsync 的配置参数, 限速(--bwlimit KBPS),使用 rsync -v 查看详细参数

        -- _extra    = {"--bwlimit=200"}

    }

}

这里多个目录配置多个sync 如果本机未安装rsync,需要安装rsync,

4、配置远程主机免密登录

参考《Linux免密登录》

5、启动lsyncd

service lsyncd start

service lsyncd status

6、lsyncd使用中遇到的问题

执行命令:/etc/init.d/lsyncd status

显示:lsyncd 已死,但 pid 文件仍存

于是查看日志文件:cat /var/log/lsyncd/lsyncd.log

日志里显示:

Error: Terminating since out of inotify watches.
Consider increasing /proc/sys/fs/inotify/max_user_watches

其中 max_user_watches 是一个文件,里面有一个数字值,表示每个inotify实例可监听的最大上限数量。

这问题明显就是文件增多,导致无法监控更多的文件,把里面的那个值改大点就可以了

修改方法:vim /etc/sysctl.conf

注意添加的内容:

fs.inotify.max_user_watches=99999999(你想设置的值,此方法修改后重启linux,max_user_watches值不会恢复默认值8192)

修改完立即生效

/sbin/sysctl -p

重新启动 lsyncd :service lsyncd restart

查看 lsyncd 状态 :service lsyncd status

显示:lsyncd (pid 9943) 正在运行...

问题解决。

日志中报错:

Thu Nov 18 10:31:01 2021 Error: Temporary or permanent failure on startup of "/data00/". Terminating since "insist" is not set.

关闭selinux

参考文章: 1、https://linux.cn/article-5849-1.html

2、https://renwole.com/tags/lsyncd%E6%BA%90%E4%BB%A3%E7%A0%81%E7%BC%96%E8%AF%91%E5%AE%89%E8%A3%85%E9%85%8D%E7%BD%AE

3、https://www.cnblogs.com/lvzhenjiang/p/14411173.html

4、https://blog.csdn.net/weixin_34023982/article/details/93990188


发表评论

评论列表,共 0 条评论

    暂无评论