我理解rsync如何在高层上工作,但是有两个方面。 有了S3,就没有什么可说的了 – 好吧,但它基本上只是HTTP。
看起来有几个办法。
s3rsync(但这只是rsync到s3螺栓)。 直截了当。 不知道我想依靠第三方。 我希望S3只是支持rsync。
还有一些rsync“克隆”像口音,声称支持s3没有说螺栓。 但是它怎么能这样做? 他们在本地保存索引文件吗? 我不确定那可以如此高效。
我显然想要使用s3,因为它便宜可靠,但有一些rsync是工具,比如备份一个巨大的图像目录。
这里有什么select? 使用duplicateity + s3代替rsync + s3rsync + s3会损失什么?
由于这个问题最后得到了回答,所以有一个新的AWS命令行工具aws
。
它可以在本地存储和s3之间同步 rsync。 用法示例:
aws s3 sync s3://mybucket /some/local/dir/
如果您的系统的Python环境设置正确,则可以使用pip
安装AWS客户端:
pip install awscli
s3cmd工具有一个很好的sync
选项。 我使用它来同步本地备份,使用如下所示:
s3cmd sync --skip-existing $BACKUPDIR/weekly/ s3://MYBACKUP/backup/mysql/
--skip-existing
意味着它不会尝试校验和比较现有的文件。 如果已经有这个名字的文件,它会快速跳过它,继续前进。 还有一个--delete-removed
选项,它将删除本地不存在的文件,但是我想保留在S3上,即使我已经在本地清理了,所以我不使用它。
S3是一个通用的对象存储系统,为您提供足够的灵活性来devise如何使用它。
我不确定你的问题与rsync(索引除外)或您遇到的“第三方”工具的问题。
如果你有大量的文件结构良好,你可以在你的子文件夹上运行多个s3同步。
亚马逊的好人还允许你从便携式硬盘进行导入/导出,以便将大文件传输到S3或EBS – http://aws.amazon.com/importexport/ ,您可以使用它来进行第一次上传。
请参阅Amazon S3最佳做法 – http://aws.amazon.com/articles/1904
至于不同的工具,尝试一下,看看什么最适合你。 关于定价,如果它适合您的需要,减less冗余定价 – http://aws.amazon.com/s3/pricing/
一般build议 – 有一个快速的多核CPU和良好的networkingpipe道。
更新:提及S3上的校验和
关于S3存储键值对中的数据,并没有目录的概念。 S3syncvalidation校验和(S3具有发送校验和作为validation头的机制 – Content-MD5头)。 数据完整性部分的最佳实践链接了它的详细信息。 S3允许您发送/validation和检索校验和。 有很多人做重复的增量备份。 即使在S3上没有运行rsync,也可以像我在这里提到的那样进行校验。
rsync是一个成熟的工具,大多数现代工具使用相同的algorithm或rsync库或从外部调用rsync。
不想告诉任何人做什么,但我可以挥舞旗帜的双重性? 或其他增量备份解决scheme。 同步是非常好的,但是如果您每晚进行备份,如果两天内没有发现问题会发生什么? 答:太迟了,您的本地文件和备份是彼此的镜像,也没有您需要的数据。 您真的应该考虑增量备份或快照,以便您可以及时恢复到特定时间,并且为了有效地执行此操作,您需要增量备份。 如果丢失你的数据是世界末日的一幕,那么保留不同提供者的副本,如果你不知道,那么可能会迷路,被黑客知道。
我使用口实和S3,它的罚款,但是CPU密集。 但它做增量备份。 在紧急情况下,如果要恢复目录或特定文件(如上一个星期三或去年一月),而无需恢复同一分区上的其他文件,则需要增量备份和工具,您可以在其中只需要这些文件。
我有一个cron,每x个月完成,否则增量和删除超过x个月,以保持s3存储总计,最后收集状态,所以我每天早上收到状态邮寄。 您需要定期关注,以便您注意到备份无法正常工作。
它需要大量的本地临时空间来保持本地签名,因此要仔细设置临时目录。 这个备份/ mnt,不包括/ mnt里的各种dirs。 这对于备份数据很有用,因为系统分区使用亚马逊成像或快照工具。
PHP脚本:
# Duplicity Backups $exclude = "--exclude /mnt/ephemeral ". "--exclude /mnt/logs ". "--exclude /mnt/service ". "--exclude /mnt/mail ". "--exclude /mnt/mysql "; $key = "PASSPHRASE=securegpgpassphrase"; $tmp = "/mnt/mytempdir"; system("mkdir -p $tmp"); # Amazon $aws = "AWS_ACCESS_KEY_ID=xxxxxx ". "AWS_SECRET_ACCESS_KEY=xxxxxx "; $ops = "-v5 --tempdir=$tmp --archive-dir=$tmp --allow-source-mismatch --s3-european-buckets --s3-use-new-style --s3-use-rrs"; $target = " s3://s3-eu-west-1.amazonaws.com/mybucket"; # Clean + Backup system("$key $aws /usr/bin/duplicity $ops --full-if-older-than 2M $exclude /mnt $target"); system("$key $aws /usr/bin/duplicity $ops remove-older-than 6M --force $target"); system("$key $aws /usr/bin/duplicity $ops cleanup --force --extra-clean $target"); system("$key $aws /usr/bin/duplicity $ops collection-status $target")
我不确定真正的rsync是否适合亚马逊。
据我所知,标准的rsyncalgorithm意味着客户端为文件的每个块计算哈希值,服务器计算哈希值作为副本,并将这些哈希值发送给客户端,这意味着客户端可以确定哪些块已经更改并需要上传。
这对亚马逊来说有两个问题,那就是大量的哈希值必须通过互联网发送,而且需要处理能力来计算所有这些会增加亚马逊成本的哈希值,这可能就是为什么他们把它交给第三方提供商为该function收取额外费用。
至于克隆,它们显然是将哈希存储在某个地方,而某个地方可能因克隆而有所不同。 他们可以将散列作为一个单独的对象存储在Amazon上的每个文件中,或者存储在Amazon上的一个数据库上,或者可以将它们存储在本地和远程。
这样做有其优点和缺点。 如果哈希被远程存储在单个文件中,那么不断地检索它们可能是昂贵的。 如果哈希值被远程存储在数据库中,那么这个数据库可能会变大,并且不断地检索和更新它们可能是昂贵的。 如果散列存储在本地,那么这有助于降低成本,但引入了其他复杂性和问题。
(当然,Amazon有其他服务,所以可以在Amazon DB中保留一个数据库)
举个例子,我在很多年前就试用了一个早期的rsync克隆。 这不是为了考虑亚马逊的定价结构,而是发行大量的http获取每个块的哈希值,并且由于Amazon对每个块的收费,这意味着虽然我的账单的存储部分急剧下降,但是转移部分激增。
使用duplicateity + s3代替rsync + s3rsync + s3会损失什么?
你失去了rsync的事实,你知道你正在比较源文件和你的备份文件。 有了重复和其他克隆,你就是将你的源文件与执行备份时所用的散列进行比较。 例如,可以直接访问S3并replace其中的一个文件,而无需重新计算散列或更新散列数据库。
你可以select使用minio客户端又名MC使用“MC镜像”命令将完成这项工作。
$ mc mirror share/sharegain/ s3/MyS3Bucket/share/sharegain
你可以写一个简单的脚本作为cronjob,它会以定期的间隔保持同步。
希望,它有帮助。
比较这个线程中提到的多个选项后,我决定去S3FS。 它允许您将S3挂载为本地文件系统。 然后,您可以按照您已经知道的方式继续使用rsync。
这是一个很好的入门教程: 带有Rsync的Amazon S3
作者以前使用过提到的s3sync,但随后切换到S3F的选项。 我喜欢它,因为我也有通过SSHFS在本地安装的其他备份文件夹。