Rsync的备份案例

提问的方法:

1.我现在在做什么?

测试rsync客户端连接服务端

2.我遇到了什么问题

截图

3.我尝试了什么解决办法?

关闭firewalld关闭selinux ping 了对应得主机


1.有关rsync守护进程得解释说明

问题1.rsync用户与rsync_backup用户有什么区别?

1.1 rsync用户是rsyncd进程运行得用户身份

1.2rsync_backup是rsync认证时需要使用得虚拟用户

问题2.rsync.passwd与rsync.pass有什么关系?

2.1 rsync.passwd该文件主要定义虚拟用户名称以及 虚拟用户对应得密码(服务端才能定义)

2.2 rsync.pass其实可以没有,也可以是文件 因为这里面只有密码便于我们向服务器推送文件是不需要密码(客户端,只能有密码,不能有用户名) 或者 设定环境变量 RSYNC_PASSWORD

问题3.为什么写入到backup中的文件或目录属主和属组都是rsync呢

3.1客户端推送文件至服务端,服务端需要以该进程的用户身份将文件存储下来,所以属主和属组就发生了变化( 变化为了 rsync该进程的运行用户身份)

问题4什么时候使用守护进程模式,什么时候使用远程传输模式

4.1守护进程可以设置定时任务进行,这种常用于定期备份

4.2远程守护方式主要用于用户临时操作

用户名称:

​ 远程传输: 系统用户 root

​ 守护进程:虚拟用户 rsync_backup

拷贝资源:

​ 远程传输:可以是系统中任何路径下的文件 使用方式 :

​ 守护传输:固定模块下的资源 使用方式::

今日内容

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

角色 外网(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 nfs
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点定时执行该脚本

1.我们需要备份什么

/etc/rc.local /etc/fstab /etc/hosts

/var/spool/cron/ /etc/firewalld /server/scripts

2.我们要备份到哪里去

/backup目录

该主机的主机名称_该主机的IP地址 _今天的日期

3.我要推送到哪去

备份服务器 172.16.1.41 backup模块

客户端类似于:散货———装车———运输———下一个仓库点

1.我们要准备一个目录

[root@nfs ~]# mkdir -p  "/backup/$(hostname)_$(ifconfig eth1 | awk '/inet / {print $2}')_$(date +%F)"

2.将文件备份到该目录中

[root@nfs ~]# cp -r /etc/rc.local /etc/fstab  /etc/hosts  /backup/nfs_172.16.1.31_2020-04-15/

3.使用rsync命令进行运输

[root@nfs ~]#rsync -avz /backup/ [email protected]::backup

4.保留最近7天

[root@nfs ~] find /backup -type d -mtiem +7 |xargs -rf

5.编写定时任务

6.脚本文件

[root@backup ~]# vim /scripts/clinet_push_data.sh
#!/usr/bin/bash
#客户端nfs服务器推送备份的数据到backup服务器
0.将目录需要用到的主机名IP地址日期定义为变量
exprot PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Host=$(hostname)
Addr=$(ifconfig eth1 |awk '/inte / {print $2}')
Time=$(date +%F)
Path=/backup
DirName="{$Host_$Addr_$Time}"
#1.我们需要准备一个目录
[root@nfs ~]# mkdir -p "$Path/$DirName"
#2.将文件备份到该目录
[root@nfs ~]#cd / && \
#[root@nfs ~]# cp -r /etc/rc.local/etcfstab /etc/hosts $Path$Addr
[root@nfs ~]# tar czf $Path/DirName/sys.tar.gz etc/fstab etc/hosts && \
[root@nfs ~]# tar czf $Path/DirName/other.tar.gz etc/scripts && \
[root@nfs ~]# md5sum $Path/DirName/*.tar.gz > $Path/DirName/check_flag_$Time
#3.使用rsync命令进行传输
export RSYNC_PASSWORD=123456
rsync -avz $Path/ [email protected]::backup
#4.保留本地7天的数据
find $Path -type d -mtime +7 |xargs rm -rf

服务端需求

1.服务端部署rsync,用于接收客户端推送过来的备份数据
https://www.jianshu.com/writer#/notebooks/45118667/notes/67186911

2.服务端需要每天校验客户端推送过来的数据是否完整

3.服务端需要将每天的校验结果通知给管理员

根据服务端的需求这就需要我们优化客户端的脚本

将散货————打包————贴上封条—————推送给服务端

2.服务端

更具客户端推送的封条——校验数据是否一致,最后通知管理员

[root@backup ~]# vim /scripts/check_clint_data.sh
#!/usr/bin/bash
#检查客户端推送的数据 by xiaolai
#0.将目录需要的主机名 ip 时间定义为变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Time=$(date +%F)
Path=/backup
#1.找到当天的check_flag文件,校验数据是否完整并将校验的结果存储至某个文件
find /backup/nfs/ -type f -name check_flag_$Time |xargs md5sum -c >$Path/result_$Time
mail -s "Rsync Bachup %Time" [email protected] < $Path/result_$Time
#4.服务端仅保留6个月的备份数据,其余全部删除
find $Path -type d -mtime +180 |xargs rm-rf                                                             

2.1在服务端配置发件人邮箱账号密码

[root@backup ~]# vim /etc/mail.rc
set [email protected]
set smtp=smtps://smtp.qq.com:465
set [email protected]
set smtp-auth-password=#客户端授权码zaxgohuyknnrbdgs
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

3.如何快速备份一台新的机器

[root@web01 ~]# rsync -azv [email protected]:/scripts/clinet_push_data.sh /scripts/
[root@web01 ~]#chmod +x /scripts/clinet_push_data.sh
[root@web01 ~]# sh /scripts/clinet_push_data.sh
然后给所有的客户端配置定时任务
给服务端配置定时任务

附:完整的脚本文件

客户端的脚本文件

[root@nfs ~]# cat /scripts/clinet_push_data.sh 
#!/usr/bin/bash
# 客户端推送备份的数据至备份服务器   by oldxu
#0.将目录需要用的主机名,IP,时间,定义为变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Host=$(hostname)
Addr=$(ifconfig eth1 | awk '/inet / {print $2}')
Time=$(date +%F)
Path=/backup
DirName="${Host}_${Addr}_${Time}"
#1.我们要准备一个目录
mkdir -p  "$Path/$DirName"
#2.将文件备份到该目录中
cd / && \
tar czf $Path/$DirName/sys.tar.gz etc/rc.local etc/fstab && \
tar czf $Path/$DirName/other.tar.gz etc/hosts scripts && \
md5sum $Path/$DirName/*.tar.gz > $Path/$DirName/check_flag_$Time
#3.使用rsync命令进行运输
export RSYNC_PASSWORD=123456
rsync -avz $Path/ [email protected]::backup
#4.保留本地7天的数据
find $Path  -type d -mtime +7  | xargs rm -rf

服务端的脚本文件

[root@backup ~]# cat /scripts/check_clinet_data.sh 
#!/usr/bin/bash
# 检查客户端推送的数据   by oldxu

#0.将目录需要用的主机名,IP,时间,定义为变量
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
Time=$(date +%F)
Path=/backup


#1.找到当天的check_flag文件,校验数据是否是完整的,并且将校验结果存储至某个文件中
find $Path/ -name "check_flag_$Time"|xargs md5sum -c > $Path/result_$Time

#3.将校验的结果通知给管理人员
mail -s "Rsync Backup $Time" [email protected] <$Path/result_$Time


#4.服务端仅保留6个月的备份数据,其余的全部删除
find $Path  -type d -mtime +180  | xargs rm -rf

你可能感兴趣的:(Rsync的备份案例)