Rsync

备份的作用

用于数据备份,主要用于备份重要的数据,可以尽可能的保证数据不丢失。如果有误操作导致数据丢失的话,可以恢复数据。

怎么做备份?

完全备份

表示完整备份。(效率低,占用空间过多,一般情况下只有第一次备份时去使用)

增量备份

表示只备份变化的部分。(效率高,由于只备份变化的部分,所以占用空间相对较少)

备份使用的工具

  1. 本地备份(cp)完整备份,每次都全部拷贝一下。
  2. 远程备份(scp、rsync)

rsync基本介绍

rsync 全名是remote rsync,远程同步,可以实现不同主机之间的同步,同时支持增量和全量的同步方式。

rsync备份工具的应用场景

前置条件

推(push):表示把本地的数据推送到备份服务器。
拉(pull):表示备份服务器把本地服务器上的数据拉取下来。(会造成备份服务器的开销过大)

使用场景

rsync的传输模式

rsync备份默认第一次完全备份,第二次增量备份。

  1. 本地传输(单个主机之间的拷贝)
    语法格式:
    rsync -avz 源数据路径 目标位置
    使用示例:
[root@oldboy ~]# rsync -avz /root/1.sh /tmp/
# 把/root/1.sh备份到/tmp下
  1. 远程传输 (需要借助ssh协议进行传输,需要对端的用户名和密码)
    语法格式:
    【push】
    rsync -avz 源文件 [用户名@]主机ip:目标目录
    使用示例:
[root@oldboy ~]# rsync -avz 1.sh root@172.16.1.41:/opt
# 把本地服务器当前目录下的1.sh文件推送到172.16.1.41服务器的/opt目录下,使用root用户推送。

【pull】
使用格式:
rsync -avz [用户名@]主机ip:源文件 目标目录
使用示例:

[root@oldboy ~]# rsync -avz root@172.16.1.41:/opt/1.sh /mnt/
# 把172.16.1.41服务器的/opt/1.sh文件拉取到本地服务器的/mnt/下,使用root用户拉取。

在拉取或者推送目录时,路径最后添加/表示推送目录下的内容,不添加/表示不推送只推送目录本身。
不加用户名,默认是使用root用户。
弊端:
1)使用系统用户(不安全)
2)使用普通用户(会出现权限不够的情况)

  1. 守护进程(使用虚拟用户(系统中不存在)来实现推送。)

【push】
使用格式:
rsync -avz 源文件 [虚拟用户名@]主机ip:目标目录
使用示例:

在这里插入代码片

【pull】
使用格式:
rsync -avz [虚拟用户名@]主机ip:源文件 目标目录
使用示例:

在这里插入代码片

使用方法:
前期规划:
172.16.1.41 rsync服务端
172.16.1.31 rsync客户端

# 安装
[root@oldboy ~]# yum install rsync -y
# 配置
[root@backup ~]# rpm -qc rsync
  查看rsync的配置文件路径 
[root@backup ~]# vim /etc/rsyncd.conf 
 进入配置文件进行如下配置:
# [ftp]
#        path = /home/ftp
#        comment = ftp export area
uid = rsync								# 运行进程的用户
gid = rsync								# 运行进程的用户组
port = 873								# 监听的端口
fake super = yes						# 不需要rsync以root身份运行就可以存储文件的完整属性
use chroot = no							# 禁锢推送的数据至某个目录,不允许跳出改目录
max connections = 200					# 最大连接数
timeout = 600							# 超时时间
ignore errors							# 忽略错误信息
read only = false						# 对备份数据可读写
list = false							# 不允许查看模块信息
auth users = rsync_backup				# 定义虚拟用户,作为连接认证用户
secrets file = /etc/rsync.passwd		# 定义rsync服务用户连接认证密码文件路径
log file = /var/log/rsyncd.log			# 日志文件的路径
#####################################
#[backup]								# 定义模块信息
#comment = welcome to oldboyedu backup!	# 模块注释信息
#path = /backup							# 定义接收备份数据目录
创建系统用户为运行进程的用户
[root@backup ~]# useradd -M -s/sbin/nologin rsync
创建虚拟用户的密码文件并写入密码
[root@backup ~]# echo "rsync_backup:123456" >> /etc/rsync.passwd
修改用户密码文件权限
[root@backup ~]# chmod 600 /etc/rsync.passwd 
创建接受备份数据的目录
[root@backup ~]# mkdir /backup
修改目录权限,允许我们可以把数据写入到/backup目录中
[root@oldboy /]# chmod -R o+w /backup/
# 启动
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd
# 测试

