知识储备

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

    2、Inotify是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。Rsync安装完毕后,需要安装inotify文件检查软件。


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

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

node1上:

编译安装rsync:

前提:需要装开发环境:# yum -y install gcc

1、下载并安装rsync

# 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

2、编辑配置文件

# 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  #密码文件存放的位置

3、创建所需文件和目录

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

# vim /etc/rsync.pas

fsy:fsy666

# chmod 700 /etc/rsync.pas

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

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

# ps -ef | grep rsync

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

# mkdir -pv  /data/www/web

至此服务端配置完毕!


node2上:

1、建立秘钥文件,并授权

# vim /etc/rsync.pas

fsy666

# chmod 600 /etc/rsync.pas

2、连接至服务器端进行同步

# 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 服务器时使用

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

1、实现双机互信

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

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

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

# cd inotify-tools-3.14

# ./configure

# make && make install

3、配置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

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

# nohup  sh  auto_inotify.sh  &

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


                      欢迎批评指正!