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
posted @ 2018-09-06 17:33  jason·ma  阅读(465)  评论(0编辑  收藏  举报