rsync+inotify实时数据同步

rsync在同步数据时,需要扫描所有文件后进行比对,进行差量传输。
inotify 是一种文件系统的变化通知机制,如文件增加、删除等事件可以立刻让用户得知。
首先,如果文件数量达到了百万甚至千万量级,扫描所有文件将是非常耗时的,并且正在发生变化的往往是其中很少的一部分,这是非常低效的方式。
其次,rsync不能实时的去监测、同步数据,虽然它可以通过linux守护进程的方式进行触发同步,但是两次触发动作一定会有时间差,这样就导致了服务端和客户端数据可能出现不一致,无法在应用故障时完全的恢复数据。
基于以上两种情况,可以使用rsync+inotify的组合来解决,可以实现数据的实时同步。

安装:
服务端:rsync
客户端:rsync,inotify
服务端:在这里插入图片描述

配置rsync:

vim /etc/rsyncd.conf

log file=/var/log/rsuncd.log //指定日志文件名称,rsync启动后会自动创建该文件
pid file=/var/run/rsyncd.pid //pid的文件位置
lock file=/var/run/rysnc.lock //支持max connections参数的锁文件
secrets file=/etc/rsync.pass //用户认证文件,保存用户名及密码
motd file=/etc/rsyncd.motd //rsync启动时保存欢迎信息的文件

[app] //同步目录名称描述,建议与同步目录同名
path=/app //数据目录位置
comment=/app
uid=root //设置rsync运行权限为root
gid=root //设置rsync运行权限为root
port=873 //默认端口号
use chroot=no //默认为true,表示不同步软连接文件,改为no表示同步软连接
read only=no //设置rsync服务端为读写文件
list=no //不显示rsync服务端的资源列表
max connections=200 //最大连接数
timeout=600 //超时时间
auth users=root //执行数据同步的用户名,多个用逗号隔开
hosts allow=192.168.121.客户端ip //允许进行同步的IP地址,多个IP用都好隔开

创建用户认证文件:

vim /etc/rsync.pass

root:123456
格式: username:password 一行一个用户信息

权限设置

分别将配置文件和用户认证文件权限修改为600
chmod 600 /etc/rsyncd.conf
chmod 600 /etc/rsync.pass

启动服务

systemctl start rsyncd
netstat -antp|grep :873
服务端rsync部署成功

客户端: 安装rsync

创建用户认证文件

vim /etc/rsync.pass //该文件只保存目标服务器上的认证密码
123456
chmod 600 /etc/rysnc.pass

验证数据同步

客户端/root/app目录下创建文件
touch {a,b,c}.file
ls /app/
a.file b.file c.file

通过运行rsync命令,将客户端/app下的文件同步到服务端的/app下

rsync -avH --port=873 --progress --delete /app/ root@192.168.121.服务端ip::app --password-file=/etc/rsync.pass

命令说明:
-a:递归传输文件,并保留文件所有属性
-v: 显示详细过程
-H: 保留硬链接
–progress:显示备份过程
–delete:同步时,会删除目的服务器中目录中源服务器中没有的文件
/app/: 源数据目录,最后一个/表示同步时只同步子文件及目录; 如果不加/,表示整个/testdir目录都会同步的目标服务器
root@10.1.1.2::app: root同步用户, 目标服务器中的目录只需要写目录名称即可
–password-file=/etc/rsync.pass: 指定密码文件

在服务端/app下看文件是否创建成功,文件同步则成功

安装inotify

客户端上安装inotify,实时监测源目录的变化实现实时同步
通过源码编译来安装inotify
yum install –y gcc*
tar zxf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14/
./configure --prefix=/usr/local/inotify
make && make install

配置inotify,修改环境变量PATH

vim /etc/profile

export PATH=$PATH:/usr/local/inotify/bin
source /etc/profile //刷新环境变量

导出inotify库文件

echo “/usr/local/inotify/lib” > /etc/ld.so.conf.d/inotify.conf
ldconfig //刷新

导出inotify头文件

ln -s /usr/local/inotify/include/ /usr/include/inotify

改inotify内核参数(默认inotify参数太小)

vim /etc/sysctl.conf
fs.inotify.max_queued_events=9999999
fs.inotify.max_user_watches=99999999
fs.inotify.max_user_instances=65535

sysctl –p //使参数生效

编写脚本

创建脚本,根据inotify的监测事件,触发rsync同步

vim rsync.sh

#!/bin/bash
srcdir=/root/app/
dstdir=app
excludedir=/usr/local/inotify/exclude.list
rsyncuser=root
rsyncpassdir=/etc/rsync.pass
dstip=10.5.96.13

/usr/local/inotify/bin/inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M’ --format ‘%T %w%f’ -e modify,delete,create,attrib $src
dir | while read filedo
/usr/bin/rsync -vzrtopg --delete --progress $srcdir r s y n c u s e r @ rsyncuser@ rsyncuser@dstip:: d s t d i r − − p a s s w o r d − f i l e = dstdir --password-file= dstdirpasswordfile=rsyncpassdir
echo “${file} was rsynced” >> /var/log/rsync.log 2>&1

chmod a+x rsync.sh //给脚本添加执行权限

自动实时同步

通过设置脚本开机自动运行,或者通过计划任务自动运行该脚本,即可实现自动实时同步
计划任务方式:
crontab -e

          • /root/rsync.sh &> /dev/null

设置脚本开机自启
vim /etc/rc.d/rc.local
/root/rsync.sh &> /dev/null

============================================

rsync+crontab 计划任务文件同步

服务端:

1 yum -y install rsync
2 mkdir /root/abc
cd /root/abc
touch aaa
3 vim /etc/rsyncd.conf

uid = nobody //设置rsync运行权限
gid = nobody //设置rsync运行权限
use chroot = yes
address = 192.168.172.131
port 873 //默认端口号
log file = /var/log/rsyncd.log //指定日志文件名称,rsync启动后会自动创建该文件
pid file = /var/run/rsyncd.pid //pid的文件位置
hosts allow = 192.168.172.0/24 //允许进行同步的IP地址,多个IP用都好隔开

[wwwroot] //同步目录名称描述,建议与同步目录同名
path = /root/abc //数据目录位置
comment = Document Root of www.51xit.top
read only =no
dont comperss = *.gz *.bz2 *.tgz *.zip *.rar .z
auth users =backuper //执行数据同步的用户名,多个用逗号隔开
secrets file = /etc/rsyncd_users.db //用户认证文件,保存用户名及密码
4 cat /etc/rsyncd_users.db
backuper:pwd123
chmod 600 /etc/rsyncd_users.db
systemctl stop firewalld
5 rsync --daemon
netstat -anpt |grep rsync
tcp 0 0 192.168.172.131:873 0.0.0.0:
LISTEN 12173/rsync

客户端

yum -y install rsync
systemctl stop firewalld
mkdir /root/abc
chmod 777 /root/abc
vi /etc/server.pass
pwd123

chmod 600 /etc/server.pass
rsync -az --password-file=/etc/server.pass backuper@192.168.172.131::wwwroot /root/abc
cd abc/
ll
在这里插入图片描述

crontab -e
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值