linux – 完整的数据备份到Amazon S3

前端之家收集整理的这篇文章主要介绍了linux – 完整的数据备份到Amazon S3前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个托管在Digital Ocean上的ubuntu服务器,它已经超出了它现有的备份解决方案.

我使用的堆栈的相关部分是Node.js,MongoDB和Elasticsearch.

到目前为止,备份是通过转储整个MongoDB数据库,保存ES配置以及复制应用程序目录中的所有其他文件(日志,代码本身等)来完成的.如果是本月的第一天,所有用户文件也会被复制,否则只会添加自本月第一天起更改的文件.然后将所有这些压缩到一个文件中并上传到Amazon S3.

数据大小已达到此进程占用过多磁盘空间的程度,并且无法一次性将文件上载到S3.

这个大小的应用程序的下一个级别是什么(8 GB用户文件,125,000个用户,3,000个其他文档,所有可在ES中搜索)?

我理解基于意见的问题在服务器故障上是不行的.我不是在征求意见,而是正常的,具有成本效益的解决方案适用于这种规模的应用.

更新:这些是我试图使用Duplicity的脚本和配置的相关部分.我正在使用Node来管理备份,因为它适合我现有的日志记录解决方案,已经安排在低活动时间内与其他所有内容保持一致,并且可以在操作系统之间移植.

节点脚本,日志记录当然需要改进:

// 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();
    });
});

Duplicity配置:

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 ---

解决方法

我有使用 duplicity备份的良好经验.如果您能够执行快照并将其挂载为只读,那么获得一致的增量备份是一个非常好的选择.

通常问题是备份数据库(MongoDB,ElasticSearch,MysqL,你的名字)是一致性.同样的事情适用于支持常见文件,但对于数据库,数据损坏的风险可能是最高的.

你有几个选择(希望其他人会增加更多)

>转储数据库并备份转储.这是最简单,最安全,最直接的.
>停止数据库(或使用其他方法使磁盘数据保持一致)并进行备份. (这样会造成很长的停机时间,并非总是可行)
>停止数据库(如在#2中),执行快照(卷或fs,确保fs在该点保持一致),启动数据库,以只读方式挂载快照并将其备份.但并非所有设置都适用于此.
>停止数据库(如在#2中),执行快照(这次它仅适用于卷,将快照备份为块设备.这可能会增加备份的大小,并且可能无法在所有配置上实现.
>备份实时数据库文件,并希望它在恢复时能够正常工作. (你在这里玩火.)如果可能的话,远离这个.
>如果您的技术有特殊的备份方式,请使用它. (就像从ELB到S3的直接快照备份一样.)

无论您选择哪种方式,请记住,您绝对应该测试您是否能够从备份中多次从几个不同的备份中恢复.

#!/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
原文链接:https://www.f2er.com/linux/395721.html

猜你在找的Linux相关文章