温馨提示×

如何使用CentOS Trigger进行备份

小樊
52
2026-01-10 16:39:16
栏目: 智能运维

在 CentOS 中,通常把“Trigger”理解为基于事件的触发式备份。常见做法有三类:基于 inotify 的 rsync 实时触发、使用 lsyncd 封装的近实时同步、以及定时触发(cron/systemd timer)作为兜底。下面给出可直接落地的配置示例与要点。

方案一 基于 inotify + rsync 的触发式备份

  • 适用场景:本机目录变更后立即同步到远端,尽量“实时”。
  • 思路:用 inotifywait 监听目录事件,调用 rsync 增量同步。

服务端(备份机,IP 示例:10.10.1.9)配置 rsync 守护进程

  • 安装 rsync(略)。创建模块与认证:
# /etc/rsyncd.conf
pid file = /var/run/rsyncd.pid
port = 873
address = 10.10.1.9
use chroot = no
read only = no
hosts allow = 10.10.1.6

[ htdocs ]
path = /data0/htdocs
comment = htdocs backup
auth users = backup
secrets file = /etc/rsyncd/rsyncd.secrets
  • 创建认证文件(服务端):
echo "backup:YourStrongPass" > /etc/rsyncd/rsyncd.secrets
chmod 600 /etc/rsyncd/rsyncd.secrets
  • 启动服务:
rsync --daemon

客户端(源机,IP 示例:10.10.1.6)监听并触发同步

  • 安装 inotify-tools(略)。创建触发脚本:
#!/usr/bin/env bash
SRC="/data0/htdocs/"
HOST="10.10.1.9"
MODULE="htdocs"
USER="backup"
PASS="/etc/rsyncd/rsyncd.secrets"   # 仅含密码

inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' \
  -e modify,delete,create,attrib "$SRC" | while read line; do
    /usr/bin/rsync -vzrtopg --delete --password-file="$PASS" \
      "$SRC" "${USER}@${HOST}::${MODULE}" >>/var/log/rsync.log 2>&1
    echo "$line was rsynced" >>/var/log/rsync.log
done
  • 后台运行与自启:
chmod +x /root/shell/rsync.sh
setsid /root/shell/rsync.sh &
echo "/root/shell/rsync.sh" >> /etc/rc.local
  • 防火墙放行 873/tcp
firewall-cmd --add-port=873/tcp --permanent && firewall-cmd --reload

说明:首次全量,后续仅传变更;如需更细粒度事件可调整 inotify 事件集合。

方案二 使用 lsyncd 实现近实时触发备份

  • 适用场景:希望更稳健、可配置、带延迟合并与多进程能力的近实时同步。
  • 思路:lsyncd 监听 inotify 事件,后台调用 rsync 执行同步。

安装与配置

  • 安装依赖与 lsyncd(略)。示例配置:
-- /usr/local/lsyncd/etc/lsyncd.conf
settings {
  logfile      = "/usr/local/lsyncd/var/lsyncd.log",
  statusFile   = "/usr/local/lsyncd/var/lsyncd.status",
  inotifyMode  = "CloseWrite",
  maxProcesses = 8,
  delay        = 15,
}

sync {
  default.rsync,
  source      = "/home/wwwroot/attachments",
  target      = "rsync137@192.168.1.137::rsyncd",
  delete      = true,
  exclude     = { ".*" },
  rsync       = {
    binary      = "/usr/bin/rsync",
    archive     = true,
    compress    = true,
    verbose     = true,
    password_file = "/etc/rsyncd.pwd",
    _extra     = { "--bwlimit=200" },
  }
}
  • 客户端密码文件(仅密码):
echo "YourStrongPass" > /etc/rsyncd.pwd
chmod 600 /etc/rsyncd.pwd
  • 启动:
lsyncd /usr/local/lsyncd/etc/lsyncd.conf

说明:delay 可合并短时大量事件,减少频繁 rsync;支持 rsync/rsyncssh/direct 多种模式。

方案三 定时触发备份作为兜底

  • 适用场景:对“近实时”要求不高,或作为触发式方案的补充(如每日全量/增量)。
  • 方式 A:cron
# 每天 03:30 执行
0 3 * * * /usr/bin/rsync -az --delete -e ssh /data/ user@backup:/backup/data-$(date +\%F)/
  • 方式 B:systemd timer(CentOS 7+)
# /usr/lib/systemd/system/backup.service
[Unit]
Description=Daily backup
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh

# /usr/lib/systemd/system/backup.timer
[Unit]
Description=Run backup daily at 03:30
[Timer]
OnCalendar=*-*-* 03:30:00
Persistent=true
Unit=backup.service
[Install]
WantedBy=timers.target

启用:

systemctl daemon-reload
systemctl enable --now backup.timer

说明:cron 简单通用;systemd timer 更便于按日历时间管理与查看状态。

安全与运维要点

  • 认证与权限
    • rsync 模块认证文件格式:服务端为“用户名:密码”,客户端密码文件为“仅密码”;权限均设为 600
    • 仅开放必要网络与端口(如 873/tcp),并限制 hosts allow
  • 传输与性能
    • 常用 rsync 选项:-a/-vz/-r/-t/-o/-p/-g(归档、压缩、递归、保持时间/属主/权限/属组),必要时加 –delete 做镜像;大带宽场景可用 –bwlimit 限速。
  • 日志与监控
    • 记录 rsync/lsyncd 日志,定期审计;为脚本增加退出码检查与告警(如邮件/企业微信/钉钉机器人)。
  • 版本与保留
    • 采用时间戳或序号做多版本保留;定期清理过期备份,避免磁盘占满。
  • 恢复演练
    • 定期从备份恢复至测试环境,验证可用性与完整性(尤其是数据库与关键配置)。

0