lsyncd + rsync 实时同步

1,616 阅读4分钟

设计思想:通过rsync远程同步数据,lsyncd用来监控指定目录的改动

rsync

安装

1.yum install rsync 

2.编译安装
>cd rsync-3.1.3
./configure
make  make install

服务端配置(接收文件)

vim /etc/rsyncd.conf

log file = /etc/rsyncd/rsyncd.log 
pid file = /etc/rsyncd/rsyncd.pid
lock file = /etc/rsyncd/rsyncd.lock
# 指定用户密码对文件
secrets file = /etc/rsyncd/rsyncd.secrets

# 允许的IP段
hosts allow = 192.168.3.0/24,192.168.2.0/24 

# 是否允许列表
list = yes

# rsync以什么用户组身份启动
uid = root
gid = root 

# 最大连接数
max connections = 100

use chroot = no 
[test]
#模块目录
path = /root/mongodb

# 说明:这个选项最好加上,否则再很多crontab的时候往往发生错误你也未可知,因为你不可能天天去看每时每刻去看log,不加上这个出现错误的几率相对会很高
ignore errors

# 描述信息,可以任意填写
comment = www bak

# 认证的用户,服务器必须存在这个系统用户
auth users = rsync

# 是否只读(若从客户端同步到服务器必须设置为NO)
read only = no

服务端

# 设置用户密钥
# 配置密码文件(权限必须600)
echo 'rsync:Hdsa123_' > /etc/rsyncd/rsyncd.secrets

# 设置密码文件权限
chmod 600 /etc/rsyncd/rsyncd.secrets

# 启动服务端
mkdir /root/mongodb
rsync --daemon --config=/etc/rsyncd.conf

指定目录必须存在

客户端

# 设定密码
echo 'Hdsa123_' > /etc/rsync.pass
chmod 600 /etc/rsync.pass

### 向server段上传数据
rsync -avzP  --progress  --password-file=/etc/rsync.pass /tmp/  rsync@192.168.152.111::test (把/tmp下的数据发送到rsync服务器的[test]下的指定目录)

### 从server段拉取数据
>rsync -avzP --delete --password-file=/etc/rsync.pass rsync@192.168.152.111::test /tmp/ (把[test]设置下的目录的数据 拉取到/tmp)

一般同步传输目录都使用 -azvP 选项.

lsyncd

安装

1. rpm
rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum install lsyncd


2. 源码安装
yum install gcc glibc-devel make ncurses-devel openssl-devel xmlto -y
tar xf lsyncd-2.2.2.tar.gz
cd lsyncd-2.2.2
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lsyncd
make && make install

配置文件讲解(/etc/lsyncd.conf)

settings {
  logfile ="/var/log/lsyncd.log",
  statusFile ="/etc/lsyncd.status",
  pidfile = "/var/run/lsyncd.pid",
  nodaemon = false,
  maxDelays = 1 ,
  inotifyMode = "CloseWrite",
  statusInterval = 5,
-- 同步时间间隔
  maxProcesses = 10,
}

sync{
  default.rsync,
  source="/web/data/",
  target="rsync@192.168.30.95::test",
  delete = true,
  delay = 1,
  --init = true,
  rsync = {
    binary = "/usr/bin/rsync",
    archive = true,
    compress = true,
    verbose = true,
    password_file = "/etc/rsync.pass",
  }
}

# 启动:
lsyncd -log Exec /etc/lsyncd.conf

# 源码安装启动
/usr/local/lsyncd/bin/lsyncd -log Exec /etc/lsyncd.conf

主要分为settings,sync,rsync

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服务端模块下指定的目录
init		: 为false时表示只同步lsyncd进程启动以后发生改动事件的文件,否则,反之,默认为true
delay		: 当命中的事件累计到多少时再触发同步
exclude		: 通过此选项排除掉不需要同步的文件,可用它自己的正则进行匹配
delete		: 和rsync 的 --delete 作用一样,先清空再同步

下面是关于 rsync 工具自身的一些设置选项

compress	: 压缩后再同步
bwlimit		: 限速同步,当你不想占满带宽时
archive		: 归档模式同步
perms		: 保留文件原有属性同步

远程同步设置

settings忽略
sync{
  default.rsync,
  source="/web/data/ftp/",
  target="rsync@172.30.0.27::picture",
  delete = true,
  delay = 1,
  init = true,
  rsync = {
    binary = "/usr/bin/rsync",
    archive = true,
    compress = true,
    verbose = true,
    password_file = "/etc/rsync.pass",
  }
} 

多主机同步

settings {
  logfile ="/var/log/lsyncd.log",
  statusFile ="/etc/lsyncd.status",
  pidfile = "/var/run/lsyncd.pid",
  nodaemon = false,
  maxDelays = 1 ,
  inotifyMode = "CloseWrite",
  statusInterval = 5,
-- 同步时间间隔
  maxProcesses = 10,
}

sync{
  default.rsync,
  source="/web/data/ftp/",
  target="rsync@172.30.0.27::picture",
  delete = true,
  delay = 1,
  init = true,
  rsync = {
    binary = "/usr/bin/rsync",
    archive = true,
    compress = true,
    verbose = true,
    password_file = "/etc/rsync.pass",
  }
}

sync{
  default.rsync,
  source="/web/data/ftp/",
  target="rsync@172.30.0.28::picture",
  delete = true,
  delay = 1,
  init = true,
  rsync = {
    binary = "/usr/bin/rsync",
    archive = true,
    compress = true,
    verbose = true,
    password_file = "/etc/rsync.pass",
  }
}

启动自动同步目录

/usr/local/lsyncd/bin/lsyncd -log Exec /etc/lsyncd.conf

转载