码迷,mamicode.com
首页 > 其他好文 > 详细

rsync+inotify++sersync

时间:2015-04-03 15:43:26      阅读:704      评论:0      收藏:0      [点我收藏+]

标签:rsync inotify sersync

同步方法有很多种:

scp  nfs  sftp  http  samba

NFS 服务:

1 rsync+inotify

2 rsync+sersync

rsync的同步是基于文件的,固基于block的许采取其他方式

技术分享

 

 技术分享

 

 

rsync三种模式

1、local 
同步拷贝:rsync -avz /etc /tmp/ --cp -a /etc /tmp  前者增量
删除:rsync -avz --delete /data/null/ /tmp/ 就是让/tmp和/data/null一致。

2、借助通道传输rcp,ssh

push:rsync -avz -e ‘ssh -p 52113‘ /etc/ oldboy@10.0.0.78:~

pull:
rsync -avz -e ‘ssh -p 52113‘ oldman@10.0.0.78:~/hosts /tmp/

3、使用守护进程的方式数据传输(daemon mode)

 

 

Rsync参数

-v 详细模式输出

-z 压缩传输文件

-a 归档模式,==-rtopgDl

-r 递归模式

-t 保持文件的时间

-o 保持文件的属主

-p 保持文件权限

-g 保持文件属主信息

-P 显示同步过程及传输时的的进度等信息

-D 保持设备文件信息

-l 保留软连接

-e 使用信道协议,指定替代rsh的shell程序。例如:ssh –exclude=PATTERN 指定排除不需要的传输文件模式

--exclude=PATTERN 指定排除不需要传输的文件模式

--exclude-from=file

--bwlimit=100  限速的功能

 

生产参数:-avz或者-vztopg

 

Rsync 2.0.0的方式 有一万个文件,先比对完,比对完在同步

Rsync 3.0.6的方式 一边比对,一边同步。  Centos 6.6是

 

 

 

服务端配置:

 

Rsync –daemon

##rsyncd.conf start##

uid = rsync

gid = rsync

#对path 拥有什么样的权限

use chroot = no

max connections = 200

timeout = 300

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

[backup]

path = /oldboy/

ignore errors

read only = false

list = false

hosts allow = 192.168.74.0/24

hosts deny = 0.0.0.0/32

auth users = rsync_backup

secrets file = /etc/rsync.password

#rsync_config_______________end

 

[root@A ~]# mkdir /oldboy -p
[root@A ~]# useradd rsync -s /sbin/nologin -M
[root@A ~]# chown -R rsync.rsync /oldboy

[root@abc ~]# rsync –daemon

echo "/usr/bin/rsync --daemon" >>/etc/rc.local

加入开机启动

 

查看是否成功

[root@abc ~]# ps aux | grep rsync | grep -v grep

root      2272  0.0  0.0 107628   684 ?        Ss   08:48   0:00 rsync –daemon

[root@abc ~]# lsof -i:873

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

rsync   2272 root    4u  IPv4  16365      0t0  TCP *:rsync (LISTEN)

rsync   2272 root    5u  IPv6  16366      0t0  TCP *:rsync (LISTEN)

chmod 600 /etc/rsync.password

 

客户端:

[root@hexudong ~]# echo "oldboy" > /etc/rsync.password

[root@hexudong ~]# chmod 600 /etc/rsync.password

 

 

推送:

[root@hexudong oldboy]# rsync -avz /home/oldboy rsync_backup@192.168.74.131::backup --password-file=/etc/rsync.password

拉取:

[root@hexudong oldboy]# rsync -avz rsync://rsync_backup@192.168.74.131/backup /home/oldboy/ --password-file=/etc/rsync.password

 

rsync相关资料

http://rsync.samba.org/
客户端命令帮助 man rsync
服务端配置帮助 man rsyncd.conf
http://www.samba.org/ftp/rsync/rsync.html
http://www.samba.org/ftp/rsync/rsyncd.conf.html

 

关闭,启动rsync

 

pkill rsync     #←关闭rsync服务
kill  `cat /var/run/rsyncd.pid`
rsync --daemon  #←启动rsync服务

kill -HUP $(cat /var/run/rsyncd.pid)

 

rsync排除

 

rsync -avz --exclude=1 --exclude=2  /test/ rsync_backup@10.0.0.8::backup --password-file=/etc/rsync.password

