繁体   English   中英

从单个 AMI 恢复副本集而无需完全重新同步

[英]Recovering a replicaSet from a single AMI without full resync

我有一个副本集的单个实例的 AWS AMI 备份。 我想恢复完整的副本集。 副本集配置了 3 个主机(db1.mydomain.com、db2.mydomain.com、db3.mydomain.com)

我尝试了什么:

  1. 从那个 AMI 启动 3 个实例
  2. 将 Route53 CNAMES db[1,2,3].mydomain.com 指向新创建的实例

我的假设是,因为它们都从同一个时间点开始,并且已经是副本集的一部分并且可以互相看到,所以它们只会找到彼此,选择一个主节点并开始工作,但这不会发生,什么我得到的是:

mongo -u <login> -p <password> --authenticationDatabase admin
my-rs:OTHER> rs.status()
{
    "ok" : 0,
    "errmsg" : "Our replica set config is invalid or we are not a member of it",
    "code" : 93,
    "codeName" : "InvalidReplicaSetConfig"
}

有什么作用:

  1. 停止 mongod
sudo service mongod stop
  1. 直接连接到每个数据库
sudo mongod --dbpath /data &
echo -e "use local\ndb.dropDatabase()" | mongo
sudo killall -9 mongod
sudo chown mongod:mongod -R /data
sudo chown mongod:mongod /tmp/mongodb-27017.sock
sudo rm /var/run/mongodb/mongod.pid
sudo service mongod restart
  1. 连接到其中一个并重新创建 replicaSet()
mongo -u <login> -p <password> db1.mydomain.com --authenticationDatabase admin
mongo> rs.initiate({_id: "my-rs", members: [{_id: 0, host: "db1.mydomain.com:27017"}, {_id: 1, host: "db2.mydomain.com:27017"}, {_id: 2, host: "db3.mydomain.com:27017"}]})

这可行,但看起来 db2 和 db3 在 STARTUP2 中停留了几个小时。 感觉就像他们正在从头开始同步到 db1。

有什么方法可以在不删除本地数据库、重新创建副本集并进行完全重新同步的情况下恢复该副本集。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM