博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

rsync使用,rsync守护进程模式,rsync实时同步

Posted on 2021-12-29 20:28  ~sang  阅读(447)  评论(0编辑  收藏  举报

一、备份方式

  cp:本机复制

    [root@m01 ~]# cp 1.txt /opt/

  scp:远程复制(只支持全量复制)

    推(本地上传到远程服务器):

      scp 1.txt root@[ip]:[路径]

      [root@m01 ~]# scp 1.txt root@172.16.1.41:/opt/

    拉(把远程服务器文件下载到本地):

      scp root@[ip]:[文件路径] [下载路径]

      [root@m01 ~]# scp root@172.16.1.41:/opt/2.txt .

[root@m01 ~]# scp root@172.16.1.41:/opt/2.txt .
root@172.16.1.41's password: 
2.txt                                                                                          100%  352MB  89.9MB/s   00:03    
[root@m01 ~]# ll
total 1384928
-rw-r--r--  1 root root 1048576000 Dec 29 11:51 1.txt
-rw-r--r--  1 root root  369573888 Dec 29 15:30 2.txt
-rw-------. 1 root root       1687 Dec 24 15:39 anaconda-ks.cfg
-rwxr-xr-x. 1 root root        138 Dec 24 16:15 checkIp.sh
-rwxr-xr-x. 1 root root       4539 Dec 24 15:48 init.sh

  rsync:远程复制,增量复制

二、rsync介绍

  rsync英文称为remote synchronizetion,从软件的名称就可以看出来,rsync具有可使本地和远程两台主机之间的数据快速复制同步镜像、远程备份的功能,这个功能类似                    于ssh带的scp命令,但是又优于scp命令的功能,scp每次都是全量拷贝,而rsync可以增量拷贝。当然,rsync还可以在本地主机的不同分区或目录之间全量及增量的复制        数据,这又类似cp命令。但是同样也优于cp命令,cp每次都是全量拷贝,而rsync可以增量拷贝

  rsync官方地址:https://rsync.samba.org/

  rsync监听端口:873

  rsync运行模式:C/S client/server

  rsync简称叫做远程同步,可以实现不同主机之间的数据同步,还支持全量和增量

三、rsync特性

  支持拷贝特殊文件,如连接文件、设备等

  可以有排除指定文件或目录同步的功能,相当于打包命令tar的排除功能

  可以做到保持原文件或目录的权限、时间、软硬链接、属主、组等所有属性均不改变 -p

  可以实现增量同步,即只同步发生变化的数据,因此数据传输效率很高(tar-N)

  可以使用rcp、rsh、ssh等方式来配合传输文件(rsync本身不对数据加密)

  可以通过socket(进程方式)传输文件和数据(服务端和客户端)*****

  支持匿名的活认证(无需系统用户)的进程模式传输,可以实现方便安全的进行数据备份和镜像

四、rsync的传输方式

  push 推:

    客户端将数据从本地推送至服务端

  pull 拉:

    客户端将数据从服务端拉取到本地

五、rsync传输模式

  1.本地方式(类似于cp,不支持推送和拉取,只是单纯的复制)

  2.远程方式(类似于scp,又不同于scp),scp只支持全量备份,rsync支持增量备份和差异备份

  3.守护进程方式(客户端和服务端)

六、rsync使用

-a    #归档模式传输,等于-tropgDl    -t -r -o -p -g -D -l
[root@m01 ~]# rsync -avzP ./* root@172.16.1.41:/opt/
root@172.16.1.41's password: 
sending incremental file list
1.txt
    818,970,624  78%   85.58MB/s    0:00:02  
-v    #详细模式输出,打印速率,文件数量等
[root@m01 ~]# rsync -v 2.txt root@172.16.1.41:/opt/
root@172.16.1.41's password: 
2.txt

sent 369,664,191 bytes  received 35 bytes  38,912,023.79 bytes/sec
total size is 369,573,888  speedup is 1.00
-z    #传输时进行压缩以提高效率
[root@m01 ~]# rsync -vz 2.txt root@172.16.1.41:/opt/
root@172.16.1.41's password: 
2.txt

sent 359,490 bytes  received 35 bytes  65,368.18 bytes/sec
total size is 369,573,888  speedup is 1,027.95
-r    #递归传输目录及子目录,即目录下的所有目录都同样传输
[root@m01 ~]# rsync -vzr a root@172.16.1.41:/opt/
root@172.16.1.41's password: 
sending incremental file list
a/
a/b/
a/b/c/
a/b/c/2.txt

sent 359,583 bytes  received 51 bytes  17,543.12 bytes/sec
total size is 369,573,888  speedup is 1,027.64
-t    #保持文件时间信息    stat:查看时间信息
[root@m01 ~]# stat a/b/c/2.txt
  File: ‘a/b/c/2.txt’
  Size: 369573888     Blocks: 721824     IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 34413065    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2021-12-29 16:21:29.159555316 +0800
Modify: 2021-12-29 15:30:28.231011552 +0800
Change: 2021-12-29 16:18:18.513554671 +0800
 Birth: -
[root@m01 ~]# rsync -vzrt a root@172.16.1.41:/opt/
-o    #保持文件属主信息
-g    #保持文件属组信息
-p    #保持文件权限
cat /etc/passwd    #查看所有用户信息
chown openvpn:openvpn a/b/c/2.txt    #修改文件或目录用户和用户组
useradd openvpn -u 996    #添加用户
[root@m01 ~]# rsync -vzrtogp a root@172.16.1.41:/opt/
-l    #保留软链接
ln -s a/b/c/2.txt 2.txt    #创建软链接
[root@m01 ~]# rsync -vzrtogpl 2.txt root@172.16.1.41:/opt/
-D    #保持设备文件信息
[root@m01 ~]# rsync -vzrtgDopl /dev/tty1 root@172.16.1.41:/opt/
-P    #显示同步的过程及传输时的进度信息
[root@m01 ~]# rsync -vzrtgoplP ./* root@172.16.1.41:/opt/
root@172.16.1.41's password: 
sending incremental file list
1.txt
    669,286,400  63%   27.14MB/s    0:00:13  
-L    #保留软链接指向的目标文件
-e    #使用的信道协议,指定替代rsh的shell程序
[root@m01 ~]# rsync -avzP -e "ssh -p 23" ./* root@172.16.1.41:/opt/
--append    #指定文件接着上次传输中断处继续传输
--append-verify    #使用参数续传(在断点续传之后,验证一下文件,如果不同,修复文件)
[root@m01 ~]# rsync -avzP --append-verify ./* root@172.16.1.41:/opt/
--exclude=PATTERN    #指定排除不需要传输的文件
[root@m01 ~]# rsync -avzP --append-verify --exclude=2.txt ./* root@172.16.1.41:/opt/
root@172.16.1.41's password: 
sending incremental file list
1.txt
  1,048,576,000 100%   97.18MB/s    0:00:10 (xfr#1, to-chk=4/5)
3.txt
    160,792,576  15%   26.29MB/s    0:00:32  ^CKilled by signal 2.
--exclude-from=file    #按照文件指定内容排除
[root@m01 ~]# vim /tmp/exclude.txt
[root@m01 ~]# rsync -avzP --append-verify --exclude-from=/tmp/exclude.txt ./* root@172.16.1.41:/opt/
root@172.16.1.41's password: 
sending incremental file list
1.txt
  1,048,576,000 100%   26.89MB/s    0:00:37 (xfr#1, to-chk=3/4)
anaconda-ks.cfg
          1,687 100%    4.89kB/s    0:00:00 (xfr#2, to-chk=2/4)
checkIp.sh
            138 100%    0.40kB/s    0:00:00 (xfr#3, to-chk=1/4)
init.sh
          4,539 100%   13.04kB/s    0:00:00 (xfr#4, to-chk=0/4)

sent 1,022,392 bytes  received 92 bytes  25,246.52 bytes/sec
total size is 1,048,582,364  speedup is 1,025.52
--bwlimit=100    #限速传输(单位:MB)
[root@m01 ~]# rsync -avzP --append-verify --bwlimit=5 ./* root@172.16.1.41:/opt/
root@172.16.1.41's password: 
sending incremental file list
1.txt
    190,218,240  18%    4.96MB/s    0:02:49  
--delete    #让目标目录和源目录数据保持一致
--password-file=xxx    #使用密码文件
--port    #指定端口传输

七、rsync守护进程模式

7.1、服务端

  1、安装

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

2、修改配置文件
[root@backup ~]# vim /etc/rsyncd.conf 
uid = rsync    #启动服务的用户id
gid = rsync    #启动服务用户的组id
port = 873    #服务默认监听端口
fake super = yes    #无需使用root用户启动
use chroot = no    #安全机制
max connections = 200    #最大连接数
timeout = 600    #超时时间
ignore errors    #忽略错误
read only = false    #只读权限
list = false    #查看模块列表
auth users = rsync_backup    #定义虚拟用户(rsync传输过程使用的用户)
secrets file = /etc/rsync.passwd    #定义虚拟用户的密码
log file = /var/log/rsyncd.log    #日志文件
#####################################
[backup]    #模块
comment = welcome to backup!    #模块的备注
path = /backup    #服务器真实的路径
[linux]
comment = welcome to linux!
path=/tmp/linux

  3、创建系统用户

  [root@backup opt]# groupadd rsync -g 666

  [root@backup opt]# useradd rsync -u 666 -g 666 -M -s /sbin/nologin -r

  4、创建密码文件

  [root@backup opt]# echo "rsync_backup:123456" > /etc/rsync.passwd

  5、授权(必须授权为600)

  [root@backup opt]# chmod 600 /etc/rsync.passwd

  6、创建备份目录

  [root@backup opt]# mkdir /backup

  [root@backup opt]# mkdir /tmp/linux

  7、目录授权

  [root@backup opt]# chown rsync.rsync /backup/

  [root@backup opt]# chown rsync.rsync /tmp/linux/

  8、关闭防火墙和selinux

  [root@backup opt]# systemctl disabel --now firewalld

  [root@backup opt]# setenforce 0

  9、启动rsyncd服务

  [root@backup opt]# systemctl start rsyncd

  [root@backup opt]# systemctl enable --now rsyncd  #开机自启动

7.2、客户端

  方法一:自己输入密码

    [root@m01 ~]# rsync -avzP ./* rsync_backup@172.16.1.41::backup

    rsync_backup:虚拟用户,只在数据传输时使用

    172.16.1.41:backup服务端的IP

    backup:模块名称

  方法二:设置密码文件,运行时读取(推荐使用,不需要输入密码)

    1、编写密码文件

    [root@m01 ~]# echo "123456" > /etc/rsync.passwd

    2、授权

    [root@m01 ~]# chmod 600 /etc/rsync.passwd

    3、连接

    [root@m01 ~]# rsync -avzP --password-file=/etc/rsync.passwd  ./* rsync_backup@172.16.1.41::linux

  方法三:添加环境变量

    1、定义环境变量

    [root@m01 ~]export RSYNC_PASSWORD=123456

    2、同步

    [root@m01 ~]# rsync -avzP  ./* rsync_backup@172.16.1.41::linux

八、rsync实时同步

  rsync是不支持实时同步的,通常我们借助于inotify这个软件来实时监控文件变化,一旦inotify监控到文件变化,则立即调用rsync进行同步

  1、安装inotify(装在客户端)

  [root@m01 ~]# yum -y install inotify-tools

  2、inotify参数

    -m:持续监控

    -r:递归

    -q:静默,仅打印时间信息

    --timefmt:指定输出时间格式

    --format:指定事件输出格式

      %Xe:事件

      %w:目录

      %f:文件

    -e:指定监控的事件

      access:访问

      modify:内容修改

      attrib:属性修改

      close_write:修改真实文件内容

      open:打开

      create:创建

      delete:删除

      umount:卸载

  3、开始监控

    [root@m01 ~]# /usr/bin/inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /root

[root@m01 ~]# /usr/bin/inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /root



CREATE /root/ 4.txt
ATTRIB /root/ 4.txt
CLOSE_WRITEXCLOSE /root/ 4.txt
MODIFY /root/ 4.txt
CLOSE_WRITEXCLOSE /root/ 4.txt
DELETE /root/ 4.txt
CREATE /root/ 4.txt
ATTRIB /root/ 4.txt
CLOSE_WRITEXCLOSE /root/ 4.txt
ATTRIB /root/ 4.txt
MODIFY /root/ .bash_history
CLOSE_WRITEXCLOSE /root/ .bash_history
^C
[root@m01 ~]# 

  4、实时监控并同步

    [root@m01 ~]# /usr/bin/inotifywait -mrq --format '%Xe %w %f' -e create,modify,delete,attrib,close_write /root | while read line;do

    cd /root
    
rsync -avzP --delete --password-file=/etc/rsync.passwd ./* rsync_backup@172.16.1.41::backup
    
done