使用 lsyncd 本地目录实时备份
转自 https://segmentfault.com/a/1190000002737213
2.1安装lsyncd
# rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# yum install lsyncd
2.2.1 lsyncd同步配置
# cd /usr/local/lsyncd-2.1.5
# mkdir etc var
# vi etc/lsyncd.conf
settings {
logfile ="/usr/local/lsyncd-2.1.5/var/lsyncd.log",
statusFile ="/usr/local/lsyncd-2.1.5/var/lsyncd.status",
inotifyMode ="CloseWrite",
maxProcesses =7,
-- nodaemon =true,
}sync {
default.rsync,
source ="/tmp/src",
target ="/tmp/dest",
-- excludeFrom ="/etc/rsyncd.d/rsync_exclude.lst",
rsync = {
binary ="/usr/bin/rsync",
archive = true,
compress = true,
verbose = true
}
}
到这启动 lsycnd 就可以完成实时同步了,默认的许多参数可以满足绝大部分需求,非常简单。
2.2.2 lsyncd.conf配置选项说明
settings
里面是全局设置,--开头表示注释,下面是几个常用选项说明:
logfile定义日志文件stausFile定义状态文件nodaemon=true表示不启用守护模式,默认statusInterval将lsyncd的状态写入上面的statusFile的间隔,默认10秒inotifyMode指定inotify监控的事件,默认是CloseWrite,还可以是Modify或CloseWrite
or ModifymaxProcesses同步进程的最大个数。假如同时有20个文件需要同步,而maxProcesses,则最大能看到有8个rysnc进程
= 8maxDelays累计到多少所监控的事件激活一次同步,即使后面的delay延迟时间还未到
sync
里面是定义同步参数,可以继续使用maxDelays来重写settings的全局变量。一般第一个参数指定lsyncd以什么模式运行:rsync、rsyncssh、direct三种模式:
default.rsync:本地目录间同步,使用rsync,也可以达到使用ssh形式的远程rsync效果,或daemon方式连接远程rsyncd进程;
default.direct:本地目录间同步,使用cp、rm等命令完成差异文件备份;
default.rsyncssh:同步到远程主机目录,rsync的ssh模式,需要使用key来认证source同步的源目录,使用绝对路径。target定义目的地址.对应不同的模式有几种写法:
/tmp/dest:本地目录同步,可用于direct和rsync模式
172.29.88.223:/tmp/dest:同步到远程服务器目录,可用于rsync和rsyncssh模式,拼接的命令类似于/usr/bin/rsync,剩下的就是rsync的内容了,比如指定username,免密码同步
-ltsd --delete --include-from=- --exclude=* SOURCE
TARGET
172.29.88.223::module:同步到远程服务器目录,用于rsync模式
三种模式的示例会在后面给出。init这是一个优化选项,当init,只同步进程启动以后发生改动事件的文件,原有的目录即使有差异也不会同步。默认是
= falsetruedelay累计事件,等待rsync同步延时时间,默认15秒(最大累计到1000个不可合并的事件)。也就是15s内监控目录下发生的改动,会累积到一次rsync同步,避免过于频繁的同步。(可合并的意思是,15s内两次修改了同一文件,最后只同步最新的文件)excludeFrom排除选项,后面指定排除的列表文件,如excludeFrom,如果是简单的排除,可以使用
= "/etc/lsyncd.exclude"exclude。
= LIST
这里的排除规则写法与原生rsync有点不同,更为简单:监控路径里的任何部分匹配到一个文本,都会被排除,例如
/bin/foo/bar可以匹配规则foo如果规则以斜线
/开头,则从头开始要匹配全部如果规则以
/结尾,则要匹配监控路径的末尾?匹配任何字符,但不包括/*匹配0或多个字符,但不包括/**匹配0或多个字符,可以是/
delete为了保持target与souce完全同步,Lsyncd默认会delete来允许同步删除。它除了
= truefalse,还有startup、running值,请参考 Lsyncd
2.1.x ‖ Layer 4 Config ‖ Default Behavior。
rsync
(提示一下,delete和exclude本来都是rsync的选项,上面是配置在sync中的,我想这样做的原因是为了减少rsync的开销)
bwlimit限速,单位kb/s,与rsync相同(这么重要的选项在文档里竟然没有标出)compress压缩传输默认为true。在带宽与cpu负载之间权衡,本地目录同步可以考虑把它设为falseperms默认保留文件权限。其它rsync的选项
其它还有rsyncssh模式独有的配置项,如host、targetdir、rsync_path、password_file,见后文示例。rsyncOps={"-avz","--delete"}这样的写法在2.1.*版本已经不支持。
lsyncd.conf可以有多个sync,各自的source,各自的target,各自的模式,互不影响。
2.3
启动lsyncd
使用命令加载配置文件,启动守护进程,自动同步目录操作。
lsyncd -log Exec /usr/local/lsyncd-2.1.5/etc/lsyncd.conf
2.4 lsyncd.conf其它模式示例
以下配置本人都已经过验证可行,必须根据实际需要裁剪配置:
settings {
logfile ="/usr/local/lsyncd-2.1.5/var/lsyncd.log",
statusFile ="/usr/local/lsyncd-2.1.5/var/lsyncd.status",
inotifyMode ="CloseWrite",
maxProcesses =8,
}-- I.本地目录同步,direct:cp/rm/mv。 适用:500+万文件,变动不大
sync {
default.direct,
source ="/tmp/src",
target ="/tmp/dest",
delay =1
maxProcesses =1
}-- II.本地目录同步,rsync模式:rsync
sync {
default.rsync,
source ="/tmp/src",
target ="/tmp/dest1",
excludeFrom ="/etc/rsyncd.d/rsync_exclude.lst",
rsync = {
binary ="/usr/bin/rsync",
archive = true,
compress = true,
bwlimit =2000
}
}-- III.远程目录同步,rsync模式+ rsyncd daemon
sync {
default.rsync,
source ="/tmp/src",
target ="syncuser@172.29.88.223::module1",
delete="running",
exclude = {".*",".tmp"},
delay =30,
init = false,
rsync = {
binary ="/usr/bin/rsync",
archive = true,
compress = true,
verbose = true,
password_file ="/etc/rsyncd.d/rsync.pwd",
_extra = {"--bwlimit=200"}
}
}-- IV.远程目录同步,rsync模式+ ssh shell
sync {
default.rsync,
source ="/tmp/src",
target ="172.29.88.223:/tmp/dest",
-- target ="root@172.29.88.223:/remote/dest",
--上面target,注意如果是普通用户,必须拥有写权限
maxDelays =5,
delay =30,
-- init = true,
rsync = {
binary ="/usr/bin/rsync",
archive = true,
compress = true,
bwlimit =2000
-- rsh ="/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no"
--如果要指定其它端口,请用上面的rsh
}
}-- V.远程目录同步,rsync模式+ rsyncssh,效果与上面相同
sync {
default.rsyncssh,
source ="/tmp/src2",
host ="172.29.88.223",
targetdir ="/remote/dir",
excludeFrom ="/etc/rsyncd.d/rsync_exclude.lst",
-- maxDelays =5,
delay =0,
-- init = false,
rsync = {
binary ="/usr/bin/rsync",
archive = true,
compress = true,
verbose = true,
_extra = {"--bwlimit=2000"},
},
ssh = {
port =1234
}
}
上面的内容几乎涵盖了所有同步的模式,其中第III个要求像rsync一样配置rsyncd服务端,见本文开头。第IV、V配置ssh方式同步,达到的效果相同,但实际同步时你会发现每次同步都会提示输入ssh的密码,可以通过以下方法解决:
在远端被同步的服务器上开启ssh无密码登录,请注意用户身份:
user$ ssh-keygen -t rsa
一路回车...
user$ cd ~/.ssh
user$ cat id_rsa.pub >> authorized_keys
把id_rsa私钥拷贝到执行lsyncd的机器上
user$ chmod 600 ~/.ssh/id_rsa
测试能否无密码登录
user$ ssh user@172.29.88.223
3. lsyncd的其它功能
lsyncd的功能不仅仅是同步,官方手册 Lsyncd 2.1.x ‖ Layer 2 Config ‖ Advanced onAction 高级功能提到,还可以监控某个目录下的文件,根据触发的事件自己定义要执行的命令,example是监控某个某个目录,只要是有jpg、gif、png格式的文件参数,就把它们转成pdf,然后同步到另一个目录。正好在我运维的一个项目中有这个需求,现在都是在java代码里转换,还容易出现异常,通过lsyncd可以代替这样的功能。但,门槛在于要会一点点lua语言(根据官方example还是可以写出来)。
另外偶然想到个问题,同时设置了maxDelays和delay,当监控目录一直没有文件变化了,也会发生同步操作,虽然没有可rsync的文件。
TO-DO:
使用 lsyncd 本地目录实时备份的更多相关文章
- 通过rsync+inotify实现数据的实时备份
我讲到过利用rsync实现数据的镜像和备份,但是要实现数据的实时备份,单独靠rsync还不能实现,本文就讲述下如何实现数据的实时备份. 一.rsync的优点与不足 与传统的cp.tar备份方式相比,r ...
- 工作随笔——使用svnsync实时备份SVN版本库
前段时间把SVN版本库从win迁移到了Linux上,没隔几天那台win的磁盘就严重坏道了....这TMD什么运气! 花费了点时间研究了下svn自己的同步工具.写个日志记录下. 注意:svnsync要求 ...
- rsync+inotify实现数据的实时备份
一.rsync概述 1.1.rsync的优点与不足 rsync与传统的cp.tar备份方式相比,rsync具有安全性高.备份迅速.支持增量备份等优点,通过rsync可以解决对实时性要求不高的数据备份需 ...
- rsync 远程同步 实时同步备份 两种免交互的方式实现实时备份
rsync 远程同步: 一款快速增量备份工具 Remote Sync,远程同步 支持本地复制,或者与其他SSH.rsync主机同步 作用:做数据备份 备份方式: 完全备份 增量备份 ...
- 通过rsync+inotify实现数据的实时备份(多台备份机)
在前面的博文中,我讲到过利用rsync实现数据的镜像和备份,但是要实现数据的实时备份,单独靠rsync还不能实现,本文就讲述下如何实现数据的实时备份. 一.rsync的优点与不足 与传统的cp.ta ...
- 使用svnsync实时备份SVN版本库
前段时间把SVN版本库从win迁移到了Linux上,没隔几天那台win的磁盘就严重坏道了....这TMD什么运气! 花费了点时间研究了下svn自己的同步工具.写个日志记录下. 注意:svnsync要求 ...
- 通过rsync+inotify实现数据的实时备份 【转载】
在前面的博文中,我讲到过利用rsync实现数据的镜像和备份,但是要实现数据的实时备份,单独靠rsync还不能实现,本文就讲述下如何实现数据的实时备份. 一.rsync的优点与不足 与传统的cp ...
- 搭建rsync+inotify实现实时备份
一.环境搭建说明 系统环境 CentOS7.5 备份节点 主机名:backup01 IP地址:172.16.2.41 数据节点 主机名:nfs-master IP地址:172.16.2.31 二.在备 ...
- 【集群实战】共享存储实时备份(解决nfs共享存储的单点问题)
1. nfs存储的单点问题 如果nfs服务器宕机了,则所有的nfs客户机都会受到影响.一旦宕机,会丢失部分用户的数据.为了解决单点问题,需要实现共享存储的实时备份,即:将nfs服务端共享目录下的数据实 ...
随机推荐
- C#基础系列——多线程的常见用法详解
前言:前面几节分别介绍了下C#基础技术中的反射.特性.泛型.序列化.扩展方法.Linq to Xml等,这篇跟着来介绍下C#的另一基础技术的使用.最近项目有点紧张,所以准备也不是特别充分.此篇就主要从 ...
- 处理 pcap 中的 mac 二进制字节流为可读格式
import struct # 利用 struct 处理字节流中的mac地址 适用于小端地址操作系统 def mac2str(bi_mac): mac = "" for i in ...
- 软件工程(FZU2015)赛季得分榜,第10回合(alpha冲刺)
目录 第一回合 第二回合 第三回合 第四回合 第五回合 第6回合 第7回合 第8回合 第9回合 第10回合 第11回合 积分规则 积分制: 作业为10分制,练习为3分制:alpha30分: 团队项目分 ...
- MongoDB学习笔记一
操作系统:Windows7 1.下载MongoDB 2.6.5服务端,并安装 网址:http://pan.baidu.com/s/1dDfoJAh 说明:网上很多都不需要安装的,这个需要安装. 2.添 ...
- 关于select那点事
select: 通过监视多个文件描述符的数组.当select()返回后 文件描述符便会被内核修改标志位,使进程 能进行后续操作 ------------------------------------ ...
- npm全局安装和本地安装和本地开发安装(npm install --g/--save/--save-dev)
详细说明参考:http://www.cnblogs.com/PeunZhang/p/5629329.html 我个人理解: 1.全局安装(npm install -g)是为了用命令行,比如在windo ...
- COGS396. [网络流24题]魔术球问题(简化版
问题描述: 假设有n根柱子,现要按下述规则在这n根柱子中依次放入编号为 1,2,3,4......的球. (1)每次只能在某根柱子的最上面放球. (2)在同一根柱子中,任何2个相邻球的编号之和为完全平 ...
- <<< Java提取网页源码
package com.sevennight; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io ...
- Agent理解
简单来说,Agent是一个交互性的技术. 比如我们在网上购物时,主体是人,即请求的发出者,我们在搜索商品时,向系统发出请求,系统会给我们一个返回结果,然而我们发现很多情况下,我们会在商品栏目中发现我们 ...
- Transmission : 如何在Fedora下使用BT下载
先讲讲BT协议的名词: Glossary of BitTorrent terms Transmission 介绍 BT下载客户端 特点: 支持BT下载(.torrent 种子) 或者 磁链( magn ...