设为首页 收藏本站
查看: 1050|回复: 1

[经验分享] Rsync+inotify 实现实时同步数据文件

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-2-16 10:08:14 | 显示全部楼层 |阅读模式
什么是Rsync?
rsync可以实现增量备份,配合inotify可以实现时事的数据备份

Rsync的三种工作模式
1)本地备份,相当于 cp 命令
将 /etc/hosts 文件拷贝到 /tmp/ 目录下
rsync -avz /etc/hosts /tmp/
删除一个目录
先新建一个空目录,然后使用 rsync 命令同步
mkdir /zhao
添加 --delete参数,目录 zhao 为空
rsync --delete /zhao/ /tmp/
命令解释:以前面的目录为准,前面目录有啥后面目录有啥,前面目录没有的,后面目录也不能有
2)通过网络远程 shell
push(推)
将本地的 /tmp/ 目录中的内容推到 192.168.133.130 的 /opt/ 目录下
rsync -avzP -e 'ssh -p 22' /tmp/ root@192.168.133.130:/opt/
pull(拉)
将 192.168.133.130 的 /tmp/ 目录下的文件拉到本地的 /opt/ 目录下
如果下面的命令 /tmp/ 写为 /tmp 则拉去的是 tmp 的整个目录
rsync -avzP -e 'ssh -p 22' root@192.168.133.130:/tmp/ /opt/
3)daemon模式

daemon是我们平时工作中最长用的一种模式,本篇文章也主要是介绍的daemon模式

rsync 客户端的常用参数

-a 归档模式,表示以递归方式传输文件,并保持所有文件属性
-v 详细模式输出,传输时的进度等信息
-z 传输时进行压缩以提高传输效率
-r 对子目录以递归模式,即目录下的所有目录都同样传输,注意是小写r
-t 保持文件时间信息
-o 保持文件属主信息
-p 保持文件权限
-g 保持文件属组信息
-P 显示同步的过程及传输时的进度等信息
-D 保持设备文件信息
-l 保留软连接

配置 daemon 模式
在配置 daemon 模式前需要准备两台虚拟机,我的虚拟机是CentOS6.7 64位
两台的系统都一样,详细截图如下
uname -r
cat /etc/redhat-release      

wKioL1ikjL_A1X4BAAASvrFVaDo225.jpg
正常情况下系统默认就已经安装 rsync,所以我们需要先检查一下两台机器是否已经安装
这里我只截图了一张,但是两台必须都有 rsync 哈
rpm -qa | grep rsync
wKiom1ikjMDCXri7AAAK2SxS3C8601.jpg

rsync daemon 端操作如下
rsync 默认没有配置文件,那么我们就手动在 daemon 端创建配置文件
touch /etc/rsyncd.conf
编辑 rsyncd.conf 文件
vim /etc/rsyncd.conf
文件内容如下
#Rsync server
#yuci
uid = rsync
gid = rsync
use chroot = no
max connections = 2000
timeout = 600
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.0.0/24
hosts deny = 0.0.0.0/32
auth users = rsync_backup
secrets file = /etc/rsync.password
###################################
[backup]
comment = www by yuci
path = /backup

添加 rsync 用户
useradd -s /sbin/nologin -M rsync
启动 rsync
rsync --daemon
检查 873 端口是否开启
netstat -tlunp | grep 873
wKioL1ikjMGj-zvYAAAVCHAFnpg626.jpg

创建共享目录
mkdir /backup
并将 /backup 目录的属主改为 rsync 用户
chown -R rsync /backup/
wKiom1ikjMGBf0JOAAAOpnQSPiU078.jpg
因为后面还需要用到 inotify 配合脚本做实时同步,所以需要创建一个密码文件
用户就是之前 rsyncd.conf 文件中的 auth rsync 用户
echo "rsync_backup::123456" > /etc/rsync.password
wKioL1ikjMLBY4heAAALM-gfOwc003.jpg
安全考虑还需要更改该文件的权限
chmod 600 /etc/rsync.password
wKioL1ikjMLii2yWAAAN09TdaEM367.jpg
将该服务加到开机自动中
echo "rsync --daemon" >> /etc/rc.local
tail -1 /etc/rc.local
wKiom1ikjMPx3Yw2AAAPqzgsZIw863.jpg
到此为止,rsync 的 daemon 端操作完成

rsync 客户端的操作
还是在 client 端查看系统中安装了 rsync 软件
rpm -qa | grep rsync     

wKioL1ikjMPgH9xJAAAKpfQTsqI541.jpg

创建一个密码文件,内容只需要有密码即可
因为我们下面连接时,必须要指定连接的用户,并修改这个文件的权限
echo "123456" > /etc/rsync.password
chmod 600 /etc/rsync.password

