第一篇:备份服务

备份服务(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
/etc/rsyncd.conf

 后续配置

#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
/server/scripts/backup.sh 

 服务端脚本

#!/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}
/server/scripts/backup.sh

故障记录

  • 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
posted @ 2024-11-24 21:18  猿小姜  阅读(11)  评论(0编辑  收藏  举报