第一篇:备份服务
备份服务(rsync)
备份服务概述
- 需要使用到脚本、打包备份、定时任务
- 备份服务:rsyncd服务,不同主机间数据传输
- 特点:
- rsync是服务也是命令
- 使用方便,具有多种模式
- 传输数据的时候是增量传输
# 全量:将选定的数据全部推送走(scp) # 增量:只会把修改,新建的数据出推送走(rsync) # 把/etc/sysconfig/目录传输到另一台机器的/tmp/下面
scp -r /etc/sysconfig/ root@10.0.0.31:/tmp/
rsync -acz /etc/sysconfig/ root@10.0.0.31:/mnt/
rsync企业应用场景
单点问题:系统、网络、服务中某个组件如果发生故障,会导致整个系统的崩溃或不工作的情况
应用场景 | 应用建议 |
rsync作为命令使用 | 临时拉取、推送数据(可以通过scp命令实现) |
定时备份:rsync服务+定时任务 | 定时备份任务(定时任务进行备份+通过rsync传输备份) |
实现同步:rsync服务+sersync/lsyncd实现实时同步 | 解决存储服务单点问题 |
rsync服务与异地容灾 | 找一个异地的服务器存放备份 |
推与拉
rsync对于目录的区别⭐⭐⭐⭐⭐
- /etc /etc目录+目录的内容
- /etc/ /etc/目录下面的内容
rsync选项⭐⭐⭐⭐⭐
rsync选项 | 含义 |
-a |
-rlptgoD -r 递归复制 -l 复制软连接 -p 保持权限不变 -m 保持修改时间不变 -o 所有者不变 -g 用户组不变 -D --devices --specials 保持设备和特殊文件 |
-v | 显示详细过程 |
-z | 传输数据过程中进行压缩(公网) |
-P |
提供实时的进度信息 --partial:允许中断后保留部分传输的文件 --progress:再传输的时候显示进度信息 |
--bwlimit | 限速(注意不要与-z一起使用) |
--exclude --exclude-from |
排除与模式匹配的文件或目录 |
--delete | 目标目录与源目录保持一致的传输 |
Rsync使用模式⭐⭐⭐⭐⭐
- 本地模式:类似于复制,不推荐使用
- 远程模式:适用于临时传输数据(可以使用scp替代)
- 守护进程模式:传输数据,用于定时备份,定时同步
rsync本地模式(类似于cp)
rsync -a /etc/sysconfig/ /tmp/
rsync -a /etc/sysconfig /opt/
rsync远程模式(一对一远程传输)⭐⭐⭐
格式 | ||
rsync -a | 源文件 | 目标 |
推送:rsync | /etc/hostname | root@10.0.0.31:/tmp |
拉取:rsync | root@10.0.0.31:/etc/hosts | /opt/ |
# 推送/etc目录及目录内容到10.0.0.31的/tmp/目录 rsync -av /etc root@10.0.0.31:/tmp/ # 在/etc/下面创建文件再推送到10.0.0.31的/tmp/目录 touch /etc/yuanxiaojiang rsync -av /etc root@10.0.0.31:/tmp/ # 通过scp推送/etc目录及目录内容到10.0.0.31的/opt/目录 scp -r /etc root@10.0.0.31:/opt/ -r 递归传输
rsync守护进程模式⭐⭐⭐⭐⭐
安装rsync命令/服务
# 检查安装 更新 yum install -y rsync # 检查软件包内容 /etc/rsyncd.conf # 配置文件(服务端配置文件,守护进程模式) /etc/sysconfig/rsyncd # systemctl控制rsyncd服务的配置文件 /usr/bin/rsync # 命令
配置/etc/rsyncd.conf⭐⭐⭐⭐⭐
# created by yuanxiaojiang 2024-11-24 ##rsyncd.conf start## fake super = yes uid = rsync gid = rsync use chroot = no max connections = 100 timeout = 600 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log ignore errors read only = false list = false # hosts allow = 10.0.0.0/24 # hosts deny = 0.0.0.0/32 auth users = rsync_backup secrets file = /etc/rsync.password [data] path = /data comment = test environment
后续配置
#1.添加虚拟用户 useradd -s /sbin/nologin -M rsync #2.创建密码文件 密码文件格式: 用户名:密码 echo 'rsync_backup:123 ' >/etc/rsync.password chmod 600 /etc/rsync.password #3.共享目录与权限 mkdir /data/
chown rsync:rsync /data/ # 更改该文件的所有者和所属组
#4.启动服务
systemctl start rsyncd
systemctl enable rsyncd
访问测试
rsync守护进程模式客户端命令 | ||
rsync -avz | /etc/hosts | rsync_backup@10.0.0.41::data |
rsync_backup是服务端配置文件中的认证用户 | ||
data表示模块名字 |
免密传输数据到服务端
密码文件需要设置权限
[root@nfs01 ~]# echo '123' >/root/rsync.client [root@nfs01 ~]# rsync -avz /root/yuan.txt rsync_backup@10.0.0.41::data --password-file=/root/rsync.client
rsync守护进程模式执行流程
# 1.用户执行rsync -avz /etc/passwd rsync_backup@10.0.0.41::data --passwd-file=/root/rsync.client # 2.服务端接收到数据 # 3.服务端将用户名和密码与配置文件中的auth user 和 secrets file 进行校验 # 4.校验通过后,传输数据 # 5.数据到达服务端后所有者被修改为指定的uid和gid(配置文件中的rsync用户) # 6.数据写入data模块目录下面(/data/)
全网备份项目⭐⭐⭐⭐⭐
- 任务/项目:
- 定时备份nfs01、web01配置文件(文件名:/backup/ip地址/conf-时间.tar.gz)
- 定时备份nfs01、web01同步到backup服务器/backup/上
- 定时备份nfs01、web01删除七天之前的备份
- 在backup服务器上每天发送备份结果的目录(find或tree)
- 检查:邮箱是否收到邮件,检查备份服务器上面个是否收到备份
全网备份项目架构图⭐⭐⭐
项目步骤
步骤说明 | 详细内容 |
rsync服务端调试 | 服务端配置/backup/目录 |
rsync客户端节点配置脚本(备份) |
备份 校验 推送 清理 |
客户端节点匹配定时任务 | 定时运行脚本 |
在备份服务器上检查并发送结果邮件 |
清理备份 校验 rsync服务端检查备份并发送邮件 |
增加校验功能⭐⭐⭐
- md5sum -c(--check:根据md5记录文件进行对比)
- 应用:客户端备份生成备份时,创建指纹信息md5sum
校验单个文件(md5)
# 创建/root/md5_test.txt测试文件文件 echo yuanxiaojiang >/root/md5_test.txt # 创建md5的值 md5sum /root/md5_test.txt cfe635ffc68fba51b2ee71a91852bd86 /root/md5_test.txt # 将md5的值保存到/root/yuan.md5(文件后缀名用md5) md5sum /root/md5_test.txt >/root/yuan.md5 # 修改文件内容,测试md5是否发生文件是否变化 md5sum -c /root/yuan.md5 /root/md5_test.txt: FAILED md5sum: WARNING: 1 computed checksum did NOT match
校验多个文件(find + md5)
# 给/etc/目录下所有文件创建md5并保存到指定的目录中 find /etc/ -type f |mdsum >/root/etc-all.md5 # 进行md5校验 md5sum -c /root/etc-all.md5 md5sum --quiet -c /root/etc-all.md5 # 只显示md5异常的文件
脚本文件⭐⭐⭐⭐⭐
客户端脚本
#!/bin/bash #author: yuanxiaojiang #desc: backup configure file # 变量 ip=`hostname -I |awk '{print $2}'` time=`date +%F` backup_dir=/backup/$ip backup_file=conf-${time}.tar.gz backup_server=172.16.1.41 # 备份 mkdir -p $backup_dir tar zcf $backup_dir/conf-$time.tar.gz /etc/ # md5校验 md5sum ${backup_dir}/${backup_file} >${backup_dir}/fingerprint.md5 # 推送 rsync -a ${backup_dir} rsync_backup@${backup_server}::backup --password-file=/etc/client.rsync # 清理 find ${backup_dir} -type f -name "*.tar.gz" -mtime +7 |xargs rm -f
服务端脚本
#!/bin/bash #author: yuanxiaojiang #desc: examine backup and clean backup result_file=/server/scripts/result.txt # clean old backup find /backup/ -type f -name "*.tar.gz" -mtime +30 |xargs rm -f # statistics backup results find /backup/ -type f -name "*.tar.gz" |xargs ls -lh |awk -F '[ /]+' 'BEGIN{print "ip","name","size"} {print $(NF-1),$NF,$5}' |column -t >${result_file} # md5sum verify find /backup/ -name "fingerprint.md5" |xargs md5sum -c >>${result_file} # 3.send email mail -s "backup results everyday" 2573013863@qq.com <${result_file}
故障记录
- password mismatch
- Jan 10 11:08:00 backup rsyncd[3177]: authfailed on module data from UNKNOWN (10.0.0.41) for rsync_backup: no secrets file
- permission denied (selinux 和 防火墙)
- no matching rule