现在开始测试服务是否搭建成功,在测试前介绍一下环境
服务端:daemon  地址 192.168.133.131
客户端:client  地址 192.168.133.130
现在我在 client 端测试推送功能,在 133.130 机器的 /tmp/ 目录里我创建了从1到5的5个目录,尝试推送到 133.131 的 /backup 目录中
rsync -avz /tmp/ rsync_backup@192.168.133.131::backup --password-file=/etc/rsync.password
wKioL1ikjMSjy-NlAAAu8SrDna4462.jpg
在 133.131 上查看 /backup 目录
wKioL1ikjMbR8RauAAAINL6OqIY113.jpg
推送成功。      


继续返回到 133.130 上测试拉取服务
我将 133.130 的 /tmp 目录清空,尝试拉取 133.131 上的 /backup 目录中的文件
rsync -avz rsync_backup@192.168.133.131::backup /tmp/ --password-file=/etc/rsync.password
wKiom1ikjMfTp_AsAAA7--CP0Uo347.jpg
拉取成功。
可以通过以下脚本配合定时任务完成简单的数据备份

脚本内容如下
#!/bin/bash
path=/backup
dir="`ifconfig eth0 | awk -F '[ :]+' 'NR==2 {print $4}'`_$(date +%F)"
mkdir $path/$dir -p && \
/bin/cp /var/spool/cron/root $path/$dir/cron_root_$(date +%F) && \
/bin/cp /etc/rc.local $path/$dir/rc.local_$(date +%F) && \
rsync -az $path/ rsync_backup@192.168.133.131::backup/ --password-file=/etc/rsync.password
定时任务,每一小时同步一次增量备份(定时任务做好写绝对路径)
00 01 * * * /bin/sh /root/bak.sh > /dev/null 2>&1
每一小时同步一次,在某些情况下似乎达不到预期的标准,那么就需要配合 inotify 进行实时同步了

安装 inotify 软件
安装 inotify 软件的前提 rsync 服务安装成功,可以在客户端推送拉取数据
另外:inotify 是在客户端配置安装的软件,别装错了
检查系统的内核版本,必须要在 2.6.16 以上才可以
uname -r
wKiom1ikjMijWU2nAAAI7Fn1Rlw113.jpg
查看是否有以下三个文件,有这三个文件才表示系统支持 inotify 服务
ls -l /proc/sys/fs/inotify/
wKiom1ikjMiwGI3rAAAXqXTcP0E553.jpg

编译安装 inotify
tar zxf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure --prefix=/usr/local/inotify-tools-3.14
make && make install

做一个软连接,取出版本号
ln -s /usr/local/inotify-tools-3.14/ /usr/local/inotify

inotify 安装目录下的各目录介绍
bin   #inotify执行命令(二进制)
include   #inotify程序所需用的头文件
lib   #动态链接的库文件
share   #帮助文档

手动测试监控,下面的实验是在本机上操作
因为测试监控的是 133.130 上的 /backup 目录,所以需要创建一个 backup 目录,监控 create 命令
mkdir /backup
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d%m%y %H:%M' --format '%T %w%f' -e create /backup
(-m  持续监听状态)
在新开一个窗口,在 /backup 目录下创建文件和目录,在之前的窗口查看有无反应
在新窗口下操作
touch test.txt
mkdir zhao
wKioL1ikjMjCKQoaAAATrIWSDug264.jpg
在之前的窗口中查看
wKioL1ikjMnCKVkJAAAx1ce2Mxo828.jpg
检测成功。那么我们只需要结合 rsync 的通过推送命令,就可以实现实时同步了。

最终的实时同步脚本命令
#!/bin/bash
host01=192.168.133.131
src=/backup
dst=backup/
user=rsync_backup
rsync_passfile=/etc/rsync.password
inotify_home=/usr/local/inotify/
#panduan
if [ ! -e "$src" ] \
|| [ ! -e "${rsync_passfile}" ] \
|| [ ! -e "${inotify_home}/bin/inotifywait" ] \
|| [ ! -e "/usr/bin/rsync" ];
then
   echo "Check File and Folder"
   exit 9
fi
${inotify_home}/bin/inotifywait -mrq --format '%w%f' -e create,close_write,delete,attrib $src | \
while read line
do
   cd $src && rsync -aruz -R --delete ./ --timeout=100 $user@$host01::$dst --password-file=${rsync_passfile} > /dev/null 2>&1
done
exit 0


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-342869-1-1.html 上篇帖子: 虚拟机中配置RHEL6实验系统 下篇帖子: 编译安装mysql5.5.28 Linux 网络
累计签到:335 天
连续签到:1 天
发表于 2017-2-20 08:59:18 | 显示全部楼层
很详细,有图有真相,谢谢楼主,您费心了

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表