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使用方式#

语法格式#

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

常见选项#

-a#

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

-v#

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

-p#

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

-t#

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

-g#

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

-0#

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

-D#

表示块设备文件信息

-z#

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

-H#

表示硬连接文件

-A#

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

-P#

显示传输进度

-- delete#

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

实验验证#

Copy
# 基础备份 客户端: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 # 向服务端备份数据

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

Copy
# 当客户端进行数据删除的时候 备份端跟着删除 [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

Copy
# 不输入密码直接进行备份 主要适用于定时任务中 [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#

Copy
[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#

显示备份过程

服务搭建#

创建测试用户#

Copy
源文件端 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文件权限#

Copy
[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/

备份端进行操作#

Copy
[root@server ~] ll web-pack/ # 查看文件详细属性 [root@server ~] chown rget1:rget1 -R /root/web-back/ # 修改目录 属主 属组

数据同步#

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

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

rsync.conf#

全局参数#

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

局部参数#

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

创建配置文件#

Copy
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 #存放用户的密码文件,栺式是 用户名:密码。

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

Copy
[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 否则身份验证出错

启动服务#

Copy
[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 文件过来。

posted @   SR丶  阅读(195)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示
CONTENTS