Rsync远程同步

Rsync远程同步:

是一个开源的快速备份工具,可以在不同主机之间同步整个目录

在远程同步任中,一个是源端,还有一个是发起端

源端负责文件的原始位置,发起端和源端的文件同步

Rsync的特点:

拷贝文件,连接文件,设备

可以保持源文件或者目录的权限不变,时间,所有者,所在组等可均保持不变

可以实现增量同步,只同步发生变化的数据,数据传输效率很高

支持匿名备份:

同步方式:

  1. 完整备份,第一次同步都是完整的备份
  2. 往后的同步,都是增量备份(差异备份),只同步变化的数据

如何安装rsync

rsync命令的常用选项:

-r: 递归模式,目录里面包含子目录里面的所有文件

-I:复制链接文件,软连接

-v:显示同步过程中的详细信息

-z:传输文件时,进行压缩

-a:归档模式,保留文件的权限,属性等

-p:保留文件的权限标记(所在组)

-t:保留时间标记(时间戳)

-g:保留文件的所在组(管理员)

-o:保留文件的所有者(管理员)

-D:保留设备文件和其他特殊文件

--delete:删除目标位置的有,但是原始位置没有的文件

下行同步:

从源端同步到客户端

上行同步:

从客户端同步到源端

实验部分:

配置sync下行同步:

从源端同步到客户端

配置sync源服务器

vim /etc/rsyncd.conf

Rsync远程同步_第1张图片

Rsync远程同步_第2张图片

设置密码

赋权
chmod 600 /etc/rsyncd_users.db

#保证所有用户对源目录/opt/test/都有读取权限

chmod +r /opt/test/

ls -ld /opt/test/

Rsync远程同步_第3张图片

启动和关闭

#启动 rsync 服务程序

rsync --daemon #启动 rsync 服务,以独立监听服务的方式(守护进程)运行 

netstat -anpt | grep rsync

#关闭 rsync 服务

kill $(cat /var/run/rsyncd.pid)

rm -rf /var/run/rsyncd.pid

Rsync远程同步_第4张图片

Rsync远程同步_第5张图片

配置发起端:
rsync -avz backuper@20.0.0.51::test /opt

实现免密登录:

发起端

echo "123456" > /etc/server.pass

chmod 600 /etc/server.pass

Rsync远程同步_第6张图片

rsync -avz --password-file=/etc/server.pass [email protected]::test /opt/

Rsync远程同步_第7张图片

配置rsync上行同步

源端配置

Rsync远程同步_第8张图片

发起端

源端可以查看到

Rsync远程同步_第9张图片

安装innotify工具

用 inotify 机制还需要安装 inotify-tools,以便提供 inotifywait、inotifywatch 辅助工具程序,用来监控、汇总改动情况。

inotifywait:可监控modify(修改)、create(创建)、move(移动)、delete(删除)、attrib(属性更改)等各种事件,一有变动立即输出结果。

inotifywatch:可用来收集文件系统变动情况,并在运行结束后输出汇总的变化情况。

Rsync远程同步_第10张图片

Rsync远程同步_第11张图片

tar zxvf inotify-tools-3.14.tar.gz -C /opt/

cd /opt/inotify-tools-3.14

./configure

make && make install

改内核文件

vim /etc/sysctl.conf

Rsync远程同步_第12张图片

fs.inotify.max_queued_events = 16384

fs.inotify.max_user_instances = 1024

fs.inotify.max_user_watches = 1048576
sysctl -p

Rsync远程同步_第13张图片

发起端如何对目录进行监控

inotifywait -mrq -e modify,create,move,delete /opt/test/

-m:表示持续监控

-r:递归整个目录

-q:信息提示

-e:指定监控的事件,多个事件用逗号隔开

Rsync远程同步_第14张图片

实现免密登录

rsync -azH --delete --password-file=/etc/server.pass /opt/data [email protected]::test/

Rsync远程同步_第15张图片

写一个触发式全部脚本

#!/bin/bash

INOTIFY_CMD="inotifywait -mrq -e modify,create,attrib,move,delete /opt/test/"

RSYNC_CMD="rsync -azH --delete --password-file=/etc/server.pass /opt/test/ [email protected]::test/"

#使用while、read持续获取监控结果,根据结果可以作进一步判断是否读取到输出的监控记录

$INOTIFY_CMD | while read DIRECTORY FILE EVENT

do

    if [ $(pgrep rsync | wc -l) -le 0 ] ; then

#如果rsync未在执行,则立即启动

        $RSYNC_CMD

    fi

done

Rsync远程同步_第16张图片

chmod +x /opt/inotify.sh

chmod 777 /opt/test/

chmod +x /etc/rc.d/rc.local

echo 'nohup /opt/inotify.sh &' >> /etc/rc.d/rc.local #加入开机自动执行

Rsync远程同步_第17张图片

可以结合定时任务,既实现了监控,也实现了同步

Rsync远程同步_第18张图片

使用rsync来实现快速删除大量文件

假如要在linux下删除大量文件,比如100万、1000万,像/usr/local/nginx/proxy_temp的nginx缓存等,那么rm -rf * 可能就不好使了,因为要等待很长一段时间。在这种情况下我们可以使用rsync来巧妙处理。rsync实际用的是替换原理。

先建立一个空的文件夹:

mkdir /home/blank

Rsync远程同步_第19张图片

Rsync远程同步_第20张图片

rsync --delete-before -a -H -v --progress --stats /home/blank/ /opt/test

--delete-before :在传输过程中进行删除

-a:归档模式

-H:硬链接

-v:输出过程信息

-progress:显示传输的过程

--stats :给出文件的传输状态

你可能感兴趣的:(数据库)