Rsync备份服务
Rsync备份服务
简要介绍
rsync 是一个用于增量文件传输的开源工具,不得不说,rsync简直是不同服务器间传输文件、同步文件的利器。与FTP相比,它具有非常简单的安装和配置方法。而且,rsync可以只拷贝发生过变化的文件,这就让传输效率非常高。如果你考虑安全问题,也可以通过 ssh 协议来进行传输。rsync 用来进行备份和镜像也非常棒,它的这些特性可能是你非常需要的:
支持链接、属主、属组合权限的拷贝
支持包含或排出条件,类似 tar
不需要 root 权限
支持匿名或授权的 rsync server 模式
rsync监听端口:873
rsync运行模式:C/S 客户端/服务端 | B/S 浏览器/服务端
rsync常见的两种备份方式:完全备份、增量备份
完全备份:将客户端的所有数据内容全部备份至服务端(效率低下,占用空间)
增量备份:将客户端的增量备份至服务端(提高备份效率,节省时间,适合异地备份)
rsync同类服务
sync 同步:刷新文件系统缓存,强制将修改过的数据块写入磁盘,并且更新超级块。
async 异步:将数据先放到缓冲区,再周期性(一般是30s)的去同步到磁盘。
rsync 远程同步:remote synchronous
Rsync关于数据同步的两种方式:
1、推(上传):所有主机推送本地数据至Rsync备份服务器,会导致数据同步缓慢(适合少量数据备份)
2、拉(下载):Rsync备份服务器端拉取所有主机上的数据,会导致备份服务器开销大。
Rsync传输模式:
Rsync大致使用三种主要的传输模式:
本地方式
远程方式
守护进程
Rsync命令相关选项:
-a #归档模式传输, 等于-tropgDl
-v #详细模式输出, 打印速率, 文件数量等
-z #传输时进行压缩以提高效率
-r #递归传输目录及子目录,即目录下得所有目录都同样传输。
-t #保持文件时间信息
-o #保持文件属主信息
-p #保持文件权限
-g #保持文件属组信息
-l #保留软连接
-P #显示同步的过程及传输时的进度等信息
-D #保持设备文件信息
-L #保留软连接指向的目标文件
-e #使用的信道协议,指定替代rsh的shell程序
--exclude=PATTERN #指定排除不需要传输的文件模式
--exclude-from=file #文件名所在的目录文件
--bwlimit=100 #限速传输
--partial #断点续传
--delete #让目标目录和源目录数据保持一致
本地传输cp
[root@backup ~]# rsync /etc/passwd /tmp/
[root@backup ~]# ls /tmp/passwd
/tmp/passwd
远程传输scp
拉(下载):
rsync -avz root@172.16.1.41:/root/ /backup/ #拉取远程目录下的所有文件
rsync -avz root@172.16.1.41:/root /backup/ #拉取远程目录以及目录下的所有文件
推(上传):
rsync -avz /backup/2018-07-23 root@172.16.1.41:/tmp/
守护进程传输方式:rsync自身非常重要的功能、简单的远程传输存在问题:root权限过高、不使用系统用户更加安全。
1.安装
[root@backup ~]# yum install rsync -y
2.配置rsync
查询配置文件存放的路径
[root@backup ~]# rpm -qc rsync
/etc/rsyncd.conf
[root@backup ~]# vim /etc/rsyncd.conf
uid = rsync #运行进程的用户
gid = rsync #运行进程的用户组
port = 873 #监听端口
fake super = yes #无需让rsync以root身份运行,允许存储文件的完整属性
use chroot = no #关闭假根功能
max connections = 200 #最大连接数
ignore errors #忽略错误信息
read only = false #对备份数据可读写
list = false #不允许查看模块信息
auth users = rsync_backup #定义虚拟用户,作为连接认证用户
secrets file = /etc/rsync.password #定义rsync服务用户连接认证密码文件路径
log file = /var/log/rsyncd.log #日志文件
#####################################
[backup] #定义模块信息
comment = welcome to oldboyedu backup! #模块注释信息
path = /backup #定义接收备份数据目录
3.创建用户(运行rsync服务的用户身份)
1.创建rsync账户,不允许登录不创建家目录
useradd -M -s /sbin/nologin rsync
2.创建备份目录(尽可能磁盘空间足够大),授权rsync用户为属主
mkdir /backup
chown -R rsync.rsync /backup/
4.创建虚拟用户密码文件(用于客户端连接时使用的用户)
创建虚拟用户和密码,并赋予600权限
echo "rsync_backup:1" >/etc/rsync.password
chmod 600 /etc/rsync.password
5.启动rsync服务,并加入开机自启
systemctl start rsyncd
systemctl enable rsyncd
启动后检查对应端口
[root@bogon ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:873 0.0.0.0:* LISTEN 4758/rsync
客户端:
Access via rsync daemon: 守护进程方式传输
1.将客户端的/etc/passwd 推送至 rsync服务端[backup]
rsync [OPTION...] SRC... [USER@]HOST::DEST
rsync -avz /etc/passwd rsync_backup@172.16.1.41::backup
2.将rsync服务端模块[/backup]下载至本地
Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]
rsync -avz rsync_backup@172.16.1.41::backup /opt
3.同步时不输入密码[第一种方式,sersync]
echo "1" >/etc/rsync.password
chmod 600 /etc/rsync.password
rsync -avz rsync_backup@172.16.1.41::backup /opt --password-file=/etc/rsync.password
4.同步时不输入密码[第二种方式:写脚本时使用]
export RSYNC_PASSWORD=1
rsync -avz rsync_backup@172.16.1.41::backup /opt
Rsync实现数据无差异同步
rsync -avz --delete rsync_backup@172.16.1.41::backup/ /data/ --password-file=/etc/rsync.password
限速
rsync -avzP --bwlimit=1 /opt/test.dosk rsync_backup@172.16.1.41::backup
Rsync备份案例
统一所有的目录站点是/backup
1.备份什么
1.系统重要的配置文件
/etc/fstab /var/spool/cron/root
2.服务的配置文件
/etc/rsyncd.conf
3.日志
/var/log/secure /var/log/message
4.脚本
/server/scripts
2.怎么备份
/backup/nfs_172.16.1.31_2018_09_05
/backup/nfs_172.16.1.31_2018_09_06
/backup/nfs_172.16.1.31_2018_09_07
3.编写脚本
[root@nfs ~]# echo $(hostname)_$(ifconfig eth1|awk 'NR==2{print $2}')_$(date +%F)
nfs_172.16.1.31_2018-09-05
[root@nfs ~]# mkdir /server/scripts -p
脚本
#脚本不可重复执行, 每次执行都会进行推送,可以进行判断
[root@nfs01 ~]# cat /server/scripts/backup_rsync_md5.sh
#!/bin/bash
#1.定义变量
Path=/backup
Host=$(hostname)
Addr=$(ifconfig eth1|awk 'NR==2{print $2}')
Date=$(date +%F)
Dest=${Path}/${Host}_${Addr}_${Date}
#2.检查目录是否存在
[ -d $Dest ] || mkdir -p $Dest
#3.拷贝需要备份的文件至$Dest
cd / && \
# system backup
tar czf $Dest/system.tar.gz etc/passwd etc/fstab etc/rc.d/rc.local var/spool/cron
# user backup
tar czf $Dest/user.tar.gz server/
# config backup
tar czf $Dest/config.tar.gz etc/rsyncd.conf
#4.进行md5校验
md5sum $Dest/*.tar.gz > $Dest/flag_${Date}
#5.客户端推送至rsync备份服务端
Rsync_User=rsync_backup
Rsync_Addr=172.16.1.41
Rsync_Module=backup
export RSYNC_PASSWORD=123456
rsync -avz $Path/ ${Rsync_User}@${Rsync_Addr}::${Rsync_Module}
#6.客户端本地保留最近7天的文件
find $Path/ -type d -mtime +7|xargs rm -rf