提问的方法:
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/ rsync_back@172.16.1.41::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/ rsync_backup@172.16.1.41::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" 1026044751@qq.com < $Path/result_$Time
#4.服务端仅保留6个月的备份数据,其余全部删除
find $Path -type d -mtime +180 |xargs rm-rf
2.1在服务端配置发件人邮箱账号密码
[root@backup ~]# vim /etc/mail.rc
set from=123@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=123@qq.com
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 root@172.16.1.31:/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/ rsync_backup@172.16.1.41::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" 1026044760@qq.com <$Path/result_$Time
#4.服务端仅保留6个月的备份数据,其余的全部删除
find $Path -type d -mtime +180 | xargs rm -rf