rsync服务及配置

rsync介绍

Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具

此工具功能类似ssh带的scp,但又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。

在同步备份数据时,默认情况下,Rsync通过其独特的”quick check”算法,它仅同步大小或者最后修改时间发生变化的文件或目录,当然也可以根据权限,属主等属性的变化同步,但需要制定相应的参数,甚至可以实现只同步一个文件里有变化的内容部分,所以,可以实现快速的同步备份数据

rsync特性

  • 支持拷贝特殊文件如链接文件,设备等。
  • 保持源文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变
  • 可以实现增量同步,既只同步发生变化的数据,因此数据传输效率很高
  • 可以使用rcp,rsh,ssh等方式来配合传输文件(rsync本身对数据不加密)
  • 持匿名或认证(无需系统用户)的进程模式传输,可实现方便安全的进行数据备份及镜像

注意:拷贝的时候源目录加“/”和不加“/”的区别(加“/”表示只拷贝该目录之下的文件;不加“/”表示连该目录一起拷贝)

rsync三种工作方式

本地文件系统上实现同步(类似copy命令)

语法: rsync [OPTION]... SRC DEST

[root@localhost media]# rsync share_test/file1 /tmp/
[root@localhost media]# ls /tmp/
file1  vmware-root_1175-3980167284

实现将本地机器的内容拷贝到远程机器(类似scp,可以配合ssh进行加密使用)

语法:rsync [OPTION]... SRC [USER@]HOST:DEST

[root@localhost media]# rsync -avz share_test root@192.168.197.133:/media
root@192.168.197.133's password: 
sending incremental file list
share_test/
share_test/file1


将远程机器的内容拷贝到本地机器

语法:rsync [OPTION]... [USER@]HOST:SRC DEST

[root@localhost media]# rsync -avz root@192.168.197.133:/media/123 share_test/
root@192.168.197.133's password: 
receiving incremental file list
123

[root@localhost media]# ls share_test/
123  file1

rsync常用选项

  • -a

归档模式,表示以递归方式传输文件,并保持所有文件属性

  • -r

对子目录以递归模式处理

  • -v, --verbose

详细模式输出

  • -z

对备份的文件在传输时进行压缩处理

  • --delete

删除那些DST中SRC没有的文件

dest端新建文件

[root@localhost media]# touch share_test/456
[root@localhost media]# ls share_test/
456  file1

src再次同步同一目录时,添加--delete参数,dest的456文件即将删除

[root@localhost media]# rsync -avzr share_test --delete root@192.168.197.133:/media/
root@192.168.197.133's password: 
sending incremental file list
deleting share_test/456
share_test/
share_test/123

sent 149 bytes  received 57 bytes  82.40 bytes/sec
total size is 0  speedup is 0.00


[root@localhost media]# ls share_test/
file1

rsync+inotify

inotify是一种文件系统事件监控机制。配合rsync可实现Daemon模式。inotify-tools为inotify的第三方软件。用来监控文件系统下文件的各种变化情况。

Daemon,即守护进程。该模式是在一台rsync服务器上安装并运行一个rsync的服务进程,其他的客户端通过rsync命令上传文件到服务器中。该模式是rsync最常用的功能,用来做数据的定时或者实时备份

Daemon配置过程

服务端(dest)配置:

root@localhost ~]# yum install -y rsync-daemon 安装Daemon工具
......

## 修改配置文件
[root@localhost ~]# vim /etc/rsyncd.conf

log file = /var/log/rsyncd.log
pidfile = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
secrets file = /etc/rsync.pass

[share_test]
path = /sawyer
uid = root
gid = root
port = 873   服务端口873
ignore errors
use chroot = no
read only = no
list = no
max connections = 200
timeout = 600
auth users = share_user   指定登录用户
hosts allow = 192.168.197.132   允许传输文件的客户端Ip

## 创建认证用户的账号和密码,与配置文件中注意保持一致
[root@localhost ~]# vim /etc/rsync.pass 

share_user:123456

[root@localhost ~]# chmod 600 /etc/rsync.pass 只让root查看并修改
## 开启服务并设定开机自动启动
[root@localhost ~]# systemctl enable --now rsyncd
[root@localhost ~]# ss -antl
State     Recv-Q     Send-Q          Local Address:Port         Peer Address:Port    
LISTEN    0          128                   0.0.0.0:22                0.0.0.0:*       
LISTEN    0          5                     0.0.0.0:873               0.0.0.0:*       
LISTEN    0          128                      [::]:22                   [::]:*       
LISTEN    0          5                        [::]:873                  [::]:*

客户端(src)配置

