发布于 2016-01-06 08:23:25 | 202 次阅读 | 评论: 0 | 来源: PHPERZ
rsync 数据同步
rsync是类unix系统下的数据镜像备份工具,从软件的命名上就可以看出来了——remote sync。
rsync同步
mall1和mall2、mall3的同步
mall2、3同步mall1上更新的内容:此时:mall2、3为服务器端,mall1为客户端
mall2、mall3上的安装配置:
===========================================================================================
apt-get install -y rsync(安装rsync)
sudo find / -name rsyncd.conf
/usr/share/doc/rsync/examples/rsyncd.conf(rsync的配置文件的默认安装路径)
sudo cp /usr/share/doc/rsync/examples/rsyncd.conf /etc/ (复制配置文件到/etc/目录下)
===========================================================================================
sudo vi /etc/rsyncd.conf(编辑配置文件为你需要的内容)
[global]##全局选项
uid = ubuntu#指定该模块传输文件时守护进程应该具有的uid
gid = sudo#指定该模块传输文件时守护进程应该具有的gid
use chroot = no##是否让进程离开工作目录
max connections = 10#客户端最大连接数,默认0(没限制)
pid file = /var/run/rsyncd.pid#运行进程的ID写到哪里
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log#日志记录文件
[mall] # 这里是认证的模块名,在client端需要指定
path=/home/ubuntu/data/web/mall.hiigame.com# 需要做备份的目录
comment = update #备注同步项
ignore errors#可以忽略一些无关的IO错误
read only = no#no客户端可上传文件,yes只读
list = no #用于设定当客户请求可以使用的模块列表,该模块是否被列出,默认为true
host allow = 10.133.200.125#充许连接连接的主机(*为任何主机)
auth users = test # 认证的用户名,如果没有这行,则表明是匿名
uid = ubuntu
gid = sudo
secrets file = /etc/rsync.pass # 指定认证口令文件位置
[statics]
path=/home/ubuntu/data/web/statics.hiigame.com
comment = update
ignore errors
read only = no
list = no
host allow = 10.133.200.125
auth users = test
uid = ubuntu
gid = sudo
secrets file = /etc/rsync.pass
===========================================================================================
编辑认证口令文件:文件名与配置文件中的路径一样
vi /etc/rsync.pass
test:123456789(认证用户名:认证口令)
chmod 600 /etc/rsync.pass (修改权限,只有root用户才可执行)
(备注)注意:密码文件的权限,是由rsyncd.conf里的参数
strict modes =yes/no 来决定:#是否检查口令文件的权限
rsync的启动:sudo /etc/init.d/rsync (start| restart| stop)
==========================================================================================
ubuntu@VM-200-27-ubuntu:~$ ps -aux | grep rsync (rsync进程)
Warning: bad ps syntax, perhaps a bogus '-'? See http://procps.sf.net/faq.html
root 1109 0.0 0.0 11004 732 ? S 2015 0:05 /usr/bin/rsync --no-detach --daemon --config /etc/rsyncd.conf
ubuntu@VM-200-27-ubuntu:~$ netstat -an | grep 873 (rsync端口)
tcp 0 0 10.133.200.27:873 0.0.0.0:* LISTEN
===========================================================================================
客户端的配置:
apt-get intall rsync inotify-tools (安装客户端的配置)
#sudo vim /etc/rsync.pass(与服务器端相互对应,口令文件 ,只需要有口令即可)
123456789
编写监控脚本并加载到后台执行
vi /home/ubuntu/data/bin/rsync_mall.sh
#!/bin/bash
src=/home/ubuntu/data/web/mall.hiigame.com/
des=mall#模块标签
host1="10.133.200.27"#监控主机ip
host2="10.133.200.135"
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib,move $src | while read files
do
rsync -qzrtopg --exclude-from=/home/ubuntu/data/bin/rsync.list --delete --progress --password-file=/etc/rsync.pass $src test@$host1::$des
rsync -qzrtopg --exclude-from=/home/ubuntu/data/bin/rsync.list --delete --progress --password-file=/etc/rsync.pass $src test@$host2::$des
done
echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
==========================================================================================
案例二
脚本路径/home/ubuntu/
vi gameserver.sh
#!/bin/bash
src=/home/ubuntu/data/nfs/
des1=game
host1="10.133.193.230"
host2="10.105.16.128"
inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib,move $src | while read files
do
rsync -qzrtopg --delete --progress --password-file=/etc/rsync.pass $src test@$host1::$des1
rsync -qzrtopg --delete --progress --password-file=/etc/rsync.pass $src test@$host2::$des1
# rsync -qzrtopg --delete --progress --exclude-from=/home/wolfplus/bin/rsync.list --password-file=/etc/rsync.pass $src test@$host6::$des6
done
echo "${files} was rsynced" >>/tmp/rsync.log 2>&1
放在后台执行
./gameserver.sh &
====================================================================================
inotify之inotifywait命令常用参数详解
[root@inotify-master inotify-tools-3.14]# cd /usr/local/inotify-3.14/
[root@inotify-master inotify-3.14]# ./bin/inotifywait --help
-r|--recursive Watch directories recursively. #递归查询目录
-q|--quiet Print less (only print events). #打印监控事件的信息
-m|--monitor Keep listening for events forever. Without this option, inotifywait will exit after one event is received. #始终保持事件监听状态
--excludei <pattern> Like --exclude but case insensitive. #排除文件或目录时,不区分大小写。
--timefmt <fmt> strftime-compatible format string for use with %T in --format string. #指定时间输出的格式
--format <fmt> Print using a specified printf-like format string; read the man page for more details.
#打印使用指定的输出类似格式字符串
-e|--event <event1> [ -e|--event <event2> ... ] Listen for specific event(s). If omitted, all events are listened for. #通过此参数可以指定需要监控的事件,如下所示:
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 #文件或目录被移动另一个目录或从另一个目录移动至当前目录。
create file or directory created within watched directory #文件或目录被创建在当前目录
delete file or directory deleted within watched directory #文件或目录被删除
unmount file system containing file or directory unmounted #文件系统被卸载