问题描述
在 Linux 下,进行配置文件文件备份。实现的功能:
1)对配置文件进行备份。备份工具可以使用rsync命令的复制功能。备份不能使用cp命令,主要是因为配置文件重名或者发生调整时,cp命令无法对原文件进行操作。
2)且能够自动对配置文件进行备份。自动备份可以使用Cron定时任务实现。
3)由版本控制,能切换到指定时间点。版本控制可以使用git。在Rsync同步结束后,执行git提交变更。
3)灾后,能够实现快速恢复服务。使用Rsync进行反向复制即可。
配置文件丢失或者无法恢复,真的非常要命。
需要说明的几点
这里的“配置文件备份”区别于cp file.conf{,.backup}形式的备份。只要是为了解决灾后恢复、配置回滚等问题。
备份是按照配置文件在文件系统中的目录结构进行存储配置的。
解决方案(单机备份)
#1 创建脚本
备份脚本/usr/local/bin/rsync-conf-backup.sh内容如下:
#!/bin/bash ################################################################################ # 服务器配置文件备份 ################################################################################ WORKTREE='/srv/backups/sysconf' ######################################## # 执行检查 ######################################## echo -n "# check..." # 创建配置文件保存目录 if [ ! -d "$WORKTREE" ] then echo "# $WORKTREE not exist" echo "# creating ${WORKTREE}..." mkdir -pv $WORKTREE fi cd $WORKTREE if [ ! -f "$WORKTREE/.rsyncd.filter" ] then echo "# .rsyncd.filter not exist!" echo "# creating .rsyncd.filter..." cat <<EOF > .rsyncd.filter ################################################################################ # 系统配置文件备份 ################################################################################ # 由于要删除备份目录中不存在的文件,所以要对某些文件进行排除 P/ /***/.rsyncd.filter P/ /***/.git -/ ** EOF fi if [ ! -d "$WORKTREE/.git" ] then echo "# .git/ not exist!" echo "# git init..." git init fi echo " done" ######################################## # 进行同步 ######################################## echo -n "# rsync..." # 执行同步 TMPFILE="$(mktemp)" echo "####### rsync log start..." >> $TMPFILE rsync -avz --delete-excluded \ --filter='merge /srv/backups/sysconf/.rsyncd.filter' / . >> $TMPFILE echo "####### rsync log end..." >> $TMPFILE echo " done" ######################################## # 进行版本控制 ######################################## echo -n "# git..." # 进行版本控制 git add . git commit --quiet --file=$TMPFILE &>/dev/null echo " done"
可以单独执行。
#2 配置定时任务
将其添加到Cron的定时任务:
在Debian发行版中:ln -s /usr/local/bin/rsync-conf-backup.sh /etc/cron.hourly/rsync-conf-backup
或者根据自己的实际情况配置/etc/crontab配置文件。
#3 指定需要备份的文件
日后的任务就相对简单一些,只需要配置.rsyncd.filter文件即可,在这其中指定需要配置备份的文件。
注意事项
该备份只备份到了单机上。如果要备份到不同的机器上,可以:
- 使用Rsync同步到其他主机;
- 将备份目录挂载到网络文件系统上;
这并不是最佳实践,以为这个方法并不适用于主机集群。要是有十几二十几台机器就不能这么搞了。
更进一步(多机备份)
单击备份的方案很显然不适用于多台主机。下面是我目前正在使用的多机备份方案:
操作流程如下:
- 在Test Server上修改配置;
- 配置修改、测试通过后,使用Rsync推送到Repo。并在Repo上进行版本控制;
- 然后使用PSSH配合Rsync将Repo上的配置推送到其他主机上;