[root@B test]# rsync -avz --exclude={1,3,5} /test/ rsync_backup@10.0.0.8::backup --password-file=/etc/rsync.password
sending incremental file list
./
10
2
4
6
7
8
9

 

 rsync 排除文件列表

 

--exclude-from=后面那个文件可以写入要排除的文件列表,排除单个文件用--exclude就可以了

 

rsync -avz --exclude=a /data1/ rsync_backup@10.0.0.7::oldboy  --password-file=/etc/rsync.password  
排除多个文件:
rsync -avz --exclude={a,b} /data1/ rsync_backup@10.0.0.7::oldboy  --password-file=/etc/rsync.password 
rsync -avz --exclude=a  --exclude=b /data1/ rsync_backup@10.0.0.7::oldboy  --password-file=/etc/rsync.password 
rsync -avz --exclude={a..g} /data1/ rsync_backup@10.0.0.7::oldboy  --password-file=/etc/rsync.password  
rsync -avz --exclude-from=paichu.log /data1/ rsync_backup@10.0.0.7::oldboy  --password-file=/etc/rsync.password 

 

rsync 完全同步

会把远端目录内容清除:
rsync -avz --delete /tmp/ rsync://rsync_backup@10.0.0.8/oldboy/ --password-file=/etc/rsync.password 
本地目录内容会被清除:
rsync -avz --delete rsync://rsync_backup@10.0.0.8/oldboy/ /tmp --password-file=/etc/rsync.password 

 

rsync 优缺点

Rsync优点:

1 增量备份,支持socket,支持集中备份

Rsync缺点:

1 大量小文件时候同步的时候,比对时间较长,有的时候,rsync进程停止

2 同步大文件,10G这样的大文件爱你有时也会问题,中断,为完整同步前,隐藏文件。

 

rsync 多模块

 

[root@A ~]# cat /etc/rsyncd.conf   
#rsync_config_______________start
#created by oldboy 15:01 2007-6-5
#QQ 31333741 blog: http://oldboy.blog.51cto.com
##rsyncd.conf start##
uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log
ignore errors
read only = false
list = false
hosts allow = 10.0.0.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
[backup]
path = /oldboy/
ignore errors

[backup1]
path = /oldboy1/
#rsync_config_______________end

 

rsync排错必备思想

1 部署流程熟练

2 原理理解

3 学会日志,命令行输出rsync命令,日志输出/var/log/rsyncd.log

 

排错能力联系:

1 模拟错误,重视日常错误

 

rsync报错解决

 

1服务端没有目录

[root@hexudong opt]# rsync -avz /data1/ --delete rsync://mag_sync@192.168.74.128/oldboy  --password-file=/etc/rsync.password

@ERROR: chdir failed

rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]

 

2服务端目录权限有问题

[root@hexudong opt]# rsync -avz /data1/ --delete rsync://mag_sync@192.168.74.128/oldboy  --password-file=/etc/rsync.password

@ERROR: chdir failed

rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]

[root@hexudong opt]# rsync -avz /data1/ --delete rsync://mag_sync@192.168.74.128/oldboy  --password-file=/etc/rsync.password

sending incremental file list

./

rsync: failed to set times on "." (in oldboy): Operation not permitted (1)

adglkaflg

afg

df

sdfas

sdff

sdjf

sfsdf

shu01

shu02

shu03

shu04

shu05

shu06

shu07

shu08

shu09

shu10

ad/

rsync: recv_generator: mkdir "ad" (in oldboy) failed: Permission denied (13)

*** Skipping any contents from this failed directory ***

ada/

 

3 服务端密码权限问题

[root@hexudong opt]# rsync -avz /data1/ --delete rsync://mag_sync@192.168.74.128/oldboy  --password-file=/etc/rsync.password

@ERROR: auth failed on module oldboy

rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]

[root@hexudong opt]#

日志:

2015/03/03 19:09:13 [1732] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors

2015/03/03 19:09:13 [1732] connect from hexudoong.kehuduan (192.168.74.130)

2015/03/03 19:09:13 [1732] secrets file must not be other-accessible (see strict modes option)

2015/03/03 19:09:13 [1732] continuing without secrets file

2015/03/03 19:09:13 [1732] auth failed on module oldboy from hexudoong.kehuduan (192.168.74.130): missing secret for user "mag_sync"

 

4 服务端防火墙开启

