[原创干货]Linux下rsync+inotify进行实时数据同步备份方案

下午有空,突然想起目前vps服务器还是单机版,没有进行PHP运行文件和附件备份,说动就动。

一、目的

[原创干货]Linux下rsync+inotify进行实时数据同步备份方案 1
rsync inotify实时同步方案

把主服务器上面的Wordprss文件、MP3附件、图片、CSS、JS一起实时同步备份到国外备份服务器。

方案如下:

例如本文就是想把阿里云ECS目录/home/www/xxx下面的文件同步到国外VPS的/home/www/yyy下面。

 

二、环境介绍:

1、阿里云ECS,运行环境Centos + PHP,作为Client服务器,IP:111.111.111.111

2、国外VPS服务器,作为Master服务器(可以搭梯子,嘿嘿),IP:222.222.222.222

 

三、涉及软件

1、Client需要安装inotify,rsync。

2、Master需要安装rsync。

 

四、详细步骤

1、确认在Client服务器里面安装了inotify和rsync,如果没有安装inotify,执行命令:

yum install inotify* -y

系统会自动在线安装相关模块,安装成功,不需要单独执行。

安装rsync的方法和上面类似,不再表述。

2、Master服务器里面同样需要安装rsync。

3、对Master服务器进行rsyncd.conf配置。

     vi /etc/rsyncd.conf

新建Master服务器配置,rsync 采用socket方式传输文件,端口默认873,[module_imoongo_online_backup]开始定义一个模块,指定要同步的目录(接收)path,授权用户,密码文件,允许哪台服务器IP同步(发送)等:

uid=root

gid=root

use chroot=no

max connections=10

timeout=600

strict modes=yes

port=873

pid file=/var/run/rsyncd.pid

lock file=/var/run/rsyncd.lock

log file=/var/log/rsyncd.log

[module_imoongo_online_backup]

path=/home/www/yyy    //文件同步过来后,存放的地址

comment=this is iMoongo all sites files

read only = no

auth users=imoongo   //允许请求的账户

uid=0

gid=0

secrets file=/etc/rsyncd.secrets

read only=no

list=no

hosts allow=111.111.111.111  //允许请求的IP

hosts deny=0.0.0.0/32

4、对Master服务器进行/etc/rsyncd.secrets配置。

vi /etc/rsyncd.secrets

新建文件后,里面内容格式: 用户名:密码。请注意这里的用户名和密码与操作系统的用户名密码无关,可以随意指定,与/etc/rsyncd.conf中的auth users对应。

imoongo:password

修改权限:chmod 600/etc/rsyncd.secrets

5、Master服务器启动rsync后台服务

修改/etc/xinetd.d/rsync文件,disable 改为 no 。

执行 service xinetd restart

如果发现提示没有xinetd服务,请执行在线安装命令: yum install xinetd 即可。

如果服务器有防火墙,请执行:

iptables -A INPUT -p tcp -m state --state NEW -m tcp --dport 873 -j ACCEPT

如果selinuxm没有关闭,可能会由于强访问控制导致同步报错,请执行:

修改/etc/selinux/config 文件,将SELINUX=enforcing改为SELINUX=disabled,重启机器即可。

至此,Master服务器的rsync服务已经配置完成,接下来配置客户端rsync。

6、client服务器已经安装完毕inotify和rsync,单向同步时,客户端只需要一个包含密码的文件,执行:vi /etc/rsync_client.pwd

写入密码(该密码和服务器文件/etc/rsyncd.secrets里面的密码一样):

password

赋600权限,执行:chmod 600 /etc/rsync_client.pwd

至此,Client服务器rsync服务配置完毕。

 

五、数据同步备份

下面有2种同步方式,无论是哪种同步,其核心一定是把client里面的数据备份到master指定目录里面,下面两种同步脚本都是在Client服务器上面执行。

1、定时同步,通过定时器crond + rsync,完成一定频率的数据同步, 新建脚本,执行:

vi /root/backup/rsync_iMoongo.sh

定时同步脚本如下:

#!/bin/bash

nohup /usr/bin/rsync -vzrtopg -P –progress –password-file=/etc/rsync_client.pwd /home/www/xxx/ imoongo@222.222.222.222::module_imoongo_online_backup &

解释:

  •  /etc/rsync_client.pwd  –是要读取Client配置的rsync的密码,这里为:passowrd,和Master文件中/etc/rsyncd.secrets冒号右边密码一样。
  • /home/www/xxx/  –意思是读取当前目录下面所有的文件(不包括xxx目录名称)。
  • imoongo  –Master中的auth users
  • 222.222.222.222 //Master服务器IP地址
  • module_imoongo_online_backup //Master服务器的地址信息

Crond定时器配置如下:

*/120 * * * * /root/backup/./rsync_iMoongo.sh

每隔两小时增量同步一次。

ps:在执行定时器同步之前,请先手动执行rsync_iMoongo.sh,保证两个服务器之间数据一致,后期执行定时器,就是增量同步了。

 

2、实时同步,通过inotify + rsync,完成数据的实时同步,脚本如下:

#!/bin/bash

host=222.222.222.222

src=/home/www/xxx/

des=module_imoongo_online_backup

user=imoongo

/usr/bin/inotifywait -mrq –timefmt ‘%d/%m/%y %H:%M’ –format ‘%T %w%f%e’ -e modify,delete,create,attrib $src | while read files

do

nohup /usr/bin/rsync -vzrtopg -P –progress –password-file=/etc/rsync_client.pwd $src $user@$host::$des &

done

ps:

  • 上述2个shell脚本,如要执行,请先赋764或者777。
  • 也可以通过命令把master上面文件down到client,大致脚本如下:
  • nohup /usr/bin/rsync -vzrtopg -P –progress –password-file=/etc/rsync_client.pwd  imoongo@222.222.222.222::module_imoongo_online_backup  /home/www/xxx/  &
  • 最好把上述配置文件里面的//注释都删除。

至此,本次干活分享完毕,希望对大家有帮助。

 

参考文件:https://segmentfault.com/a/1190000002427568

 

 

 

17 评论

发表评论