知识储备: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也作一样的改动,说明配置成功!
欢迎批评指正!