当前位置:首页 > 技术 > 正文内容

使用Rsync实现服务器数据自动备份方案

访客 技术 2026年6月19日 1

项目背景与需求分析

企业环境中存在一台核心NFS服务器,其存储的关键业务数据面临硬件故障风险。现需建立自动化备份机制,确保数据安全性。

备份策略要求:

  • 每日凌晨自动打包并同步关键配置文件和业务数据
  • 本地保留最近7天备份,远端服务器长期归档
  • 按服务器IP分类存储,文件命名包含时间戳
  • 实施数据完整性校验,并发送通知邮件

环境规划与网络配置

服务器角色分配如下:

主机名管理IP业务IP功能定位
backup10.0.0.41172.16.1.41备份服务端
nfs0110.0.0.31172.16.1.31NFS存储节点
web0110.0.0.8172.16.1.8Web应用服务器

备份服务器配置流程

首先确认rsync软件包已安装:

rpm -q rsync

编辑主配置文件/etc/rsyncd.conf:

uid = rsync
gid = rsync
use chroot = no
max connections = 200
timeout = 300
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsync.lock
log file = /var/log/rsyncd.log

[backup_store]
path = /backup/
ignore errors
read only = false
list = false
hosts allow = 172.16.1.0/24
hosts deny = 0.0.0.0/32
auth users = backup_user
secrets file = /etc/rsync_auth.conf

初始化系统账户和存储目录:

useradd -s /sbin/nologin -M rsync
mkdir /backup
chown rsync:rsync /backup

启动rsync守护进程:

rsync --daemon
ss -tuln | grep 873

创建服务控制脚本/etc/init.d/backup_service:

#!/bin/bash
#chkconfig: 35 80 20
#description: Backup server daemon control

. /etc/rc.d/init.d/functions

start_service() {
    rsync --daemon
    [[ $? -eq 0 ]] && action "启动备份服务:" /bin/true || action "启动失败:" /bin/false
}

stop_service() {
    pkill rsync
    [[ $? -eq 0 ]] && action "停止备份服务:" /bin/true || action "停止失败:" /bin/false
}

case "$1" in
    start) start_service ;;
    stop) stop_service ;;
    restart) stop_service; start_service ;;
    *) echo "用法: $0 {start|stop|restart}" ;;
esac

设置脚本权限并注册为系统服务:

chmod +x /etc/init.d/backup_service
chkconfig backup_service on

配置认证凭证文件:

echo "backup_user:mypass123" > /etc/rsync_auth.conf
chmod 600 /etc/rsync_auth.conf

编写服务端健康检查脚本/server/check_integrity.sh:

#!/bin/bash
# 数据完整性验证脚本

BACKUP_PATH="/backup"
CLIENT_COUNT=2
MAIL_RECEIVER="admin@example.com"

/etc/init.d/postfix status &>/dev/null || /etc/init.d/postfix start

file_count=$(find $BACKUP_PATH -name "checksum*.txt" | wc -l)
if [[ $file_count -eq $CLIENT_COUNT ]]; then
    find $BACKUP_PATH -name "checksum*.txt" | while read check_file; do
        md5sum -c "$check_file"
        if [[ $? -eq 0 ]]; then
            logger "备份校验成功: $check_file"
            rm -f "$check_file"
        else
            logger "备份校验失败: $check_file"
            echo "校验失败通知" | mail -s "备份异常告警" $MAIL_RECEIVER
        fi
    done
else
    echo "客户端数据不完整" | mail -s "备份完整性警告" $MAIL_RECEIVER
fi

# 清理过期非周一备份
find $BACKUP_PATH -type f ! -name "*_1.tar.gz" -mtime +180 -delete

将检查脚本加入计划任务:

0 6 * * * /bin/bash /server/check_integrity.sh &>/dev/null

客户端部署步骤

在各业务服务器上执行以下操作:

创建认证文件:

echo "mypass123" > /etc/client_auth.key
chmod 600 /etc/client_auth.key

建立本地备份目录:

mkdir -p /backup

开发数据采集脚本/server/data_archive.sh:

#!/bin/bash
# 客户端数据归档脚本

STORAGE_DIR="/backup"
REMOTE_HOST="172.16.1.41"
SERVER_IP=$(ip addr show eth1 | awk '/inet / {gsub(/\/.*/, "", $2); print $2}')
DATE_TAG="${SERVER_IP}_$(date +%Y%m%d_%u)"

mkdir -p ${STORAGE_DIR}/${DATE_TAG}

# 复制关键系统文件
[[ -f /var/spool/cron/root ]] && cp -a /var/spool/cron/root ${STORAGE_DIR}/${DATE_TAG}/
[[ -f /etc/rc.local ]] && cp -a /etc/rc.local ${STORAGE_DIR}/${DATE_TAG}/
[[ -d /opt/scripts ]] && cp -a /opt/scripts ${STORAGE_DIR}/${DATE_TAG}/
[[ -d /var/www/html ]] && cp -a /var/www/html ${STORAGE_DIR}/${DATE_TAG}/
[[ -d /var/log/nginx ]] && cp -a /var/log/nginx ${STORAGE_DIR}/${DATE_TAG}/
[[ -f /etc/sysconfig/iptables ]] && cp -a /etc/sysconfig/iptables ${STORAGE_DIR}/${DATE_TAG}/

cd $STORAGE_DIR
tar -czf ${DATE_TAG}.tar.gz ${DATE_TAG}
rm -rf ${DATE_TAG}

# 生成校验码
md5sum ${DATE_TAG}.tar.gz > checksum_${SERVER_IP}.txt

# 同步至备份服务器
rsync -az ${STORAGE_DIR}/ backup_user@${REMOTE_HOST}::backup_store --password-file=/etc/client_auth.key

# 删除7天前旧备份
find ${STORAGE_DIR} -name "${SERVER_IP}*" -type f -mtime +7 -delete

配置定时执行任务:

0 0 * * * /bin/bash /server/data_archive.sh &>/dev/null

通过以上配置,实现了企业级分布式服务器自动备份解决方案。

标签: rsync

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。