跳至正文

VCO定时备份配置数据库并上传到SFTP服务器


概要

在软件定义广域网(Software Defined WAN)时代,CPE的配置工作已经从在每台设备上命令敲击转移到通过控制器这个大脑进行统一下发控制。所有CPE配置都保存在控制器的数据库中,通常每家厂商对于控制器都有自身的冗余架构来保障数据库的冗余。(VMware SD-WAN通过部署主备两台VCO来保障,确保在主控制器无法工作后,备控制器可以快速接手工作。)但总会存在万一的可能性,如主备控制器的基础架构(虚拟化,存储)都出现问题,所以控制器数据的第二备份方案,即数据库备份在日常运维中也显得格外重要。


数据库备份脚本

VMware SD-WAN 已经在VCO里预置了配置数据库的备份脚本db_backup.sh,运行后可以对配置进行库进行备份。
运行命令:

/opt/vc/scripts/db_backup.sh <存放目录>

示例:

#创建文件夹用于保存备份。
mkdir /tmp/dbbackup
#运行备份脚本,脚本会运行几分钟。
sudo /opt/vc/scripts/db_backup.sh /tmp/dbbackup 
#查看备份夹
ls /tmp/dbbackup 
20201212160230 #脚本会生成一个以脚本运行时间戳为名的文件夹来存放压缩后数据库备份
#查看备份文件
ls /tmp/dbbackup/20201212160230 
ddl.sql.gz data.sql.gz #数据库备份文件

定时数据库备份

在VCO上我们用crontab来实现定期执行脚本。

查看crontab文件

可以使用cat /etc/crontab查看:

root@vco-test-02:~# cat /etc/crontab
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the \`crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user  command
17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly
25 6    * * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6    * * 7   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6    1 * *   root    test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
格式解释

image-1607762624444.png

配置crontab

第一步:确定系统时间
既然需要结合时间定义,所以需要先确定本地时间,避免时区问题导致没有按时执行脚本。

root@vco-test-02:~# date
Sat Dec 12 08:49:48 UTC 2020

第二步:配置crontab
crontab -e 进入编辑界面,同时会显示已存在的定时任务
示例:每天北京时间18点05分运行备份脚本,如使用root执行,可以省略用户名;sh为执行脚本

5 10 * * * sh /opt/vc/scripts/db_backup.sh /tmp/dbbackup

添加以上代码,并保存退出
第三步:查看运行结果,可以看到已经生成新的备份文件夹

root@vco-test-02:/tmp/dbbackup# ls -l /tmp/dbbackup/ | grep 2020121210
drwxr-xr-x 2 root root 4096 Dec 12 10:05 20201212100501

定时上传数据库备份

前置条件

  1. 需要在VCO安装LFTP(相关依赖程序VCO已具备)下载链接

sudo dpkg -i lftp_4.8.1-1ubuntu0.2_amd64.deb

  1. sftp服务器信息(服务器地址,账户,密码,上传目录)
  2. sftp上传脚本
  3. 数据库备份文件

脚本编写思路

  1. 压缩备份文件夹
  2. 登录sftp服务器,切换服务器和本地目录,上传压缩文件,关闭会话
  3. 清理备份文件

部署脚本

第一步:在/opt/vc/scripts/创建upload_sftp.sh

脚本如下:

#!/bin/sh
HOST=xxx.xxx.xxx.xxx
USER=xxx
PASSWD=xxx
FOLDER=/tmp/dbbackup/

# find the backup folder
BACKUP_FOLDER=$(sudo find /tmp/dbbackup -type d -name "\`date +'%Y%m%d'\`*" -amin -60)

# tar backup file
tar -czPf $BACKUP_FOLDER.gz $BACKUP_FOLDER

# uploade backup file to the lftp
sleep 30
lftp sftp://$USER:$PASSWD@$HOST -e "cd /upload/VCO; put $BACKUP_FOLDER.gz; exit"

# clean the backup file
sleep 180
sudo rm -rf $BACKUP_FOLDER ; rm -f $BACKUP_FOLDER.gz

第二步:调整文件权限与其他脚本一致chmod 755 /opt/vc/scripts/upload_sftp.sh

第三步:添加定时任务
crontab -e 进入编辑界面,同时会显示已存在的定时任务
示例:每天北京时间18点15分运行备份脚本,如使用root执行,可以省略用户名;sh为执行脚本

15 10 * * * sh /opt/vc/scripts/upload_sftp.sh

排障crontab

查看crontab配置

crontab -l 列出当前用户定时服务内容

5 10 * * * sh /opt/vc/scripts/db_backup.sh /tmp/dbbackup
查看crontab是否运行

可以使用ps -ax | grep cron查看

ps -ax | grep cron
21834 ?        Ss     0:00 /usr/sbin/cron -f
23077 pts/0    S+     0:00 grep --color=auto cron
查看crontab服务状态

查看crontab服务状态 service cron status

● cron.service - Regular background program processing daemon
   Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2020-12-12 09:17:27 UTC; 51min ago
     Docs: man:cron(8)
 Main PID: 21834 (cron)
    Tasks: 1 (limit: 4915)
   CGroup: /system.slice/cron.service
           └─21834 /usr/sbin/cron -f

Dec 12 10:05:01 vco-test-02 CRON[22917]: (root) CMD (sh /opt/vc/scripts/db_backup.sh /tmp/dbbackup)

其他命令:
启动crontab service cron start
重启crontab service cron restart
停止crontab service cron stop

查看crontab日志

可以查看/var/log/syslog,并过滤CRON查看日志

root@vco-test-02:/tmp/dbbackup# cat /var/log/syslog | grep CRON
Dec 12 10:05:01 vco-test-02 CRON[22917]: (root) CMD (sh /opt/vc/scripts/db_backup.sh /tmp/dbbackup)

参考资料

LFTP Manuel page
Linux下定时执行脚本实例
ubuntu18.04通过deb文件安装软件
Linux 命令详解:SFTP
linux find 命令查找文件和文件夹
Linux 定时任务
几种在Shell脚本中使用sftp命令的方法
find: possible unquoted pattern after predicate -name'
tar 命令压缩时报错 tar: Removing leading / from member names

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

4 × 5 =