rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。
rsync原理
rsync 是 linux 下同步文件的一个高效算法,用于同步更新两处计算机的文件和目录,并适当利用查找 文件中的不同块以减少数据传输。 rsync 的主要特点就是增量传输,只对变更的部分进行传送。
增量同步算法
假如我们现在需要同步两个文件保持一致,并且只想传送不同的部分,那么我们就需要对两边的文件做 diff ,但是这两个文件在两台不同的机器上,无法做 diff 。如果我们做 diff ,就要把一个文件传到 另一台机器上做 diff ,但这样一来,我们就传了整个文件,这与我们只想传输不同部的初衷相背。于 是我们就要想一个办法,让这两边的文件见不到面,但还能知道它们间有什么不同。这就是 rsync 的算 法。
工作场景介绍
1 定时备份
cron+rsync
2 实时数据同步
inotify+ rsync
安装部署服务端
安装xineted服务
yum install rsync.x86_64 -y
yum install xinetd -y1.2.
修改xineted配置文件
vim /etc/xinetd.d/rsync
service rsync
{
disable = no
socket_type = stream
wait = no
user = root
server = /usr/bin/rsync
server_args = --daemon
port = 873
log_on_failure = USERID
}1.2.3.4.5.6.7.8.9.10.11.12.
修改rsync配置文件
vim /etc/rsyncd.conf
uid = rsync #用户ID
gid = rsync #组ID
use chroot = no #若为 true,则 rsync 在传输文件之前首先 chroot 到 path 参数所指定的目录下。
max connections = 200 #最大链接数
timeout = 300 #超时参数
pid file = /var/run/rsyncd.pid #进程号对应PID
lock file = /var/run/rsync.lock #锁文件,防止数据不一致
log file=/var/log/rsyncd.log #日志文件
[backup] #模块
path = /backup #提供访问的目录
ignore errors #忽略错误
read only = false #可写
list = false # 不能使用ls 和 ll等列表命令
hosts allow = 192.168.1.0/24 #允许那些链接
hosts deny = 0.0.0.0/32 #拒绝那些链接 允许和拒绝二选一
secrets file = /etc/rsync.password # 允许链接的虚拟用户
auth users = root #指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块。
strict modes = yes #指定是否监测口令文件的权限。若为 true 则口令文件只能被 rsync 服务器运行身份的用户访问,其他任何用户不可以访问该文件。1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.
准备密码文件
vim /etc/rsync.passwd
服务端用户:服务端密码
chmod 600 /etc/rsync.passwd1.2.3.
启动服务
systemctl start xinetd.service
ss -tnl | grep 8731.2.
准备文件
mkdir /test
touch /test/1231.2.
部署客户端
在server2上安装rsync
yum install rsync.x86_64 -y1.
参数详解
参数 | 含义 | 参数说明 |
---|---|---|
-v | –verbose | 详细模式输出,传输时的进度等消息 |
-z | –compress | 传输时进行压缩以提高效率,–compress-level=NUM 可按级别压缩 |
-a | –archive | 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rtopgDI |
-r | –resursive | 对子目录以递归模式,及目录下面的所有目录都同样传输 |
-t | –times | 保持文件时间信息 |
-o | –owner | 保持文件属主信息 |
-p | –perms | 保持文件权限 |
-g | –group | 保持文件属组信息 |
-P | –progress | 显示同步的过程及传输时的进度等信息 |
-D | –devices | 保持设备文件信息 |
-l | –links | 保留软连接 |
-e | –rsh=COMMAND | 使用的信道协议,指定代替rsh的shell程序,如ssh |
显示详细信息
–exclude=PATTERN 指定排除不需要传输的文件模式
–exclude-from =file (文件名所在的目录文件)
–bwlimit=RATE limit socket I/O bandwidth(字节为单位)
–delete 让目标目录SRC和源目录数据DST一致1.2.3.4.
六种不同的工作模式
模式一,查看服务端有哪些可用数据源
rsync --list-only root@服务器IP::1.
模式二,本地文件拷贝到本地,当src和dest都不包含有冒号时就启动从本地进行拷贝
rsync 文件 拷贝地址1.
模式三,本地文件拷贝到远程(服务器),当dest包含冒号时就启动拷贝到远程
rsync 文件 root@服务器IP:/服务器目录1.
模式四,将远程(服务器)文件拷贝到本地,当src包含冒号的时候就启动远程拷贝到本地
rsync root@服务器IP:/服务器目录/需要的文件 拷贝地址1.
模式五,从远程服务器拷贝到本地,当src使用两个冒号的时候启用这种方式,冒号后面跟的是服务端设置的模块
rsync -r root@服务器IP::服务器目录 拷贝地址1.
模式六,从本地拷贝到远程服务器,当dest包含两个冒号时就启动这种方式,冒号后面跟
rsync -r 拷贝目录 root@服务器IP::服务器目录1.
案例,定时备份
客户端需求
1.客户端提前准备存放的备份的目录,目录规则如下:/backup/主机IP时间
⒉客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/主机IP时间
3.客户端最后将备份的数据进行推送至备份服务器
4.客户端每天凌晨1点定时执行该脚本
5.客户端服务器本地保留最近7天的数据,避免浪费磁盘空间
服务端需求
1.服务端部署rsync,用于接收客户端推送过来的备份数据
⒉.服务端需要每天校验客户端推送过来的数据是否完整
3.服务端需要每天校验的结果通知给管理员
4.服务端仅保留6个月的备份数据,其余的全部删除
客户端准备
创建目录
mkdir /backup1.
安装expect工具
yum install expect* -y1.
准备expect脚本
vim rsync.exp
#!/usr/bin/expect
set mulu [lindex $argv 0]
set timeout 10
spawn rsync -avzr /backup/$mulu root@192.168.80.10::backup_server
expect Password
send "123456\r"
expect eof1.2.3.4.5.6.7.8.
准备备份脚本
vim beifen.sh
#!/bin/bash
准备压缩文件的目录
mulu=`ip a | grep global|awk -F'[ /]+' '{print $3}'`_`date +%F`
echo $mulu
mkdir -pv /backup/$mulu &> /dev/null
# 打包待发送的数据
tar zcf /backup/$mulu/conf.tar.gz /etc/passwd /etc/vimrc &> /dev/null
touch /backup/$mulu
# 发送数据
#rsync -avzr /backup/$mulu root@192.168.80.10::backup_server
expect rsync.exp $mulu
# 保留七天以内的数据
find /backup -mtime +7 -delete1.2.3.4.5.6.7.8.9.10.11.12.13.14.
计划任务
cat /etc/crontab
......
0 1 * * * root /root/beifen.sh1.2.3.
服务端部署参考上述部署
模拟一个月的数据来验证结果
for i in {1..30};do date -s 2021/08/$i; /root/beifen.sh ; done
以上就是良许教程网为各位朋友分享的Linu系统相关内容。想要了解更多Linux相关知识记得关注公众号“良许Linux”,或扫描下方二维码进行关注,更多干货等着你 !