使用百度对象存储.BOS.来实现站点的备份

目前本站使用了一个自动备份的策略,虽然没有什么内容,也没有太多的东西,但是安全第一条:备份。但备份好了后,需要手动下载到本地,而服务器现在是小水管1M的带宽。现在的备份包差不多已经100M了,这样下载动不动就要十几二十分钟的,非常浪费时间,而且也将服务器外网的带宽全部占尽了。

所以后来就慢慢的考虑能否利用百度云的内网进行备份、复制的,这样避开了宽带的限制,也能实现鸡蛋不要放在一个篮子里的要求。毕竟内网的带宽动不动是10Gbps来算的,比起1Mbps已经是10k倍的差距了。100M的文件,可以说是秒传,1s都不用的。后来经过实践,真的是不用1s就可以,进度条是一晃而过。

原先考虑的是另外买一块磁盘,毕竟价格也不贵的,5G的空间,三年也才用31.5元。用来备份也是完全够了,但是初步看了下,如果挂了磁盘,用的带宽还是原服务器的,就还是没有达到第一个目的。

下一步就考虑的是百度对象存储BOS来完成,官网上的介绍:

百度对象存储BOS(Baidu Object Storage)提供稳定、安全、高效以及高扩展存储服务,支持单文件最大5TB的文本、多媒体、二进制等任何类型的数据存储。数据多地域跨集群的存储,以实现资源统一利用,降低使用难度,提高工作效率。”存储+计算框架”让您的数据加上“动力”引擎,让数据在传输、存储、处理和发布4个环节有机融为一体。

图1.百度对象存储BOS的分类

现在百度云上还在搞活动,但最低的也是100G了,价格上也比较便宜,100G一年才50元。但实际100G比较大的空间了,现阶段程门立学还是先使用按需计费来完成。

 

图2.百度对象存储的优惠活动

话说现在的对象存储也是计费复杂,分三个费用:

存储费用:即存储空间费用,不同存储类型的存储费用单价不一样。

请求费用:包含读请求、写请求和数据取回费用。不同存储类型的请求费用单价不一样,只有低频存储和冷存储需要支付数据取回费用,标准存储无该项计费。

流量费用:包含外网数据流出、CDN回源流出和跨区域数据流出(注:内/外网数据流入和内网数据流出不计费)。其中外网数据流出、CDN回源流出和跨区域数据流出三种计费单价不区分存储类型。

外网数据流出,即通过公网IP流出的流量,且不包含CDN回源产生的流量。

本文中所说CDN回源指的是向百度智能云CDN回源的优惠费用;其他非百度智能云CDN回源无法识别,按照标准外网数据流出收费。

跨区域流出流量,当您跨区域复制文件会产生跨区域流出流量费用。

就是不仅仅占用空间要费用,读写请求也要费用,流量同时也要费用的。不过比较而言,百度BOS的流量费用不高不低,0.49元/G的。

当然现在使用量还是比较少的,初步估计还是在一个非常低的范围内。

而实现自动备份,自然不能通过控制台来实现了,百度BOS提供了API接口跟各种SDK及周边的工具。目前对其他API跟SDK没有怎么研究,而是使用BCECMD来实现。BCECMD看上去是整个百度服务器的命令提示符,而目前仅支持对象存储BOS。

BOS CMD提供与BOS CLI相似的功能,但是BOS CMD不依赖系统环境,无需安装,下载后可直接使用,而且效率优于BOS CLI。在官网上https://sdk.bce.baidu.com/console-sdk/windows-bcecmd-0.2.4.zip下载后,可以直接在CMD系统命令提示符中使用。

图3.CMD中运行BCECMD

使用之前需要进行配置,使用-c参数设置Access Key、Secure Key、Region和Host:

相应的帮助指引可以在官网上的指南找到:https://cloud.baidu.com/doc/BOS/BOSCLI.html#.E9.80.9A.E8.BF.87CMD.E4.BD.BF.E7.94.A8BOS.E6.9C.8D.E5.8A.A1

配置完毕后可以输入相应的命令来完成对应的操作:

图4.配置BCECMD中的字段

参考的命令为:

bcecmd bos cp <local-path> <bos-path> [--storage-class [STORAGE_CLASS]] [--restart] [--quiet] [--yes] [--disable-bar]
图5.在BCECMD中使用命令完成文件上传操作

命令完成后可以在控制台看到文件已经成功上传,而从控制台下载文件也是非常的快,当然这个流量和操作都是要计费的了。一般情况仅做存储即可,有需要恢复的时候再下载下来。

下一步再通过批处理命令来实现自动对站点的备份、上传到BOS中,从而实现站点备份自动化,无须人工干预。

测试单独操作备份、上传无误后则将几个命令整合到一起,做了一个简单的批处理:

图6.在控制台查看文件已经上传成功

借用宝塔面板的备份功能,简单写了个批处理:

CloudBackup.exe /type SiteBackup /name www.iappi.cn /file .\wordpress /url localhost /rar .\site /num 1

CloudBackup.exe /type MySqlBackup /name wordpress /url localhost /rar .\site /num 1

bcecmd.exe bos cp .\site\ bos:/ Bucket/backup_iappi.cn/%date:~0,4%-%date:~5,2%-%date:~8,2% -r

简单解释下如上第一条是使用备份功能将站点进行备份,即将WordPress的目录备份压缩,并保持只有1份备份。第二条类似备份数据库。

第三条为使用bcecmd功能将刚备份的文件所在目录的所有文件批量上传到BOS中已经创建好的Bucket中的backup_iappi.cn并新建以日期命名的子文件夹中。

图7.测试正常使用批处理命令成功备份并上传到BOS

测试正常后,再通过系统工具中的计划任务程序,将该批处理命令添加任务中,等待明天验证是否成功。计划任务的处理参考了Windows服务器设定自动重启Apache服务的操作记录 中的操作。

图8.自动运行计划任务的批处理
图9.已完成的自动备份上传到BOS的文件