[root@hexudong opt]# rsync -avz /data1/ --delete rsync://mag_sync@192.168.74.128/oldboy  --password-file=/etc/rsync.password

rsync: failed to connect to 192.168.74.128: No route to host (113)

rsync error: error in socket IO (code 10) at clientserver.c(124) [sender=3.0.6]

日志:

2015/04/01 06:04:46 [3120] params.c:Parameter() - Ignoring badly formed line in configuration file: ignore errors

2015/04/01 06:04:46 [3121] rsyncd version 3.0.6 starting, listening on port 873

 

5 本地密码文件权限问题

[root@wyh shell]# /usr/bin/rsync -avz /opt/tomcat/ mag_sync@172.16.124.6::hexudong --password-file=/etc/rsync.password

password file must not be other-accessible

continuing without password file

Password:

@ERROR: auth failed on module hexudong

rsync error: error starting client-server protocol (code 5) at main.c(1503) [sender=3.0.6]

[root@wyh shell]# chmod 600 /etc/rsync.password

6:服务端模块 没有read only = false 参数

2015/03/29 05:55:53 [5030] name lookup failed for 192.168.1.40: Temporary failure in name resolution

2015/03/29 05:55:53 [5030] connect from UNKNOWN (192.168.1.40)

2015/03/29 05:55:53 [5030] rsync to 192168140/ from UNKNOWN (192.168.1.40)

2015/03/29 05:55:53 [5030] ERROR: module is read only

2015/03/29 05:55:53 [5030] rsync error: syntax or usage error (code 1) at main.c(866) [receiver=3.0.6]

7:主配置文件错误

2015/03/31 18:01:26 [2717] rsync to www/ from rsync_backup@unknown (192.168.74.131)

2015/03/31 18:01:26 [2717] receiving file list

2015/03/31 18:01:26 [2717] rsync: failed to set times on "." (in www): Operation not permitted (1)

2015/03/31 18:01:26 [2717] rsync: mkstemp ".www.log.NVQSs8" (in www) failed: Permission denied (13)

2015/03/31 18:01:26 [2717] sent 251 bytes  received 131 bytes  total size 0

 

 

inotify

 

max_queue_events:监控队列大小

max_user_instances:最多监控实例数

max_user_watches:每个实例最多监控文件数

默认值:

[root@hexudong ~]# cat /proc/sys/fs/inotify/max_queued_events

16384

[root@hexudong ~]# cat /proc/sys/fs/inotify/max_user_instances

128

[root@hexudong ~]# cat /proc/sys/fs/inotify/max_user_watches

8192

调整 inotify默认配置

 

[root@sersync_server inotify-tools-3.14]# cat /proc/sys/fs/inotify/max_user_watches
50000000
[root@sersync_server scripts]# cat /proc/sys/fs/inotify/max_queued_events
3276790
[root@client scripts]# echo "50000000" > /proc/sys/fs/inotify/max_user_watches 
[root@client scripts]# echo "50000000" > /proc/sys/fs/inotify/max_queued_events

 

安装inotify

 

[root@hexudong ~]# tar xf inotify-tools-3.14.tar.gz

[root@hexudong ~]# cd inotify-tools-3.14

