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