如果某个 AWS 区域不可用,会发生什么情况?我引用了他们的网站的说法,
请务必记住,每个 AWS 区域都是完全独立的。您发起的任何 Amazon RDS 活动(例如,创建数据库实例或列出可用的数据库实例)仅在您当前的默认 AWS 区域中运行。可以通过在控制台中设置 EC2_REGION 环境变量来更改默认 AWS 区域,也可以使用 AWS 命令行界面中的 --region 参数覆盖该区域。
我希望在发生停机时至少有几个同步的数据中心。
答案1
很明显:您的数据不会被复制到其他 AWS 区域。如果您需要在多个区域之间进行复制,则需要自行执行此操作。
答案2
有几种方法可以处理整个区域故障。我的回答中没有涉及处理可用区故障,但如今使用 AWS 非常容易。大多数良好的架构都会自动处理可用区故障。
关于 AWS 灾难恢复的一个好答案可以写成一整本书。
您必须平衡恢复时间和持续备份和复制所有内容的成本。
创建数据的备份/快照并复制到不同的区域。不同的 AWS 服务有不同类型的快照/备份/AMI。如果某个区域发生故障,您可以手动从备份中恢复。在大多数情况下,这是一个手动的人工参与过程。您可以在此处结合 DevOps 来自动重新创建您的服务和资源,例如 CloudFormation。
实现使用多区域服务的设计。例如,您可以使用 CloudFront、负载均衡器、Route53、地理位置和健康检查来创建多区域网站。将检测到某个区域的故障,并将流量重新路由到另一个区域。这可以实现非常快的恢复时间(健康检查失败的时间)。
目前 AWS 的一个问题是多区域多主数据库。Amazon Aurora 目前正在朝着这个目标努力,但目前您需要购买为此目的设计的第三方数据库。
大多数标准灾难恢复架构和连续性计划都适用于 AWS。AWS 有一些功能可以让一切变得更容易,但大多数情况下,云只是数据中心的集合。同样的思维过程也适用。
在 Google 上搜索 AWS 灾难恢复。有很多可用的优质资源。
答案3
Mongodb 恰好在其 API 中具有对副本集的支持,如下所示:
MongoClient.connect("mongodb://localhost:30000,localhost:30001,localhost:30002/integration_test_?w=1", function(err, db) {
assert.equal(null, err);
assert.ok(db != null);
db.collection("replicaset_mongo_client_collection").update({a:1}, {b:1},{upsert:true}, function(err, result) {
assert.equal(null, err);
assert.equal(1, result);
db.close();
});