Centos7.9从源服务器增量备份到文件到目标服务器

2024/1/31 增量实时备份文件Centos7.9inotifyrsyncserviceSSH密钥

rsync是Liunx下的远程数据同步工具,可快速同步多台服务器间的文件和目录,并可实现增量同步以减少数据的传输。 rsync有两种常用的认证方式,一种是rsync-daemon方式,另外一种是ssh方式。本文采用ssh方式

# Centos7.9从源服务器增量备份到文件到目标服务器

两台服务器的操作系统:Centos7.9 源服务器:192.168.9.126 备份路径/docker
目标服务器:192.168.9.160 备份到路径/docker

# 生成SSH密钥,免密登录

在源服务器上,生成SSH密钥: 在终端中输入以下命令,并按照提示进行操作: ssh-keygen -t rsa -b 4096 -C "110@qq.com"

复制公钥到目标服务器: 使用以下命令将公钥复制到目标服务器的authorized_keys文件中: ssh-copy-id root@192.168.9.160 需要输入root密码

# 安装:inotify工具来监视文件系统的变化,rsync来实现实时的增量备份

sudo yum -y install epel-release
sudo yum -y install rsync inotify-tools
1
2

# 在源服务器编写脚本监视文件变化并实时同步到目标服务器

vim /docker/backup.sh

#!/bin/bash

SOURCE_DIR="/docker"
DESTINATION_SERVER="root@192.168.9.160"
DEST_DIR="/"

inotifywait -m -r -e modify,create,delete,move --format '%w%f' "${SOURCE_DIR}" | while read file
do
    rsync -avz -e "ssh -p 22 -i /path/to/ssh/key"  --exclude="node_modules"  --exclude="target" --delete "${SOURCE_DIR}" "${DESTINATION_SERVER}:${DEST_DIR}"
done
1
2
3
4
5
6
7
8
9
10

chmod +x /docker/backup.sh

# 手动执行

sh /docker/backup.sh

# 开机自启动

vim /etc/systemd/system/backup.service

特别注意:文件末尾要一个空行,不然执行不成功

[Unit]
Description=Backup Service
After=network.target

[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
ExecStart=/bin/bash /docker/backup.sh  

[Install]
WantedBy=multi-user.target


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

相关命令

sudo systemctl daemon-reload
sudo systemctl enable backup.service
sudo systemctl restart backup.service
sudo systemctl start backup.service
sudo systemctl stop backup.service
sudo systemctl status backup.service

journalctl -u backup
你可以使用以下命令查看最近的 100 条备份日志
journalctl -u backup --reverse --lines 100
1
2
3
4
5
6
7
8
9
10

# Failed to watch /docker; upper limit on inotify watches reached

永久生效方法:
[root@localhost ~]# sudo vim /etc/sysctl.conf
末尾增加一行:fs.inotify.max_user_watches=99999999
[root@localhost ~]# sudo sysctl -p
生效
[root@localhost ~]# more /proc/sys/fs/inotify/max_user_watches
99999999

1
2
3
4
5
6
7
8

# scp命令


scp  -P 22 -r /docker/jenkins root@192.168.9.160:/home/docker/

1
2
3
Last Updated: 2024/2/22 17:32:07