使用 lsyncd 同步本地和远程目录
自动同步本地服务器(或 VPS)上的目录到另一台或多台远程服务器的办法和工具有很多,最简单的办法可能是用 rsync + cron(参考:用 VPS 给博客做镜像),这种办法有个问题就是 rsync 只能在固定时间间隔里被 cron 调用,如果时间间隔设的太短,频繁 rsync 会增加服务器负担;如果时间间隔设的太长,可能数据不能及时同步。今天介绍的 lsyncd 采用了 Linux 内核(2.6.13 及以后)里的 inotify 触发机制,这种机制可以做到只有在需要(变化)的时候才去同步。lsyncd 密切监测本地服务器上的参照目录,当发现目录下有文件或目录变更后,立刻通知远程服务器,并通过 rsync 或 rsync+ssh 方式实现文件同步。lsyncd 默认同步触发条件是每20秒或者每积累到1000次写入事件就触发一次,当然,这个触发条件可以通过配置参数调整。
lsyncd 已经在 Ubuntu 的官方源里,安装很容易:
$ sudo apt-get update $ sudo apt-get install lsyncd
lsyncd 安装后没有自动生成所需要的配置文件和目录,需要手动创建:
$ sudo mkdir /etc/lsyncd
$ sudo touch /etc/lsyncd/lsyncd.conf.lua
$ sudo mkdir /var/log/lsyncd
$ sudo touch /var/log/lsyncd/lsyncd.{log,status}
配置 lsyncd,注意 source, host, targetdir 部分,依次是本地需要同步到远程的目录(源头),远程机器的 IP,远程目录(目标):
$ sudo vi /etc/lsyncd/lsyncd.conf.lua
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status"
}
sync {
default.rsyncssh,
source = "/home/vpsee/local",
host = "192.168.2.5",
targetdir = "/remote"
}
配置本地机器和远程机器 root 帐号无密码 ssh 登陆,并在远程机器上(假设 IP 是 192.168.2.5)创建一个 /remote 目录:
$ sudo su # ssh-keygen -t rsa # ssh-copy-id root@192.168.2.5 # ssh 192.168.2.5 # mkdir /remote
配置好后就可以在本地机器上启动 lsyncd 服务了,启动服务后本地机器 /home/vpsee/local 下的目录会自动同步到远程机器的 /remote 目录下:
$ sudo service lsyncd restart
除了同步本地目录到远程目录外,lsyncd 还可以轻松做到同步本地目录到本地另一目录,只要修改配置文件就可以了:
$ sudo vi /etc/lsyncd/lsyncd.conf.lua
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status"
}
sync {
default.rsync,
source = "/home/vpsee/local",
target = "/localbackup"
}
$ sudo service lsyncd restart
建议继续学习:
- 关于IO的同步,异步,阻塞,非阻塞 (阅读:15781)
- mysql 主从同步原理 (阅读:6205)
- 消息分发的同步均衡策略 (阅读:5689)
- 五款最好的免费同步软件 (阅读:4392)
- MySQL5.5复制/同步的新特性及改进 (阅读:4289)
- 大量小文件的实时同步方案 (阅读:4225)
- redis源代码分析 - replication (阅读:4013)
- 三款面向 Amazon S3 的开源文件同步工具之对比 (阅读:3806)
- rsync主动同步代码 (阅读:3552)
- truncate table 不能复制到从库 (阅读:3207)
扫一扫订阅我的微信号:IT技术博客大学习
- 作者:vpsee 来源: vpsee.com
- 标签: lsyncd 同步
- 发布时间:2013-10-23 12:58:13
-
[882] WordPress插件开发 -- 在插件使用 -
[136] 解决 nginx 反向代理网页首尾出现神秘字 -
[57] 整理了一份招PHP高级工程师的面试题 -
[55] 分享一个JQUERY颜色选择插件 -
[54] Innodb分表太多或者表分区太多,会导致内 -
[54] 用 Jquery 模拟 select -
[54] 如何保证一个程序在单台服务器上只有唯一实例( -
[52] jQuery性能优化指南 -
[52] CloudSMS:免费匿名的云短信 -
[52] 海量小文件存储
