Linux服务之Rsync

Rsync简介

  • Rsync 是 Linux 系统下的数据镜像备份工具
  • 使用快速增量备份工具 Remote Sync 可以远程同步,可以在不同主机之间进行同步,可实现全量备份不增量备份,保持链接和权限,传输前执行压缩,
  • 非常适合用于架构集中式备份或异地备份等应用。

Rsync进行数据备份

与scp相比较

  • scp无法备份大规模的数据
  • Rsync边复制 边比较 边统计

Rsync优点

  • 可以镜像保存这个目录树以及文件系统
  • 可以保存文件的权限 属性 硬链接等
  • 无需特殊权限即可安装
  • 只有在第一次同步的时候会复制全部的内容 下一次之后复制修改的内容
  • 在传输的过程中会进行文件压缩 传输更加高效 减少带宽

Rsync特性

  • 安全:可以使用ssh scp进行文件传输
  • 支持匿名传输 以方便进行网站镜像
  • 选择性保持:符号链接 硬链接 文件属性 权限 时间等

Rsync的运行原理

  • 采用C/S架构 本质是点到点传输 直接使用Rsync命令即可
  • 监听端口号837

名词解释

  • 发起端:负责发送Rsync进行同步的机器 我要进行数据同步
  • 备份源:响应Rsync请求的机器 负责进行数据的备份
  • 服务端:运行 rsyncd 服务,一般来说,需要备份的服务器
  • 客户端:存放备份数据

同步方式

  • 推 push:一台主机负责把数据传送给其他主机,服务器开销徆大,比较适合后端服务器少的情况。
  • 拉 pull:所有主机定时去找一台主机拉数据,可能就会导致数据缓慢。
  • 推 push:目的主机配置为 rsync 服务器,源主机周期性的使用 rsync 命令把要同步的目彔推过去(需要备份的机器是客户端,存储备份的机器是服务端)。
  • 拉 pull:源主机配置为 rsync 服务器,目的主机周期性的使用 rsync 命令把要同步的目彔拉过来(需要备份的机器是服务端,存储备份的机器是客户端)。

Rsync使用方式

语法格式

格式: rsync 【选项】 源文件 目标文件

常见选项

-a

--archive(存档) 归档模式,表示以递归的方式传输文件,并且保持文件属性,等同于加了参数-rlptgoD

-v

Rsync同步数据的时候显示详细信息

-p

Rsync同步数据的时候保留文件的权限

-t

Rsync同步数据的时候保留文件的原有时间

-g

Rsync同步数据的时候保留文件的原有属组

-0

Rsync同步数据的时候保留文件的原有属主

-D

表示块设备文件信息

-z

Rsync同步数据的时候压缩传输数据

-H

表示硬连接文件

-A

Rsync同步数据的时候保留ACl权限

-P

显示传输进度

-- delete

当源服务器中某些文件被删除的时候 备份端文件同时进行删除

实验验证

# 基础备份
客户端:IP 1.1.1.1
备份端:IP 1.1.1.2

[root@client ~]# cp -r /boot/grub2 /var/www/html/
[root@client ~] rsync -azP /var/www/html/ 1.1.1.2:/root/web-pack  # 向服务端备份数据

# 客户端添加新的文件向服务端进行备份
[root@client ~]# touch /var/www/html/test.txt  # 创建新的文件
[root@client ~] rsync -azP /var/www/html/ 1.1.1.2:/root/web-pack  # 向服务端备份数据

# 当客户端进行数据删除的时候 备份端跟着删除
[root@client ~]# rm -fr /var/www/html/test.txt

[root@client ~]# rsync -zaP --delete  /var/www/html/ root@1.1.1.2:/root/web-pack

# 不输入密码直接进行备份 主要适用于定时任务中 
[root@client ~]# ssh-keygen  # 生成秘钥对

[root@client ~]# ssh-copy-id root@1.1.1.2  # 传输秘钥对

[root@client ~]# rsync -zaP  /etc/passwd root@1.1.1.2:/root

Rsync服务

安装 Rsync

[root@server~]# yum -y install rsync xinetd  # rsnyc服务依赖于xinted

[root@server ~]# rsync --daemon   # 以daemon模式启动

[root@server ~]# netstat -antup | grep 873   # 查看启动的端口

常见命令选项

-a

权限保存模式 保存传输文件的所有属性

-r

递归复制所有下面的资料

-p

保留文件原有权限 属性

-t

保留时间点 文件原有时间

-g

保留复制文件的属组

-o

保留复制文件的属主(root only)

-D

保留设备文件咨询 (root only)

-l

复制所有的连接 拷贝连接文件

-z

文件压缩进行传输

-H

保留硬链接文件

-A

保留ACl文件属性 需要配合--perms

-p

显示文件传输进度

-v

显示文件的传输过程

-u

