centos服务器实时备份

 

一、目标

  1. /usr/local/src/projects 目录在两台 CentOS 7 服务器之间双向实时同步
  2. 任何一台机器目录变化,都会自动同步到另一台
  3. 开机自动运行,断网重连后继续同步

二、过程

  1. 安装 unison
  2. 配置免密 SSH
  3. 创建 unison 配置文件
  4. 创建实时监控脚本
  5. 注册 systemd 服务并启动

三、部署

1、安装 unison

https://github.com/bcpierce00/unison/releases 下载2.48.15版本
cp ./unison /usr/local/bin/
chmod +x /usr/local/bin/unison
unison -version

 

2、配置免密 SSH

#1、生成 SSH 密钥对(默认采用 RSA 算法),执行后,全部按回车(Enter)使用默认值即可。生成成功后,会在 ~/.ssh/ 目录下创建两个文件:id_rsa:私钥(重要!不可泄露给他人)。id_rsa.pub:公钥(需要上传到远程服务器)。
ssh-keygen -t rsa -b 4096

#2、将本地公钥上传到远程服务器,执行后会提示输入远程服务器的密码,输入正确后,本地公钥会自动添加到远程服务器的 ~/.ssh/authorized_keys 文件中。
#ssh-copy-id -p 远程SSH端口 远程用户名@远程服务器IP
ssh-copy-id -p 22 root@192.168.1.2

#3、验证免密登录
#ssh -p 远程SSH端口 远程用户名@远程服务器IP
ssh -p 22 root@192.168.1.2

 

3、创建 unison 配置文件

#创建配置文件:/root/.unison/default.prf

root = /usr/local/src/projects
root = ssh://root@192.168.1.2:22//usr/local/src/projects

ignore = Name *.swp
ignore = Name *.tmp
ignore = Name *~

#recurse = true
auto = true
batch = true
prefer = newer

 

4、创建实时监控脚本

#创建sh脚本:/usr/local/bin/unison-realtime.sh

#!/bin/bash

# 要同步的目录
SYNC_DIR="/usr/local/src/projects"

# 日志函数
log() {
        echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"
    }
log "开始检测目录:‘$SYNC_DIR’"
if inotifywait -r -e modify,create,delete,move,attrib "$SYNC_DIR" >/dev/null 2>&1; then
    log "检测到目录'$SYNC_DIR'变化,触发同步..."
    # 执行同步,忽略错误(避免同步失败导致脚本退出)
    if unison default >/dev/null 2>&1; then
        log "同步成功"
    else
        log "同步失败(错误码:$error_code)!请手动执行 'unison default' 查看详情"
    fi
fi

 

 

5、注册 systemd 服务并启动

#1、创建service文件: /etc/systemd/system/unison-realtime.service

[Unit]
Description=Unison Realtime Sync
After=network.target

[Service]
ExecStart=/usr/local/bin/unison-realtime.sh
Restart=always
RestartSec=10           # 失败后等待 10 秒再重启(默认 0.5 秒,容易超限)
StartLimitInterval=60   # 60 秒内的重启次数限制
StartLimitBurst=10      # 60 秒内最多允许 10 次重启(默认 5 次)
User=root
StandardOutput=journal  # 日志输出到 journalctl
StandardError=journal

[Install]
WantedBy=multi-user.target

2、同步systemd服务
systemctl daemon-reload
systemctl enable unison-realtime
systemctl start unison-realtime
systemctl status unison-realtime

 

四、注意事项

两台服务器都要部署以上脚本
第一次运行会全量同步 /usr/local/src/projects 目录
unison 默认会以修改时间新的文件为准解决冲突
如果要同步大文件,建议在低峰期首次运行

  

posted @ 2025-10-09 17:10  QiuPing  阅读(14)  评论(0)    收藏  举报