Disaster Recovery With Global Clusters

如果AWS的某个region出了故障,可以将其他region的集群promote,以进行读写操作。下面将演示如何操作

  1. 首先要在应用程序层面停止对主集群所有的DML操作
  2. 选择要提升为主集群的从集群

image-20211128163529446

  1. 将这个从集群从global cluster中移除:

    image-20211128163713700

    image-20211128163753100

  2. 重新配置应用,将写操作转向这个集群的endpoint。当提升为主集群后,会把-co去掉,例如原来的连接方式从demo-read-replica-cluster.cluster-ro-ch6r1ynatoqq.us-east-2.docdb.amazonaws.com:27017变为demo-read-replica-cluster.cluster-ch6r1ynatoqq.us-east-2.docdb.amazonaws.com:27017

连接到这个集群,测试是否可以执行写操作:

mongo --quiet --ssl --host $clusterendpoint:27017 --sslCAFile rds-combined-ca-bundle.pem --username $docdbUser --password $docdbPass
var data=[];
for (var i=2000000; i<2000004; i++){
    var doc = {
        "_id": NumberLong(i),
        "createDate": new Date()
    };
    data.push(doc);
}

db.getSiblingDB("sampledb").test.insertMany(data);

返回结果:

{
        "acknowledged" : true,
        "insertedIds" : [
                NumberLong(2000000),
                NumberLong(2000001),
                NumberLong(2000002),
                NumberLong(2000003)
        ]
}

从中可以读取刚插入的数据:

db.getSiblingDB("sampledb").test.find({"_id": NumberLong(2000000)}).pretty();

返回如下结果:

{
    "_id" : NumberLong(2000000),
    "createDate" : ISODate("2021-06-14T20:19:56.857Z")
}

如果此时对这个集群加入新的region,那么它会成为新的global cluster的主集群。