仅仅进行更新 也就是跳过已经存在的目标位置

--port

知道rsync端口

--delete

删除备份文件有而源文件没有的文件

--password-file

从指定密码文件中获取密码

-- filter

需要过滤的文件

--exclude

需要过滤的文件

-- progress

显示备份过程

服务搭建

创建测试用户


源文件端   IP:1.1.1.1
备份文件端 IP:1.1.1.2

[root@client ~] useradd rget1 && echo "123456" |passwd --stdin rget1  # 创建测试用户

[root@server ~] useradd rget1 && echo "123456" |passwd --stdin rget1  # 创建测试用户

源端服务器设置ACL文件权限

[root@client ~] setfacl -R -m user:rget1:rwx /var/www/html/

[root@client ~] setfacl -R -m default:rget1:rwx /var/www/html/

[root@client ~] getfacl /var/www/html/

备份端进行操作


[root@server ~] ll web-pack/  # 查看文件详细属性

[root@server ~] chown rget1:rget1 -R /root/web-back/  # 修改目录 属主 属组

数据同步

[root@source ~]# rsync -zav /var/www/html/ rget1@1.1.1.2:/root/web-back

rsync服务使用非系统用户进行数据同步

rsync.conf

全局参数

对 rsync 服务器生效,如果模块参数和全局参数冲突,冲突的地方模块参数最终生效。

局部参数

定义需要通过 rsync 输出的目彔定义的参数。

创建配置文件


uid = root #运行进程的身份。
gid = root #运行进程的组。
address =1.1.1.1 #监听 IP。
port =873 #监听端口。
hosts allow =1.1.1.0/24
use chroot = yes
max connections =5 #最大连接数。
pid file =/var/run/rsyncd.pid #进程 PID,自劢生成。
lock file =/var/run/rsync.lock #指 max connectios 参数的锁文件。
log file =/var/log/rsyncd.log #日志文件位置。
motd file =/etc/rsyncd.motd #客户端登陆后弹出的消息,需要创建。

[wwwroot] #共享模块名称。
path =/var/www/html #需要备份的路径。
comment = used for web-data root #描述。
read only = false #只读权限为假。
list = yes #是否允讲查看模块信息。
auth users = rsyncuser #备份的用户,和系统用户无关。
secrets file =/etc/rsync.passwd #存放用户的密码文件,栺式是 用户名:密码。
。

创建提示信息以及非系统用户名称密码

[root@source ~]# echo "Welcome to Backup Server" > /etc/rsyncd.motd  # 创建客户端提示信息

[root@source ~]# echo rsyncuser:123456 > /etc/rsync.passwd  # 将非系统用户写入配置文件 格式:用户名:密码

[root@source ~]# chmod 600 /etc/rsync.passwd  # 修改权限 必须为600或者700  否则身份验证出错

启动服务

[root@source ~]# systemctl start xinetd  # 启动服务

[root@source ~]# rsync --daemon --config=/etc/rsyncd.conf  # 加载配置文件

[root@source ~]# netstat -aunpt | grep 873  # 查看是否启动

rsync+sersync 实现数据实时同步

sersync的优点

  • 基与 inotify 开发的,类似与 inotify-tools 的工具
  • 可以记彔下被监听目录中发生变化的(包括增加、删除、修改)具体某一个文件或者某一个目录的名字,然后使用 rsync 同步的时候,只同步发生变化的文件戒者目录

rsync+inotify-tools 不 rsync+sersync 架构的区别

rsync+inotify-tools

  • inotify 只能记录下被监听的目录发生了变化(增,删,改)并没有把具体是哪个文件或者哪个目录发生了变化记录下来。
  • rsync 在同步的时候,并不知道具体是哪个文件或目录发生了变化,每次都是对整个目彔进行同步,当数据量大时,整个目录同步非常耗时(rsync 要对整个目录遍历查找对比文件),因此效率低

rsync+sersyn

  • sersync 可以记录被监听目录中发生变化的(增,删,改)具体某个文件或目录的名字。
  • rsync 在同步时,只同步发生变化的文件或者目录 因此效率徆高。

同步过程

  • 在同步服务器上开吭 sersync 服务, sersync 负责监控配置路径中的文件系统事件变化。
  • 调用 rsync 命令把更新的文件同步到目标服务器。
  • 需要在主服务器配置 sersync,在同步目标服务器配置 rsync server(注意:是 rsync 服务)

同步过程与原理

  • 用户实时的往 sersync 服务器上写入更新文件数据。
  • 此时需要在同步主服务器上配置 sersync 服务。
  • 在另一台服务器开启 rsync 守护进程服务,以同步拉取来自 sersync 服务器上的数据。
  • 在另一台服务器开启 rsync 守护进程服务,使 sersync push 文件过来。

原文地址:https://www.cnblogs.com/SR-Program/p/13175581.html