CentOS7 rsync+inotify异机实时备份部署方案
一、 背景 需求
为了实现重要数据的异地备份,防止服务器故障导致数据丢失 而 影响业务连续运行 。 要求 实时检测 A服务器 xx目录 变化情况 ,一旦检测到目录发生 变化 立即触发向 B服务器 xx目录传输文件的动作 B服务器上保留最近 9天的备份文件 以达到 历史 数据异地 备份且不会无限撑满文件系统 。
二、 主机 环境
服务器IP 10.19.222.147 主机名 hosta 需要备份的目录为 /opt/opsmgr/backup
服务器IP 10.19.222.135 主机名 hostb用于接收备份文件的目录为 /home/backup
三、 方案 思路
hosta访问 hostb配置 ssh免密互信 。
hosta和 hostb安 装 rsync和 inotify-tools,实现实时检测目录并传输文件 。
hostb配置定时任务删除 9天以前的备份文件 防止磁盘被 无效数据 撑满 。
四、 实施方案
4.1互信配置登陆
10.19.222.147 hosta操作
[root@hosta ~]# ssh-keygen -t rsa //生成秘钥
[root@hosta ~]# vi /etc/ssh/sshd_config //禁用 root ssh密码登录 ,但运行秘钥登录
PermitRootLogin without-password 先写
PermitRootLogin no 再写
[root@hosta ~]# systemctl restart sshd //重启 sshd服务生效 上述 配置
[root@hosta ~]# cat /root/.ssh/id_rsa.pub //把 输出的内容 写 到 hostb的/root/.ssh/authorized_keys文件
登陆10.19.222.135 hostb操作
[root@hostb ~]# mkdir /root/.ssh
[root@hostb ~]# chmod 700 /root/.ssh
[root@hostb .ssh]# vi /root/.ssh/authorized_keys //写入 hosta的 /root/.ssh/id_rsa.pub内容
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQCf5ZLamqa6Of2NSqhjjlP2VClfWadfkHOINYOm4nOnEQ5k6PTZgMX5Gmtg1C8VUJxkFZcj+AG+oHqOzWxntIqqqKjmQodOU9NXa89GmcHSUSFnKO0pt8JafwPrPaL8bPSV0knFRV+wavxhpIG5cF//8Yvzu7CODIxP9zQgoM6fbX7V1PlHE5CTZRtv+40gyMlyz1f0NkxntZ7XZJQldx0CI5ieu0UuyqYgENQsOnlA7WfgMazOLvoVGwNJ6MPu5UeUNGPlvOgAoaY3HvfBd1Jt5FMJGToVqJjfIQqyldN2a2QquGgXrIIDai1gQJM/WPeTPs0YL5BuWa/k+CfJlG+c+ejR7halxhB1OQR2VBAdSld0wx47n7YUX4Bgztg7e6Dbb8i5xl8u49ABYJWrOC0phO5CRygtjANY7mXAqNpzV31Dm/uYbpALjeBm4WNO26G9VF4Wf5GUdDOjIhzB2GtrzMcB0OV7yNABT76j75KYgcikF+8Pg6BucXz21cv9z8= root@hosta
结果展示
[root@hostb ~]# chmod 600 /root/.ssh/authorized_keys
[root@hostb ~]# vi /etc/ssh/sshd_config
PermitRootLogin without-password
PermitRootLogin no
systemctl restart sshd 重启 sshd服务生效 上述 配置
登陆10.19.222.147操作
测试hosta 免密成功 登陆 hostb 22为 hostb主机 sshd服务监听端口 。
ssh -p 22 root@10.19.222.135
结果展示
服务器A root互信 免密 登陆服务器 B配置完成 。
4.2自动同步配置
软件安装
https://developer.aliyun.com/packageSearch
上传2个 rpm到 /tmp目录
登陆hosta hostb操作 安装 rsync和 inotify-tools
rpm -ivh /tmp/rsync-3.1.2-4.el7.x86_64.rpm
rpm -ivh /tmp/inotify-tools-3.14-9.el7.x86_64.rpm
创建脚本
hosta上的 /opt/opsmgr/backup/为需要备份的目录
hostb上的 /home/backup/为存放备份文件的目录
vi /home/hik/remote_file_backup.sh 写入以下内容
#!/bin/bash
INOTIFY_CMD="/bin/inotifywait -mrq -e modify,create,attrib,move,delete /opt/opsmgr/backup/"
$INOTIFY_CMD | while read files
do
/bin/rsync -az /opt/opsmgr/backup/ root@10.19.222.135:/home/backup/
done
结果展示
设置开机自动运行备份脚本
[root@hosta hik]# echo "sh /home/hik/remote_file_backup.sh &" >> /etc/rc.d/rc.local
[root@hosta hik]# chmod +x /etc/rc.d/rc.local
结果展示
手动运行 脚本
[root@hosta hik]# sh /home/hik/remote_file_backup.sh &
查看结果
[root@hosta hik]# ps -ef|grep inotify |grep -v grep
[root@hosta hik]# ps -ef|grep remote_file_backup.sh |grep -v grep
验证 同步效果
在hosta操作
增加一个文件 audit.log到 /opt/opsmgr/backup
[root@hosta backup]# cp /var/log/audit/audit.log ./
在hostb操作 验证效果
4.3备份数据 自动清理
登陆hostb 10.19.222.135操作
需要保留9天 /home/backup/backup的 数据 ,通过定时任务 每天凌晨来执行删除 9天前的文件 来实现 。
crontab -e 写入下面的内容
0 0 * * * find /home/backup/backup -type f -mtime +8 -exec rm {} \;
验证内容是否有误 crontab -l(小写 L)