|
服务端:
yum install rsync xinetd -y
创建配置文件
vim /etc/rsyncd.conf
log file = /var/log/rsyncd.log #日志存放路径
pidfile = /var/run/rsyncd.pid #pid存放路径
lock file = /var/run/rsync.lock #支持max connections参数的锁文件
secrets file = /etc/rsync.password #用户认证配置文件,里面保存用户名称和密码,后面会创建这个文件
motd file = /etc/rsyncd.motd #rsync启动时欢迎信息页面文件位置(自己创建这个文件,内容随便自定义)
[data] #模块名称
path = /usr/local/mysql/data #rsync服务端数据目录路径,即同步到目标目录后的存放路径,
comment = data #和模块名称一样
uid = 0 #uid权限
gid = 0 #gid权限
port=873 #端口号
use chroot = no #默认为true,修改为no或false,增加对目录文件软连接的备份
read only = no #设置rsync服务端文件为读写权限
list = no #不显示rsync服务端资源列表
max connections = 200 #最大连接数
timeout = 600 #设置超时时间
auth users = test #执行数据同步的用户名,需要后面手动设置。可以设置多个,用英文状态下逗号隔开
hosts allow = 192.168.1.184 #允许进行同步的客户端地址,可以有多个,但是用逗号隔开
hosts deny = 192.168.1.194 #禁止数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开(如果没有禁止,就不用设置这一行)
设置密码文件
vim /etc/rsync.password
格式是:
用户:密码
chmod 600 /etc/rsyncd.conf
chmod 600 /etc/rsync.password
/etc/init.d/xinetd restart
创建rsync同步过来后的目标目录
mkdir /usr/local/mysql/data -p
元数据服务器:
查看是否支持inotify,有下列文件,就是支持
ll /proc/sys/fs/inotify/
total 0
-rw-r--r-- 1 root root 0 Jul 25 15:57 max_queued_events
-rw-r--r-- 1 root root 0 Jul 25 15:57 max_user_instances
-rw-r--r-- 1 root root 0 Jul 25 15:57 max_user_watches
yum install make gcc gcc-c++
yum install rsync xinetd -y
vim /etc/rsync.password
格式:
只写密码
wget http://github.com/downloads/rvoi ... y-tools-3.14.tar.gz
tar xf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure --prefix=/usr/local/inotify && make && make install
vim /etc/profile
export PATH=$PATH:/usr/local/inotify/bin
source /etc/profile
添加库文件
vim /etc/ld.so.conf
/usr/local/inotify/lib
ldconfig
修改inotify默认参数(inotify默认内核参数值太小)
sysctl -w fs.inotify.max_queued_events="99999999"
sysctl -w fs.inotify.max_user_watches="99999999"
sysctl -w fs.inotify.max_user_instances="65535"
参数说明:
max_queued_events:
inotify队列最大长度,如果值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确
max_user_watches:
要同步的文件包含多少目录,可以用:find /Data/xqsj_upload -type d | wc -l 统计这些源目录下的目录数,必须保证max_user_watches值大于统计结果(这里/Data/xqsj_upload为同步的源文件目录)
max_user_instances:
每个用户创建inotify实例最大值
启动:
/etc/init.d/xinetd restart
lsof -i:873
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
xinetd 31135 root 5u IPv6 69298 0t0 TCP *:rsync (LISTEN)
测试:
在源服务器上执行:
第一次全量同步:
rsync -avz --port=873 --progress --delete /usr/local/mysql/data/ test@192.168.1.187::data --password-file=/etc/rsync.password
rsync -avz --port=873 --progress --delete /usr/local/mysql/data/ test@192.168.1.187::data --password-file=/etc/rsync.password
待第一次rsync全量同步完成后,就进行rsync+inotify实时同步脚本操作
自动同步数据:
vim rsync_inotify.sh
#!/bin/bash
SRCDIR=/data/
USER=test
IP=192.168.1.187
DESTDIR=data
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib,move $SRCDIR | while read file
do
/usr/bin/rsync -avz --port=873 --progress --delete-before $SRCDIR $USER@$IP::$DESTDIR --password-file=/etc/rsync.password
echo " ${file} was rsynced" >> /tmp/rsync.log 2>&1
done
后台执行:
nohup sh rsync_inotify.sh &
查看是否执行:
ps -ef |grep inotify
root 31195 1408 0 17:41 pts/0 00:00:00 sh rsync_inotify.sh
root 31196 31195 0 17:41 pts/0 00:00:00 /usr/local/inotify/bin/inotifywait -mrq --timefmt %d/%m/%y %H:%M --format %T %w%f%e -e close_write,modify,delete,create,attrib,move /data/
root 31197 31195 0 17:41 pts/0 00:00:00 sh rsync_inotify.sh
root 31279 1408 0 17:52 pts/0 00:00:00 grep inotify
测试是否能够自动同步数据:
比如在源目录/data/中创建一个文件或目录,会自动实时同步到目标机器192.168.1.187的目标目录/usr/local/mysql/data中。
参数说明:
所以,最好在使用rsync同步命令的时候,后面跟-avpgolr参数组合(将上面的-avz改成-avpgolr)
-a:递归
-v:打印详细过程
-p:保持文件属性
-g:文件所属组不变
-o:文件所属者不变
-l:软连接属性
-r:同步目录时的参数
|
|
|