rsync+inotify实现数据实时同步


知识储备node

    一、Rsync是Unix/Linux下的一款应用软件,利用它可使多台服务器数据保持同步一致性,第一次同步时 rsync 会复制所有内容,但在下一次只传输修改过的文件。Rsync 在传输数据的过程当中能够实行压缩及解压缩操做,所以可使用更少的带宽。能够很容易作到保持原来文件的权限、时间、软硬连接等。web

    二、Inotify是一个 Linux特性,它监控文件系统操做,好比读取、写入和建立。Inotify反应灵敏,用法很是简单,而且比 cron 任务的繁忙轮询高效得多。Rsync安装完毕后,须要安装inotify文件检查软件。vim


说明:准备两台服务器node1和node2,node1:202.207.178.6为服务端,node2:202.207.178.7为客户端服务器

1、配置rsync,实现主从数据同步ssh

node1上:ide

编译安装rsync:ui

前提:须要装开发环境:# yum -y install gccspa

一、下载并安装rsyncorm

# wget  http://rsync.samba.org/ftp/rsync/src/rsync-3.0.7.tar.gz递归

# tar xf rsync-3.0.7.tar.gz 

# cd rsync-3.0.7

# ./configure --prefix=/usr/local/rsync

# make && make install

二、编辑配置文件

# vim /etc/rsyncd.conf

添加如下内容:

#########[global] 全局配置

uid = nobody

gid = nobody

use chroot = no

max connections = 30

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsyncd.lock

log file = /var/log/rsyncd.log

transfer logging = yes

log format = %t %a %m %f %b

syslog facility = local3

timeout = 300


[web]

read only = yes

path = /data/www/web

comment = web

auth users =fsy

secrets file = /etc/rsync.pas

hosts allow = 202.207.178.0/24

释义:

[www]   #要同步的模块名

path = /data/www/web  #要同步的目录

comment = web    #这个名名称无所谓,最好与模块名保持一致

read only = no   # no客户端可上传文件,yes只读

write only = no  # no客户端可下载文件,yes不能下载

list = yes      #是否提供资源列表

auth users =test  #登录系统使用的用户名,没有默认为匿名。

hosts allow = 202.207.178.0/24  #本模块容许经过的IP地址

hosts deny = IP()     #禁止主机IP

secrets file=/etc/rsync.pas  #密码文件存放的位置

三、建立所需文件和目录

建立秘钥文件,并修改其权限

# vim /etc/rsync.pas

fsy:fsy666

# chmod 700 /etc/rsync.pas

四、启动rsync服务,并查看是否正常启动

# /usr/local/rsync/bin/rsync --daemon

# ps -ef | grep rsync

五、在服务器端建立复制目录,并在其中放置文件

# mkdir -pv  /data/www/web

至此服务端配置完毕!


node2上:

一、创建秘钥文件,并受权

# vim /etc/rsync.pas

fsy666

# chmod 600 /etc/rsync.pas

二、链接至服务器端进行同步

# rsync -aP --delete fsy@202.207.178.6::web /data/www/web --password-file=/etc/rsync.pas

此时在从服务器能够看到拷贝的文件!

释义:

-a, --archive归档模式,表示以递归方式传输文件,并保持全部文件属性。

--exclude=PATTERN指定排除一个不须要传输的文件匹配模式

--exclude-from=FILE从 FILE 中读取排除规则

--include=PATTERN指定须要传输的文件匹配模式

--delete删除那些接收端还有而发送端已经不存在的文件

-P等价于 --partial --progress,实现半同步复制

-v, --verbose详细输出模式

-q, --quiet精简输出模式

--rsyncpath=PROGRAM指定远程服务器上的 rsync 命令所在路径

--password-file=FILE从 FILE 中读取口令,以免在终端上输入口令,一般在                     cron 中链接 rsync 服务器时使用

2、经过Inotify实现数据实时同步(在node1上安装)

一、实现双机互信

node1:

# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''

# ssh-copy-id -i .ssh/id_rsa.pub root@202.207.178.7

node2:

# ssh-keygen -t rsa -f ~/.ssh/id_rsa -P ''

# ssh-copy-id -i .ssh/id_rsa.pub root@202.207.178.6

二、安装inotify-tools-3.14.tar.gz

# tar xf inotify-tools-3.14.tar.gz

# cd inotify-tools-3.14

# ./configure

# make && make install

三、配置auto_inotify.sh同步脚本

# vim auto_inotify.sh

内容以下:

#!/bin/sh  

src=/data/www/web/

des=/data/www/web/

ip=202.207.178.7

inotifywait -mrq --timefmt '%d/%m/%y-%H:%M' --format '%T %w%f' -e modify,delete,create,attrib ${src} | while read file  

do

for  i  in  $ip

 do

 /usr/local/rsync/bin/rsync   -aP   --delete  $src root@$ip:$des

 done

done

四、在服务器端后台启动该脚本

# nohup  sh  auto_inotify.sh  &

此时在主服务器上的/data/www/web作修改,会发现从服务器上的/data/www/web也作一样的改动,说明配置成功!


                      欢迎批评指正!

相关文章
相关标签/搜索