rsync参数

-a:归档模式传输,等于-tropgDl
-v:输出传输过程的详细信息
-z:传输时进行压缩
-r:递归传输目录以及子目录
-t:保持文件时间信息
-o:保持文件属主信息
-p:保持文件权限
-g:保持文件属组信息
-l:保留软链接
-P:显示同步过程以及传输时的进度
-D:保留设备文件信息
-L:保留软链接指向的目标文件
-e:使用信道协议,指定替代rsh的shell程序
–exclude : 指定排除不需要传输的文件模式
–exclude-from:文件名所在的目录文件
-bwlimit:限速传输(用于内网交换)
-partial:断点续传
-delete:让目标目录和源目录数据保持一致

  1. 限速配置方法:
[root@oldboy ~]# rsync -avz -P --bwlimit=1 /root/ rsync_backup@172.16.1.41::backup
限速1kb传输
  1. 实现数据无差异同步的配置方法(主要用于备份目录):
    推:客户端–>服务端
    服务端必须与客户端保持一致。
[root@oldboy ~]# rsync -avz -delete /root/ rsync_backup@172.16.1.41::backup

拉:服务端–>客户端
客户端必须与服务端保持一致。

[root@oldboy ~]# rsync -avz -delete rsync_backup@172.16.1.41::backup /root/ 
  1. 无需输入密码实现rsync的推送以及拉取的实现方法:
    方式1:–password-file(载入密码)
    把我们的密码编写到某一个文件中去,然后使用–password-file参数去载入这个文件中就可以自动加载文件中的密码了。

方式2:设定环境变量的方式(脚本使用居多)

给我们的RSYNC_PASSWIRD环境变量设置值为我们的虚拟用户密码。然后就可以直接进行文件的推拉了。(临时)

rsync相关问题

  1. rsync用户和rsync_backup用户有什么区别?
  1. rsync用户是rsyncd进程运行的用户身份。
    2)rsync_backup是rsync认证时需要使用的虚拟用户,可以自行定义。
  1. rsync.passwd与rsync.pass有什么关系?
    这二者并无直接关系。
    rsync.passwd主要是定义虚拟用户的名称以及虚拟用户对应的密码(服务端才定义)
    rsync.pass其实可以没有,也可以是任何文件,因为这里面只有密码,便于我们向rsync推送数据时,无需密码认证(客户端。只能由密码,不能有用户名),或者设定环境变量RSYNC_PASSWORD。
  2. 为什么写入到backup中的文件或目录,属主和属组都是rsync呢?
    客户端推送文件至服务端,服务端需要以该进程的用户身份将文件存储下路,所以属主和属组就发生了变化。(变化为了rsync该进程的运行用户身份)。
  3. 什么时候使用守护进程模式,什么时候使用远程传输模式。
    守护进程模式可以设置定时任务进行,常用于备份。
    远程传输模式主要用户临时操作。

项目实战

案例:
已知3台服务器主机名分别为web01、backup 、nfs主机信息见下表:

角色 外网IP(NAT) 内网IP(LAN) 主机名
WEB eth0:10.0.0.7 eth1:172.16.1.7 web01
NFS eth0:10.0.0.31 eth1:172.16.1.31 nfs01
Rsync eth0:10.0.0.41 eth1:172.16.1.41 backup