## 安装监听工具
[root@localhost ~]# yum install -y inotify-tools

## 配置用户认证的密码。注意只用写密码,不需要填写用户名
[root@localhost ~]# vim /etc/rsync.pass
123456

[root@localhost ~]# chmod 600 /etc/rsync.pass 只让root查看并修改

## 命令行手动验证
[root@localhost ~]# rsync -avH --progress --delete /runtime share_user@192.168.197.133::share_test --password-file=/etc/rsync.pass 
sending incremental file list
runtime/

sent 65 bytes  received 24 bytes  178.00 bytes/sec
total size is 0  speedup is 0.00


## 在runtime目录下新建test.txt文件,再次同步目录
[root@localhost /]# touch runtime/test.txt
[root@localhost /]# rsync -avH --progress --delete /runtime share_user@192.168.197.133::share_test --password-file=/etc/rsync.pass 
sending incremental file list
runtime/
runtime/test.txt
              0 100%    0.00kB/s    0:00:00 (xfr#1, to-chk=0/2)

sent 133 bytes  received 47 bytes  360.00 bytes/sec
total size is 0  speedup is 0.00
## 服务端(dest)验证

[root@localhost /]# ll sawyer/
total 0
drwxr-xr-x 2 root root 22 Oct 16 16:04 runtime
[root@localhost /]# ll sawyer/runtime/
total 0
-rw-r--r-- 1 root root 0 Oct 16 16:04 test.txt

编写脚本,利用inotify实时对目录进行同步




[root@localhost /]# cd scripts/
[root@localhost scripts]# vim inotify.sh
#!/bin/bash

# 变量定义
host=192.168.197.133
src=/runtime
dest=share_test
password=/etc/rsync.pass
user=share_user
inotify=/usr/bin/inotifywait



# 脚本主体

$inotify -mrq --timefmt '%Y%m%d %H:%M' --format '%T %w%f%e' -e modify,delete
,create,attrib,move $src \
        | while read files;do
    rsync -avzP --delete  --timeout=100 --password-file=${password} $src $user@$
host::$dest
        echo "${files} was rsynced" >>/var/rsync.log 2>&1
done

## 为脚本添加执行权限
[root@localhost scripts]# chmod +x inotify.sh 
[root@localhost scripts]# ls
inotify.sh

## 执行脚本
[root@localhost scripts]# bash inotify.sh &  后台运行脚本

## 查看脚本进程
[root@localhost scripts]# ps -ef |grep inotify
root       2593   1717  0 16:23 pts/0    00:00:00 bash inotify.sh
root       2594   2593  0 16:23 pts/0    00:00:00 /usr/bin/inotifywait -mrq --timefmt %Y%m%d %H:%M --format %T %w%f%e -e modify,delete,create,attrib,move /runtime
root       2595   2593  0 16:23 pts/0    00:00:00 bash inotify.sh
root       2598   1717  0 16:23 pts/0    00:00:00 grep --color=auto inotify

效果验证

## 删除客户端同步目录的文件
[root@localhost runtime]# rm -rf test.txt 
[root@localhost runtime]# sending incremental file list
deleting runtime/test.txt
runtime/

sent 61 bytes  received 44 bytes  210.00 bytes/sec
total size is 0  speedup is 0.00

## 服务端查看
[root@localhost runtime]# ls
[root@localhost runtime]# 

## 往同步目录中添加文件
[root@localhost runtime]# touch test
......
[root@localhost runtime]# ls
test

## 服务端查看文件

[root@server ~]# ls /sawyer/runtime/
test

设置开机自启动脚本

为rc.local添加执行权限
[root@client ~]# chmod +x /etc/rc.d/rc.local 
[root@client rc.d]# vim rc.local 
#!/bin/bash
......
touch /var/lock/subsys/local
nohup bash /scripts/inotify.sh  将脚本文件写入到此文件中


## 重启主机后查看进程
[root@client rc.d]# reboot
......

[root@client ~]# ps -ef |grep inotify
root       1235   1219  0 16:34 ?        00:00:00 bash /scripts/inotify.sh
root       1242   1235  0 16:34 ?        00:00:00 /usr/bin/inotifywait -mrq --timefmt %Y%m%d %H:%M --format %T %w%f%e -e modify,delete,create,attrib,move /runtime
root       1243   1235  0 16:34 ?        00:00:00 bash /scripts/inotify.sh
root       1741   1712  0 16:36 pts/1    00:00:00 grep --color=auto inotify
posted @ 2020-10-16 09:07  阿不思布丁  阅读(329)  评论(0编辑  收藏  举报