基于rsync的Linux服务器间文件实时同步

193 阅读2分钟
1、将本机某目录下的文件拷贝到远程主机,以保证远程主机与本机相应目录下文件保持一致
rsync -avzcR --password-file=/etc/img1.pas ${dirname $(INO_FILE}) rsyncuser@${host}::${module}
实例:
rsync -avzcR --password-file=/etc/img1.pas /opt/upload/ rsyncuser@198.11.2.124::imgdir
2、将远程主机的/etc目录拷贝到本地/tmp下,以保证本地/tmp目录和远程/etc保持同步
rsync -r 172.16.10.5:/etc /tmp

3、文件实时同步完整示例(将本机目录下的文件夹及文件实时同步到远程主机对应的目录下,本地主机ip:198.11.2.144):
(1)部署inotify程序
tar xzvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure  --prefix=/usr/local/inotify
make && make install
(2)同步脚本
vim inotify.sh

#!/bin/bash
log=/var/log/rsyncd.log
src=/opt/upload/
host=10.11.20.144
module=imgdir

cd ${src}
echo 'hello'
/usr/local/inotify/bin/inotifywait -mrq --format  '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file
echo 'hello'
do
  INO_EVENT=$(echo $file | awk '{print $1}')
  INO_FILE=$(echo $file | awk '{print $2}')
  echo "-------------------------------$(date)------------------------------------"
  echo $file
  if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]]
  then
    echo 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO'
    rsync -avzcR --password-file=/etc/img1.pas $(dirname ${INO_FILE}) rsyncuser@${host}::${module}
  fi

  if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]
  then
    echo 'DELETE or MOVED_FROM'
    rsync -avzR --delete --password-file=/etc/img1.pas $(dirname ${INO_FILE}) rsyncuser@${host}::${module}

  fi

  if [[ $INO_EVENT =~ 'ATTRIB' ]]
  then
    echo 'ATTRIB'
    if [ ! -d "$INO_FILE" ]
    then
        rsync -avzcR --password-file=/etc/img1.pas $(dirname ${INO_FILE}) rsyncuser@${host}::${module}
    fi
 fi

done
(2)运行实时同步脚本,及本机/etc/img1.pas文件的内容
赋予脚本执行权限:chmod 755 inotify.sh
运行脚本:./inotify.sh
文件内容为:远程主机rsyncuser用户的密码,如123456
4、在远程服务器建立对应的认证模块(即10.11.20.144)
(1)建立用户密码验证文件/etc/img.pas
rsyncuser:123456
(2)修改密码文件权限
chomd 600 /etc/img.pas
(3)建立rsync配置文件/etc/rsyncd.conf
uid = root
gid = root
use chroot = no
max connections=0
log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
[imgdir]
path = /opt/upload/
comment = rsync from 10.11.20.144
read only = no
list = on 
auth users = rsyncuser
secrets file = /etc/img.pas
(4)新建同步用户rsyncuser
useradd –m rsyncuser
passwd rsyncuser
123456
(5)启动同步监听服务(rsync程序为linux自带程序)
/usr/bin/rsync --port=873 --daemon
4、为防止脚本因某些原因停止,而不遗漏脚本停止期间的文件同步,写全量同步的定时任务
crontab -e
定时指令:
* */2 * * * rsync -avz --password-file=/etc/img1.pas /opt/upload/ rsyncuser@198.11.2.144::imgdir
5、若要实现双端文件实时同步,将步骤3在远程服务器也部署一遍就好