Centos7.9从源服务器增量备份到文件到目标服务器
FCAT 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
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
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
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
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
2
3
4
5
6
7
8
# scp命令
scp -P 22 -r /docker/jenkins root@192.168.9.160:/home/docker/
1
2
3
2
3