我有一个在Digital Ocean上托pipe的Ubuntu服务器,已经超过了现有的备份解决scheme。
我使用的堆栈的相关部分是Node.js,MongoDB和Elasticsearch。
到目前为止,已经通过转储整个MongoDB数据库,保存ESconfiguration,并将所有其他文件(日志,代码本身等)复制到应用程序目录中来完成备份。 如果是本月的第一个,所有的用户文件也被复制,否则只有从第一个月开始才添加文件。 所有这些都被压缩成一个文件并上传到Amazon S3。
数据大小已达到这个过程需要太多的磁盘空间,文件不能一次上传到S3。
什么是这个大小的应用程序的下一个级别(8 GB的用户文件,125,000用户,3,000其他文档,所有searchES)?
我明白基于意见的问题是不正确的服务器故障。 我不是在征求意见,只是一个正常的,具有成本效益的解决scheme是适用于这种规模的应用程序。
更新:这是我试图使用Duplicity与脚本和configuration的相关部分。 我使用Node来pipe理备份,因为它适合我现有的日志logging解决scheme,已经计划在低活动时间与其他所有内容保持一致,并且可以在各个操作系统之间移植。
节点脚本,日志logging当然需要改进:
// Walks a directory recursively and returns a flat list of files function walkDir() {}; // Node based rm -rf function rmrf() {}; exec("mongodump --out dump", { cwd: process.cwd() }, function(err, dta) { if (err) return log("Error backing up: couldn't dump MongoDB!"); exec("sudo duply ats backup", function(err) { if (err) log("Error running Duplicity"); else rmrf("dump"); log("Exiting."); process.exit(); }); });
Duplicityconfiguration:
GPG_PW='GPG password' TARGET='s3://s3-us-east-1.amazonaws.com/bucket' TARGET_USER='Known working AWS credentials' TARGET_PASS='AWS secret key' SOURCE='/var/appdir' MAX_AGE=6M DUPL_PARAMS="$DUPL_PARAMS --exclude "/var/appdir/elasticsearch/data/**" "
我已经尝试过--s3-use-new-style ,使用s3+http:// ,并设置S3_USE_SIGV4但没有运气。
这是我从Duplicity获得的日志:
Start duply v1.5.10, time is 2015-07-05 09:30:13. Using profile '/root/.duply/ats'. Using installed duplicity version 0.6.23, python 2.7.6, gpg 1.4.16 (Home: ~/.gnu pg), awk 'GNU Awk 4.0.1', bash '4.3.11(1)-release (x86_64-pc-linux-gnu)'. Signing disabled. Not GPG_KEY entries in config. Test - Encryption with passphrase (OK) Test - Decryption with passphrase (OK) Test - Compare (OK) Cleanup - Delete '/tmp/duply.25562.1436103014_*'(OK) --- Start running command PRE at 09:30:14.155 --- Skipping n/a script '/root/.duply/ats/pre'. --- Finished state OK at 09:30:14.183 - Runtime 00:00:00.027 --- --- Start running command BKP at 09:30:14.208 --- Reading globbing filelist /root/.duply/ats/exclude BackendException: No connection to backend 09:31:27.427 Task 'BKP' failed with exit code '23'. --- Finished state FAILED 'code 23' at 09:31:27.427 - Runtime 00:01:13.218 --- --- Start running command POST at 09:31:27.465 --- Skipping n/a script '/root/.duply/ats/post'. --- Finished state OK at 09:31:27.491 - Runtime 00:00:00.026 ---
我有很好的使用备份的经验。 如果您能够执行快照并将其装载为只读,则具有一致的增量备份是非常好的select。
通常问题是备份数据库(MongoDB,ElasticSearch,MySQL,你的名字)是一致的。 同样的事情适用于支持通用文件,但对于数据库来说,数据损坏的风险可能是最高的。
你有几个选项(希望别人会增加更多)
转储数据库并备份转储。 这是最简单,最安全,最直接的。
停止数据库(或使用其他方法使磁盘上的数据一致)并进行备份。 (这样会导致很长的停机时间,而不总是可能的)
停止数据库(如#2),做快照(卷或fs,确保fs在这一点上是一致的),启动数据库,只读快照挂载和返回。 但并不是所有的设置都适合这个。
停止数据库(如#2),做一个快照(这次它只适用于卷,确保fs是一致的),启动数据库,备份快照作为块设备。 这可能会增加备份的大小,并且可能无法在所有configuration上进行。
备份实时数据库文件,并希望在恢复时能够正常工作。 (你在这里玩火。)如果可能的话, 远离这个 。
如果您的技术有特殊的备份方式,请使用它。 (像从ELB到S3的直接快照备份)
任何你select的方式,请记住你绝对应该testing你能够从备份中恢复几次,从几个不同的备份。
#!/bin/bash BACKUP_BASE="/data/backups/" DIRNAME="mongo" BUCKET="mybackups" ARCHIVE_DIR="/data/backups_duplicity_archives/${DIRNAME}" VERBOSE="-v 4" S3_PARAMS="--s3-use-new-style" # --s3-use-multiprocessing" # --s3-use-rrs" export PASSPHRASE="something" export AWS_ACCESS_KEY_ID="AN_ID" export AWS_SECRET_ACCESS_KEY="A_KEY" cd ${BACKUP_BASE} rm -rf ${BACKUP_BASE}/${DIRNAME} /usr/bin/mongodump -h 10.0.0.1 -o ${BACKUP_BASE}/${DIRNAME}/databasename --oplog /usr/bin/duplicity $S3_PARAMS --asynchronous-upload ${VERBOSE} --archive-dir=${ARCHIVE_DIR} incr --full-if-older-than 14D ${BACKUP_BASE}/${DIRNAME} "s3+http://${BUCKET}/${DIRNAME}" if [ ! $! ]; then /usr/bin/duplicity $S3_PARAMS ${VERBOSE} --archive-dir=${ARCHIVE_DIR} remove-all-but-n-full 12 --force "s3+http://${BUCKET}/${DIRNAME}" /usr/bin/duplicity $S3_PARAMS ${VERBOSE} --archive-dir=${ARCHIVE_DIR} remove-all-inc-of-but-n-full 4 --force "s3+http://${BUCKET}/${DIRNAME}" fi
数据大小已达到这个过程需要太多的磁盘空间,文件不能一次上传到S3。
上传他们每个作为他们自己的单独文件。 这可能不是你正在做一些奇特的重复数据删除,如果你改变这个参考基础将是有帮助的。
到目前为止,已经通过转储整个MongoDB数据库来完成备份
MongoDB有增量备份工具( https://github.com/EqualExperts/Tayra )。 如果你的更新负载相对较低,我会考虑使用这些。
由于您在Digital Ocean上,本地备份不是一个选项。 不过,从战略angular度来看,这是值得思考的。 如果您直接在Amazon上托pipe,则将S3文件系统快照可能对您有所帮助。