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关于数据同步的两种方式:

一、推(上传):全部主机推送本地数据至Rsync备份服务器,会致使数据同步缓慢(适合少许数据备份)  
二、拉(下载):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/passwdshell

远程传输scp

拉(下载):vim

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

查询配置文件存放的路径bash

[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 #定义接收备份数据目录ssh

3.建立用户(运行rsync服务的用户身份)

1.建立rsync帐户,不容许登陆不建立家目录异步

useradd -M -s /sbin/nologin rsync
2.建立备份目录(尽量磁盘空间足够大),受权rsync用户为属主async

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
相关文章
相关标签/搜索