当前位置: 首页 > 工具软件 > lsyncd > 使用案例 >

Ubuntu使用lsyncd备份资料

何华灿
2023-12-01
  • 安装lsyncd

sudo apt install lsyncd

Ubuntu下已默认安装rsync,如未安装需sudo apt install rsync

  • 创建配置文件

Ubuntu下需要手动创建/etc/ lsyncd文件夹及/etc/lsyncd/lsyncd.conf.lua

  • 配置lsyncd

--代表注释,settings是全局设置。有三种同步方式:

default.rsync :本地目录间同步,使用rsync,也可以达到使用ssh形式的远程rsync效果,或daemon方式连接远程rsyncd进程;
default.direct :本地目录间同步,使用cp、rm等命令完成差异文件备份;
default.rsyncssh :同步到远程主机目录,rsync的ssh模式,需要使用key来认证

sudo vi /etc/lsyncd/lsyncd.conf.lua,输入以下配置

settings {

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

        statusFile   ="/var/log/lsyncd/lsyncd.status",

        inotifyMode  = "CloseWrite",

        maxProcesses = 4,

        --nodaemon =true,

        }

sync {

        default.rsyncssh,

        source    = "/data/gerrit/gerrit_app",

        host = "hzdc@10.131.10.11",

        targetdir    = "/home/hzdc/gerrit_backup/gerrit_site",

        excludeFrom = "/etc/lsyncd/rsync_exclude.lst",

        maxDelays = 10,

        delay     = 35,

        rsync     = {

            binary    = "/usr/bin/rsync",

            archive   = true,

            compress  = true,

        -- bwlimit   = 800,

            verbose   = true,

            -- _extra = {"--bwlimit=2000"},

            }

}

创建exclude 文件,在此文件内的目录或文件会被忽略,也可以不创建这个文件,直接写在配置文件内。

Sudo vi /etc/lsyncd/rsync_exclude.lst

