同步方法有很多种:
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/ [email protected]:~
pull:
rsync -avz -e ‘ssh -p 52113‘ [email protected]:~/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
[[email protected] ~]# mkdir /oldboy -p
[[email protected] ~]# useradd rsync -s /sbin/nologin -M
[[email protected] ~]# chown -R rsync.rsync /oldboy
[[email protected] ~]# rsync –daemon
echo "/usr/bin/rsync --daemon" >>/etc/rc.local
加入开机启动
查看是否成功
[[email protected] ~]# ps aux | grep rsync | grep -v grep
root 2272 0.0 0.0 107628 684 ? Ss 08:48 0:00 rsync –daemon
[[email protected] ~]# 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
客户端:
[[email protected] ~]# echo "oldboy" > /etc/rsync.password
[[email protected] ~]# chmod 600 /etc/rsync.password
推送:
[[email protected] oldboy]# rsync -avz /home/oldboy [email protected]::backup --password-file=/etc/rsync.password
拉取:
[[email protected] oldboy]# rsync -avz rsync://[email protected]/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/ [email protected]::backup --password-file=/etc/rsync.password
[[email protected] test]# rsync -avz --exclude={1,3,5} /test/ [email protected]::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/ [email protected]::oldboy --password-file=/etc/rsync.password
排除多个文件:
rsync -avz --exclude={a,b} /data1/ [email protected]::oldboy --password-file=/etc/rsync.password
rsync -avz --exclude=a --exclude=b /data1/ [email protected]::oldboy --password-file=/etc/rsync.password
rsync -avz --exclude={a..g} /data1/ [email protected]::oldboy --password-file=/etc/rsync.password
rsync -avz --exclude-from=paichu.log /data1/ [email protected]::oldboy --password-file=/etc/rsync.password
rsync 完全同步
会把远端目录内容清除:
rsync -avz --delete /tmp/ rsync://[email protected]/oldboy/ --password-file=/etc/rsync.password
本地目录内容会被清除:
rsync -avz --delete rsync://[email protected]/oldboy/ /tmp --password-file=/etc/rsync.password
rsync 优缺点
Rsync优点:
1 增量备份,支持socket,支持集中备份
Rsync缺点:
1 大量小文件时候同步的时候,比对时间较长,有的时候,rsync进程停止
2 同步大文件,10G这样的大文件爱你有时也会问题,中断,为完整同步前,隐藏文件。
rsync 多模块
[[email protected] ~]# 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服务端没有目录
[[email protected] opt]# rsync -avz /data1/ --delete rsync://[email protected]/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服务端目录权限有问题
[[email protected] opt]# rsync -avz /data1/ --delete rsync://[email protected]/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]
[[email protected] opt]# rsync -avz /data1/ --delete rsync://[email protected]/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 服务端密码权限问题
[[email protected] opt]# rsync -avz /data1/ --delete rsync://[email protected]/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]
[[email protected] 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 服务端防火墙开启
[[email protected] opt]# rsync -avz /data1/ --delete rsync://[email protected]/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 本地密码文件权限问题
[[email protected] shell]# /usr/bin/rsync -avz /opt/tomcat/ [email protected]::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]
[[email protected] 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 [email protected] (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:每个实例最多监控文件数
默认值:
[[email protected] ~]# cat /proc/sys/fs/inotify/max_queued_events
16384
[[email protected] ~]# cat /proc/sys/fs/inotify/max_user_instances
128
[[email protected] ~]# cat /proc/sys/fs/inotify/max_user_watches
8192
调整 inotify默认配置
[[email protected]_server inotify-tools-3.14]# cat /proc/sys/fs/inotify/max_user_watches
50000000
[[email protected]_server scripts]# cat /proc/sys/fs/inotify/max_queued_events
3276790
[[email protected] scripts]# echo "50000000" > /proc/sys/fs/inotify/max_user_watches
[[email protected] scripts]# echo "50000000" > /proc/sys/fs/inotify/max_queued_events
安装inotify
[[email protected] ~]# tar xf inotify-tools-3.14.tar.gz
[[email protected] ~]# cd inotify-tools-3.14
[[email protected] inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify-tools-1.14
[[email protected] inotify-tools-3.14]# make && make install
[[email protected] bin]# echo $?
[[email protected] inotify-tools-3.14]# ln -s /usr/local/inotify-tools-1.14/ /usr/local/inotify
[[email protected] 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人工检测
[[email protected] ~]# /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 [email protected]::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服务,在右边的同步目标服务器s1和s2服务器上配置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服务器
[[email protected] ~]# 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服务器
[[email protected] ~]# echo "oldboy" >/etc/rsync.password
[[email protected] ~]# chmod 600 /etc/rsync.password
[[email protected] ~]# cat /etc/rsync.password
oldboy
[[email protected] ~]# 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/ [email protected]::www/ --password-file=/etc/rsync.password
rsync -avzP /data/www/www/ [email protected]::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参数。