[root@hexudong inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify-tools-1.14

[root@hexudong inotify-tools-3.14]# make && make install

[root@hexudong bin]# echo $?

[root@hexudong inotify-tools-3.14]# ln -s /usr/local/inotify-tools-1.14/ /usr/local/inotify

 

[root@hexudong inotify]# ls

bin  include  lib  share

bin #inotify 执行命令(二进制)

include #inotify 程序所需要的头文件

lib #动态连接的库文件

share #帮助文件

 

inotifywait 命令常用参数详解

./bin/inotifywait --help

 

Events:

        access          file or directory contents were read

        文件或目录被读取

        modify          file or directory contents were written

        文件或目录内容被修改

        attrib          file or directory attributes changed

        文件或目录属性被改变

        close           file or directory closed, regardless of read/write mode

        文件或目录封闭,无论读/写模式

        open            file or directory opened

        文件或目录被打开

        moved_to        file or directory moved to watched directory

        文件或目录被移动至另一个目录

        move            file or directory moved to or from watched directory

        文件或目录被移动李ing一个目录或从另一个目录移动至当前目录

        create          file or directory created within watched directory

        文件或目录被创建在当前目录

        delete          file or directory deleted within watched directory

        文件或目录被删除

        delete_self     file or directory was deleted

        unmount         file system containing file or directory unmounted

        文件系统被卸载

 

inotify人工检测

 

[root@hexudong ~]# /usr/local/inotify/bin/inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w%f‘ -e create /backup   (-e  创建操作)

14/03/15 12:24 /backup/dd

14/03/15 12:24 /backup/sdf

 

/usr/local/inotify-tools-3.14/bin/inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w%f‘ -e delete /backup  (-e 删除)

 

时间可以,号隔开

/usr/local/inotify/bin/inotifywait -mrq  --format ‘%w%f‘ -e create,close_write,delete /backup

 

--format ‘%w%f‘ 打印指定格式的

/usr/local/inotify-tools/bin/inotifywait -mrq  --format ‘%w%f‘ -e create /backup

 

rsync+inotify 实战脚本

 

#!/bin/bash

inotify=/usr/local/inotify/bin/inotifywait

$inotify -mrq  --format ‘%w%f‘ -e create,close_write,delete /backup \

|while read file

do

  cd /backup &&

  rsync -az ./ --delete rsync_backup@192.168.74.131::backup \

  --password-file=/etc/rsync.password

done

 

--password-file=/etc/rsync.password &   在rsync.password 后面加上&符号,会让同步的更快。

如果想要日志在程序里面 >> 日志名称,就好了。

sh inotify3.sh &   直接在后面加上&即可,不用nohup 

 

rsync+inotify 优缺点

优点:实时同步

缺点:

属于全量比对,增量推送。并发时间不是很好。

Inotify  没秒200个,不要超过300个。文件50到100K左右,同步延迟

监控事件后,调用rsync同步单进程(加&并发),rsrsync多进程同步。

Sersync功能多 1 配置文件2真正的守护进程socket 3 可以对失败的文件定时重传 4 第三方http接口 5 默认多线程

 

 

sersync    向作者周洋致敬

 技术分享

 

 

 

  如图所示,用户会实时往左边同步主服务器(M)上写入或更新文件数据,此时需要在左边的同步主服务器(M)上配置sersync服务,在右边的同步目标服务器s1s2服务器上配置rsync守护进程服务,这样主服务器M上产生的写入或更新文件,就会被sersync服务实时同步到多个目标服务器(s1,s2等)。在主服务器(M)上有rsync即可,在目标服务器(S1,S2),上只需进行简单配置,并开启rsync守护进程即可。

         实际上sersync就是健康本地的数据写入或更新事件,然后,调用rsync客户端命令,将写入或更新事件对应的文件通过rsync推送到目标服务器(例如:S1,S2)。

 

Sersync 企业应用方案

 

当前服务器状况及业务特点

    服务器使用情况

    业务特点

    架构图

 

1 启动sersync 的使用启动20个进程

2 使用CPU使用一半的CPU

3 建议目录的文件变动频度在25个文件以下,程序容忍同步时间在1-2S内可以使用

4 建议使用sersync的最新版本,(sersync2.5.4*)修正了两个BUG,

修改了CPU使用率100%的问题,修改临时文件造成的程序崩溃

 

sersync说明

 

利用inotyfy与rsync技术实现对服务器实时数据同步解决方案,其中inotyfy用于监控serync所在服务器上文件系统的事件变化。只对变化的目录数据操作,甚至一个文件不同的部分进行同步,所以其优势大大超过了挂接文件系统或scp等方式进行镜像同步。

  目前使用的比较多的同步程序版本三inotify-tools,另外一个三google开源项目openduckbill(依赖于inotify-tools),这两个都是基本脚步语言编写,其设计思路同样是采用inotify与rsync命令。

http://code.google.com/p/sersync/downloads/list

 相比上面两个项目,sersync项目的优点:

1使用c++编写,对linux系统产生的临时文件和重复的文件操作会进行过滤,再结合rsync同步的时候会减少运行消耗本地的网络资源。因此速度更快。

2相比较两个项目,sersync配置简单。(分32位版本,64位版本),其中bin目录下是已经编译好的二进制文件,配合bin目录下的xml文件直接使用即可

3使用多线程进行同步(既可以兵法同步多个不同文件),尤其在同步较大文件时,能够保证多个服务器实时保持同步状态

4sersync自带出错处理机制,通过失败列队对出错的文件重新同步,如果依旧失败,则若干个小时对同步失败文件在重新同步

5sersync自带crontab功能,只需在xml配置文件准中开启,既可按预先的配置,隔一段时间同步一次

6sersync自带socket与http的协议扩展,可以满足有特殊需求的公司二次开发。

 

实战搭建:

 

1台 sersync 服务器

2 台 rsync 服务器

Rsync 服务器配置    配置2台rsync服务器

[root@hexudong ~]# cat /etc/rsyncd.conf

uid = root

gid = root

use chroot = no

max connections = 200

timeout = 300

pid file = /var/run/rsyncd.pid

lock file = /var/run/rsync.lock

log file = /var/log/rsyncd.log

ignore errors

read only = false

list = false

hosts allow = 192.168.74.0/24

hosts deny = 0.0.0.0/32

auth users = rsync_backup

secrets file = /etc/rsync.password

#rsync_config_______________end

[www]

comment= hxd 20150331

path = /data/www/www

[bbs]

path = /data/www/bbs

[blog]

path = /data/www/blog

 

echo " rsync_backup:oldboy" > /etc/rsync.password

chmod 600 /etc/rsync.password

mkdir /data/www/www /data/www/bbs /data/www/blog -p

检查是否启动成功:

ps -ef | grep rsync

netstat -lnt | grep 873

lsof -i:873      #可以查看到873对应的服务

echo "/usr/bin/rsync --daemon" >>/etc/rc.local

 

配置sersync服务器

[root@M-serve ~]# echo "oldboy" >/etc/rsync.password

[root@M-serve ~]# chmod 600 /etc/rsync.password

[root@M-serve ~]# cat /etc/rsync.password

oldboy

[root@M-serve ~]# ll /etc/rsync.password

-rw------- 1 root root 7 Mar 28 09:19 /etc/rsync.password

 

touch /data/www/bbs/bbs.log /data/www/www/www.log /data/www/blog/blog.log

创建log日志

 

测试推送是否成功。

rsync -avzP /data/www/www/ rsync_backup@192.168.74.132::www/ --password-file=/etc/rsync.password

rsync -avzP /data/www/www/ rsync_backup@192.168.74.128::www/ --password-file=/etc/rsync.password

不成功,则查看rsync的报错。

 

服务端搭建:

 

tar xf sersync2.5.4_64bit_binary_stable_final.tar.gz -C /usr/local/

cd /usr/local

mv GNU-Linux-x86/ sersync

优化目录结构:

cd sersync/

mkdir conf bin logs

mv confxml.xml conf

mv sersync2 bin/sersync

tree

 

配置confxml.xml

 

配置环境变量:

Echo "export PATH=/usr/local/sersync/bin:$PATH" >>/etc/profile

source /etc/profile

which sersync

 

启动命令:

sersync -r -d -o /usr/local/sersync/conf confxml.xml

测试结果:发现仅能第一个模块路径可以同步,其他下面的路径不能同步

多实例:

sersync -d -o /usr/local/sersync/conf/www confxml.xml

sersync -d -o /usr/local/sersync/conf/bbs confxml.xml

sersync -d -o /usr/local/sersync/conf/blog confxml.xml

 

要会修改源码哦!!!

 

sersync插件:

Command refreshCDN socket http 四种插件。http插件兼容性去除,以后会重新加入

 

实施后监控

1 NFS上同步进程监控

2 文件同步状态监控

3 同步端口监控

4 关注系统性能状况及用户访问状况

 

同步失败或不同步总结:

失败:

Sersync同步失败的文件都会记录在/usr/local/sersync/log/wikdoc_fall_log-xxx.sh中,随着文件的增大,当该文件达到几个G,sersync要开始执行的这个文件的时候,会拖死sersync主进程,造成每次使用/etc/rc.local中的名列启动刚开始是OK,过4-5个小时,进程停止的情况。

不同步:

1 启动命令不对。

2 sersync的同步瓶颈当时是测试报告中  数据变动频率20-25个的时候,sersync性能的时效性良好

3 同步主进程较多

出现最多的原因,进程退出了!!!!!

服务端写入太多了,导致主进程退出。要对同步量进行监控。

重新同步要加-r参数。

本文出自 “晴空” 博客,谢绝转载!

rsync+inotify++sersync

标签:rsync inotify sersync

原文地址:http://7179867.blog.51cto.com/7169867/1627934

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!