etc/*

lib/*

bin/*

plugins/*

tmp/*

logs/*

data/*

static/*

       这个是gerrit备份的排除名单。

  • 生成root的SSH KEY

Sudo –s (ubuntu 已禁用root用户不能使用su root)

Ssh-keygen –t rsa 一路回车

cat /root/.ssh/id_rsa.pub将内容复制粘贴到远端机器的

/home/hzdc/.ssh/authorized_keys

远端机器也无root用户,无法使用ssh-copy-id root@your_remote_server_IP指令完成copy

  • 启动lsyncd

第一次使用lsyncd  /etc/lsyncd/lsyncd.conf.lua启动,网上很多都是直接执行lsyncd命令或直接启动lsyncd service,我验证不会启动,没有log生成。使用lsyncd -log Exec /etc/lsyncd/lsyncd.conf.lua这种方式会检查配置文件有无问题,但也没有生成log

sudo service lsyncd restart 或/etc/init.d/lsyncd restart

  • 查看log,看服务是否工作正常

Cat /var/log/lsyncd/lsyncd.log

/etc/init.d/lsyncd status

 

  • 到远端备份机看是否有内容备份过来,第一次会比较慢
  • 将lsyncd加入到开机启动

systemctl enable lsyncd

参照网上配置,都未提及但很重要的几点:

  1. source 不支持远端,即source必须是本地,我配置成远端一直无权访问?也是因为未使用root用户的原因?--实际验证不是root用户原因,很可能就是source不支持远端路径
  2. 远端前有的没有配置用户名,即仅有一个IP,也有带了用户名的。像我上面的配置hzdc@10.131.10.11 ,把sshkey 加入到远端机器上还是一直鉴权失败,直接使用ssh 登录是可以的。所以很可能配置的user@是没有用的,系统还是使用的root用户访问的。这也就是为什么很多教程都使用root的原因。-----此条可能有误,后来我用hzdc又可以了
  3. Ubuntu已禁用root用户
  4. 操作备份数据前,最好先停止lsyncd

最终参考配置文件:

settings {

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

        statusFile   ="/var/log/lsyncd/lsyncd.status",

        inotifyMode  = "CloseWrite",

        insist = true,

        maxProcesses = 4,

        --nodaemon =true,

        }

sync {

        default.rsyncssh,

        source    = "/data/gerrit/gerrit_app",

        host = "10.131.10.11",

        targetdir    = "/home/hzdc/gerrit_backup/gerrit_site",

        --target    = "hzdc@10.131.10.11:/home/hzdc/gerrit_backup/gerrit_site",

        excludeFrom = "/etc/lsyncd/rsync_exclude.lst",

        delete = true,

        maxDelays = 10,

        delay     = 35,

        rsync     = {

            binary    = "/usr/bin/rsync",

            archive   = true,

            compress  = true,

        -- bwlimit   = 800,

            verbose   = true,

            -- _extra = {"--bwlimit=2000"},

            },

        ssh = {

            binary = "/usr/bin/ssh",

            port = 22,

        }

}

 

 

 

 

 

配置文件参数说明:

settings 
里面是全局设置, --开头表示注释,下面是几个常用选项说明:

  • logfile 定义日志文件
  • stausFile 定义状态文件
  • nodaemon=true 表示不启用守护模式,默认
  • statusInterval lsyncd的状态写入上面的statusFile的间隔,默认10
  • inotifyMode 指定inotify监控的事件,默认是 CloseWrite,还可以是 Modify CloseWrite or Modify
  • maxProcesses 同步进程的最大个数。假如同时有20个文件需要同步,而 maxProcesses = 8,则最大能看到有8rysnc进程
  • maxDelays 累计到多少所监控的事件激活一次同步,即使后面的 delay延迟时间还未到

sync 
里面是定义同步参数,可以继续使用 maxDelays来重写settings的全局变量。一般第一个参数指定 lsyncd以什么模式运行: rsync rsyncssh direct三种模式:

  • default.rsync :本地目录间同步,使用rsync,也可以达到使用ssh形式的远程rsync效果,或daemon方式连接远程rsyncd进程; 
    default.direct :本地目录间同步,使用 cp rm等命令完成差异文件备份; 
    default.rsyncssh :同步到远程主机目录,rsyncssh模式,需要使用key来认证
  • source 同步的源目录,使用绝对路径。
  • target 定义目的地址.对应不同的模式有几种写法: 
    /tmp/dest :本地目录同步,可用于 direct rsync模式 
    172.29.88.223:/tmp/dest :同步到远程服务器目录,可用于 rsync rsyncssh模式,拼接的命令类似于 /usr/bin/rsync -ltsd --delete --include-from=- --exclude=* SOURCE TARGET,剩下的就是rsync的内容了,比如指定username,免密码同步 
    172.29.88.223::module :同步到远程服务器目录,用于 rsync模式 
    三种模式的示例会在后面给出。
  • init 这是一个优化选项,当 init = false,只同步进程启动以后发生改动事件的文件,原有的目录即使有差异也不会同步。默认是 true
  • delay 累计事件,等待rsync同步延时时间,默认15秒(最大累计到1000个不可合并的事件)。也就是15s内监控目录下发生的改动,会累积到一次rsync同步,避免过于频繁的同步。(可合并的意思是,15s内两次修改了同一文件,最后只同步最新的文件)
  • excludeFrom 排除选项,后面指定排除的列表文件,如 excludeFrom = "/etc/lsyncd.exclude",如果是简单的排除,可以使用 exclude = LIST 
    这里的排除规则写法与原生rsync有点不同,更为简单:
    • 监控路径里的任何部分匹配到一个文本,都会被排除,例如 /bin/foo/bar可以匹配规则 foo
    • 如果规则以斜线 /开头,则从头开始要匹配全部
    • 如果规则以 /结尾,则要匹配监控路径的末尾
    • ?匹配任何字符,但不包括 /
    • *匹配0或多个字符,但不包括 /
    • **匹配0或多个字符,可以是 /
  • delete 为了保持targetsouce完全同步,Lsyncd默认会 delete = true来允许同步删除。它除了 false,还有 startup running值,请参考 Lsyncd 2.1.x Layer 4 Config Default Behavior

rsync 
(提示一下, delete exclude本来都是 rsync的选项,上面是配置在 sync中的,我想这样做的原因是为了减少rsync的开销)

  • bwlimit 限速,单位kb/s,与rsync相同(这么重要的选项在文档里竟然没有标出)
  • compress 压缩传输默认为 true。在带宽与cpu负载之间权衡,本地目录同步可以考虑把它设为 false
  • perms 默认保留文件权限。
  • 其它rsync的选项

其它还有rsyncssh模式独有的配置项,如 host targetdir rsync_path password_file,见后文示例。 rsyncOps={"-avz","--delete"}这样的写法在2.1.*版本已经不支持。

lsyncd.conf可以有多个 sync,各自的source,各自的target,各自的模式,互不影响。

 

 

比较好的参考文档:https://blog.csdn.net/weixin_33849215/article/details/85965253

https://blog.csdn.net/u014389734/article/details/80518485

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

http://itindex.net/detail/53387-lsyncd-%E5%AE%9E%E6%97%B6-%E5%90%8C%E6%AD%A5

 

 

 

备份Gerrit参考:https://blog.csdn.net/weixin_34384557/article/details/91619053

 

双向备份参考:https://www.jianshu.com/p/c6f41fb2d167

 

 类似资料: