rsync+inotify实现两台服务器某个目录及其子目录下的文件的同步

1.说明

将主服务器(源服务器)的文件备份到从服务器(目标服务器)上。通过inotify监听源服务器上 /var/www 目录下文件的新增、修改、删除等事件,当触发事件时,调用 rsync 实现将文件同步到目标服务器相同的目录下。
源服务器:10.1.5.43 简称43
目标服务器:10.1.5.44 简称44

2.同步实现

2.1目标服务器(44)与源服务器(43)都需要安装rsync

安装rsync

yum -y install rsync

2.2在目标服务器(44)执行以下操作

修改/etc/rsyncd.conf,配置如下内容

vim /etc/rsyncd.conf

rsyncd.conf 添加以下配置信息

uid = root
gid = root
use chroot = yes
#最大连接数
max connections = 10
#日志文件
log file = /var/log/rsyncd.log
pid file = /var/run/rsyncd.pid
motd file = /etc/rsyncd.motd

#保留发送日志
transfer logging = yes
#超时时间
timeout = 900

[vsftpd]
    #路径,若修改同步目录,需要修改此处,需要和源服务器脚本(inotify.sh)中的 src 一致
    path = /var/www
    #忽略错误
    ignore errors
    #如果为true,则不能上传文件到该模块的目录下,推数据使用.
    read only = false
    #指定密码文件
    secrets file = /etc/rsync.password

可以看到,/etc/rsyncd.motd、/var/log/rsyncd.log与/etc/rsync.password默认是没有的,需要我们自己touch。touch好后,在/etc/rsync.password里面需要写上用户名与对应的密码,密码随意,这里以vsftpd为例。在/etc/rsyncd.motd中写上一些登录提醒信息,内容随意。

vim /etc/rsyncd.motd

rsyncd.motd 添加以下提醒信息

Welcome!

创建 rsyncd.log 文件

touch /var/log/rsyncd.log

创建 rsync.password 文件

touch /etc/rsync.password

rsync.password 添加以下信息
文件格式是 用户名:密码

vsftpd:123456

设置文件权限,只设置文件所有者具有读取、写入权限即可

chmod 600 /etc/rsync.password

2.3在源服务器(43)执行以下操作

创建认证密码文件,只需要密码,不需要用户

vim /etc/rsyncp.password

rsyncp.password 添加目标服务器 rsync.password 文件中配置的用户对应的密码
只需要密码,不需要用户

123456

设置文件权限,只设置文件所有者具有读取、写入权限即可

chmod 600 /etc/rsyncp.password

2.4在源服务器(43)安装inotify-tools工具

yum -y install inotify-tools

2.5在源服务器(43)创建同步脚本

创建脚本存放目录

mkdir /opt/product/scripts

创建脚本

touch /opt/product/scripts/inotify.sh

编写脚本

vim /opt/aspire/product/scripts/inotify.sh

inotify.sh 添加以下内容

#!/bin/bash
# 需要同步的路径,若修改同步目录,需要修改此处,需要和目标服务器中rsyncd.conf 的 path 一致
src=/var/www
# 目标服务器上 rsync --daemon 发布名称
des=vsftpd
# rsync验证的密码文件
rsync_passwd_file=/etc/rsyncp.password
# 目标(备份)服务器,注意要更换为自己的目标服务器 ip
ip=10.1.5.44
# rsync --daemon定义的验证用户名
user=vsftpd
cd ${src}
/usr/bin/inotifywait -mrq --format '%Xe %w%f' -e create,delete,attrib,close_write,move ./ $src |while read file
do
    # 把inotify输出切割 把事件类型部分赋值给INO_EVENT
    INO_EVENT=$(echo $file |awk '{print $1}')
    # 把inotify输出切割 把文件路径部分赋值给INO_FILE
    INO_FILE=$(echo $file |awk '{print $2}')
    echo "--------------------$(date)---------------------"
echo ${INO_FILE}
    # 判断事件类型
    if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]]
    then
        echo 'CREATE or CLOSE_WRITE or MOVED_TO'
        echo $(dirname ${INO_FILE})
        rsync -avzcR --exclude *.swp --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip}::${des}
    fi
    if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]
    then
        echo 'DELETE or MOVED_FROM'
        echo $(dirname ${INO_FILE})
        rsync -avzR --exclude *.swp --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip}::${des}
    fi
    if [[ $INO_EVENT =~ 'ATTRIB' ]]
    then
        echo 'ATTRIB'
        if [ ! -d "$INO_FILE" ]
        then
            rsync -avzcR --exclude *.swp --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip}::${des}
        fi
    fi
done

当对目录修改用户权限时,只有其目录下的文件发生修改后才可以修改成功!
移动文件时,移动文件的目录必须是 /var/www目录及其子目录下,否则目标服务器上的文件会丢失!

修改脚本权限

chmod 755 /opt/aspire/product/scripts/inotify.sh

2.6 在源服务器(43)启动脚本

cd /opt/product/scripts
bash -s /opt/product/scripts/inotify.sh
nohup bash /opt/product/scripts/inotify.sh &

/opt/product/scripts/nohup.out文件中有传输日志
文件同步开始

3.更换同步目录

将inotify.sh脚本任务关闭,修改目标服务器的/etc/rsyncd.conf配置文件的 path 和源服务器的inotify.sh同步脚本中的 src, 将这两处修改为需同步目录,然后重启脚本。例:若同步目录为 /home/test,将 /var/www 修改为 /home/test

4. 源服务器(43)异常处理

4.1 说明

当源服务器(43)有异常时,把目标服务器(44)作为新的源服务器,源服务器(43)作为目标服务器,两台服务器主从互换。

4.2 准备工作

在源服务器(43)执行2.2操作
在目标服务器(44)执行2.3操作
在目标服务器(44)执行2.4操作
在目标服务器(44)执行2.5操作,注意将同步脚本中的 ip 修改为10.1.5.43

4.3 操作

将源服务器(43)的同步脚本关闭
ps -ef | grep inotify.sh
共有三个进程(/opt/aspire/product/scripts/inotify.sh),全部杀掉
Kill -9 进程id

在目标服务器(44)执行2.6操作
此时服务器以44为主,43为从服务器,对44文件进行操作,会同步到43服务器。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值