Linux监控文件变化并同步至其他机器备份

51 次查看 0 条评论

企业中经常会用到 samba 文件共享服务来搭建企业文件存储共享服务器。单台机器故障是不可避免的,严重时甚至会发生文件丢失。应用中我们可能会使用 crontab 来做一些定时备份计划之类的,但这不是实时备份。下面介绍使用 inotifywait + rsync 来配置实时同步备份。

1、系统环境说明

服务器IP操作系统
Smaba10.1.2.102CentOS release 6.5 (Final) 部署 smb 服务和 rsync + inotify
Backup10.1.2.104CentOS release 6.5 (Final) 部署 rsync 服务

其中 Smaba 服务器为共享文件服务器,其中 Backup 为备份服务器。本次目地:监控 Smaba 服务器下的 /data 目录下文件的实时变化,并实时备份至 Backup 服务器的 /data/SambaBackup 目录。

使用 inotifywait 工具监控文件变化情况,使用 rsync 工具做同步。

2、安装工具软件

以下在 Backup 机器上操作安装配置。这里我先配置备份服务器,方便后续说明。

[root@Backup ~]# yum install -y rsync

配置 rsync --daemon 模式运行,默认使用 /etc/rsyncd.conf 主配置文件:

[root@Backup ~]# cat /etc/rsyncd.conf
port = 873
uid = root
gid = root
use chroot = no
max connections = 2
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
lock file = /var/run/rsyncd.lock
[SambaBackup]
# 模块路径
path = /data/SambaBackup
read only = no
auth users = rsync
# 虚拟账号配置文件,格式:username:password
secrets file = /etc/rsyncd.secrets

守护进程模式启动:

# 设置虚拟账密信息
[root@Backup ~]# echo "rsync:123456" > /etc/rsyncd.secrets
# 权限务必设为 600 权限
[root@Backup ~]# chmod -R 600 /etc/rsyncd.secrets
# 创建模块目录
[root@Backup ~]# mkdir -p /data/SambaBackup
# 启动
[root@Backup ~]# rsync --daemon

详细安装参见:https://www.jianshu.com/p/0df0633613d8

以下在 Smaba 机器上操作安装配置。首先检查 Samaba 服务器是否支持 inotify 工作。

ls -l /proc/sys/fs/inotify/

30427-2hsfpibgosm.png

显示如上三个文件即表示支持。

# 安装下载工具和编译环境
yum install -y wget gcc
yum install -y rsync
wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
mkdir -p /usr/local/src/inotify/
tar -zvxf inotify-tools-3.14.tar.gz -C /usr/local/src/inotify/
cd /usr/local/src/inotify/inotify-tools-3.14
./configure --prefix=/usr/local/inotify
make && make install
ln -s /usr/local/inotify/bin/inotifywait /usr/bin/inotifywait
# 查看帮助信息
inotifywait --help

inotify-tools-3.14.tar.gz

配置 rsync 客户端:

客户端的配置文件只需做简单的修改,设置log file和pid file路径即可,然后启动rsync即可

[root@Samba ~]# cat /etc/rsyncd.conf 
pid file = /var/run/rsyncd.pid
log file = /var/log/rsyncd.log
# 配置密码文件及密码
[root@Samba ~]# echo '123456' > /etc/rsyncd.secrets
[root@Samba ~]# chmod -R 600 /etc/rsyncd.secrets
# 启动
[root@Samba ~]# rsync --daemon

3、创建监控脚本

新建脚本文件 /root/inotifywait.sh 并输入以下内容:

#!/bin/bash
# 配置监控目录
path='/data/'
/usr/bin/inotifywait --exclude '\.(part|swp|swx)' -mrq --format '%T %e : %w%f' --timefmt '%Y-%m-%d %H:%M:%S' -e create,delete,move,close_write ${path} | while read file;
do
    # 执行同步
    # /usr/bin/rsync -auvrtzopgP --delete ${path} root@10.1.2.104:/data/SamabaBackup/
    # 使用 rsync 的守护模式同步
    /usr/bin/rsync -vazu --delete --password-file=/etc/rsyncd.secrets /data rsync@10.1.2.104::SambaBackup
done

在后台运行这个监控脚本:

# 不挂断的放后台运行
nohup sh /root/inotifywait.sh > /dev/null 2>&1 &

可以通过配置SSH免密认证后通过 scprsync 同步文件过去。

# 生成秘钥对
ssh-keygen
# 分发公钥到目标主机
ssh-copy-id root@10.1.2.104

常用文件同步命令:

scp -r /data root@10.1.2.104:/data/ /data/SambaBackup
rsync -auvrtzopgP --progress  /root/ /tmp/rsync_bak/
rsync -auvrtzopgP --delete --progress /data/ root@10.1.2.104:/data/SambaBackup/
# 使用 rsync 守护模块的 tcp 通信方式(双冒号)
rsync -vazu --delete --progress --password-file=/etc/rsyncd.secrets /data rsync@10.1.2.104::SambaBackup
# 使用 --bwlimit 参数可限速(100k Bytes/s)
rsync -vazu --delete --progress --bwlimit=100 --password-file=/etc/rsyncd.secrets /data rsync@10.1.2.104::SambaBackup

资料:

  1. Linux 自动监控文件目录变化并同步
  2. inotify+rsync实现实时同步部署
Linux SMB

暂无评论,快来抢沙发。