客户端需求

  1. 客户端提前准备存放的备份的目录,目录规则如下:/backup/nfs_172.16.1.31_2018-09-02
  2. 客户端在本地打包备份(系统配置文件、应用配置等)拷贝至/backup/nfs_172.16.1.31_2018-09-02
  3. 客户端最后将备份的数据进行推送至备份服务器
  4. 客户端服务器本地保留最近7天的数据, 避免浪费磁盘空间
  5. 客户端每天凌晨1点定时执行该脚本
    服务端需求
  6. 服务端部署rsync,用于接收客户端推送过来的备份数据
  7. 服务端需要每天校验客户端推送过来的数据是否完整
  8. 服务端需要每天校验的结果通知给管理员
  9. 服务端仅保留6个月的备份数据,其余的全部删除

客户端脚本编写如下:

 export PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/root/bin
Time=$(/usr/bin/date +%F)
Hostname=$(/usr/bin/hostname)
Ip=$(/usr/sbin/ifconfig eth1 | grep "netmask" | awk '{print $2}')
Dirname="${Hostname}_${Ip}_${Time}"

/usr/bin/mkdir -p "/backup/$Dirname"
/usr/bin/tar -czf /backup/$Dirname/etc.tar.gz /etc/fstab /etc/hosts /var/spool/cron/ /etc/firewalld
/usr/bin/rsync -avz /backup/$Dirname rsync_backup@172.16.1.41::backup --password-file=/etc/rsync.pass
/usr/bin/find /backup -type d -mtime +7 | xargs /usr/sbin/rm -rf

客户端定时任务编写如下:

# 每天凌晨1点备份数据
00 01 */1 * * /usr/bin/bash /root/1.sh &>/dev/null

服务端配置:

# 安装
[root@oldboy ~]# yum install rsync -y
# 配置
[root@backup ~]# rpm -qc rsync
  查看rsync的配置文件路径 
[root@backup ~]# vim /etc/rsyncd.conf 
 进入配置文件进行如下配置:
# [ftp]
#        path = /home/ftp
#        comment = ftp export area
uid = rsync								# 运行进程的用户
gid = rsync								# 运行进程的用户组
port = 873								# 监听的端口
fake super = yes						# 不需要rsync以root身份运行就可以存储文件的完整属性
use chroot = no							# 禁锢推送的数据至某个目录,不允许跳出改目录
max connections = 200					# 最大连接数
timeout = 600							# 超时时间
ignore errors							# 忽略错误信息
read only = false						# 对备份数据可读写
list = false							# 不允许查看模块信息
auth users = rsync_backup				# 定义虚拟用户,作为连接认证用户
secrets file = /etc/rsync.passwd		# 定义rsync服务用户连接认证密码文件路径
log file = /var/log/rsyncd.log			# 日志文件的路径
#####################################
#[backup]								# 定义模块信息
#comment = welcome to oldboyedu backup!	# 模块注释信息
#path = /backup							# 定义接收备份数据目录
创建系统用户为运行进程的用户
[root@backup ~]# useradd -M -s/sbin/nologin rsync
创建虚拟用户的密码文件并写入密码
[root@backup ~]# echo "rsync_backup:123456" >> /etc/rsync.passwd
修改用户密码文件权限
[root@backup ~]# chmod 600 /etc/rsync.passwd 
创建接受备份数据的目录
[root@backup ~]# mkdir /backup
修改目录权限,允许我们可以把数据写入到/backup目录中
[root@oldboy /]# chmod -R o+w /backup/
# 启动
[root@backup ~]# systemctl start rsyncd
[root@backup ~]# systemctl enable rsyncd

服务端脚本编写:

export PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/sbin:/root/bin
Time=$(/usr/bin/date +%F)
Path=/backup
find $Path/ -type f -name "check_flag_$Time" | xargs md5sum -c > $Path/result_$Time
mail -s "Rsync Backup $Time" 2756026071@qq.com < $Path/result_$Time
find $Path -type d -mtime +180 | xargs rm -rf

配置邮箱文件:

set bsdcompat
set bsdcompat
set from=2358423198@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=2358423198@qq.com
set smtp-auth-password=校验码
set smtp-auth=login

服务器定时任务:

# 每天校验备份数据完整性并将结果邮箱通知管理员
00 00 */1 * * bash /scripts/1.sh &> /dev/null
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值