我的MongoDB分片群集具有3个分片,每个分片在3个副本上运行。总结一下:
Config Server:
shardcfg1.server.com:27018
shardcfg2.server.com:27018
shardcfg3.server.com:27018
Shard1:
shard11.server.com:27000 (P)
shard12.server.com:27000 (S)
shard13.server.com:27000 (S)
Shard2:
shard21.server.com:27000 (S)
shard22.server.com:27000 (STARTUP)
shard23.server.com:27000 (Unhealthy - invalidReplicaSetConfig: Our replica set configuration is invalid or does not include us)
Shard3:
shard31.server.com:27000 (S)
shard32.server.com:27000 (P)
shard33.server.com:27000 (S)
如果您看到上面的状态,问题出在SHARD2
。
SHARD2
中没有主要对象shard23.server.com
标记为非成员辅助shard21.server.com
可用于获取转储,因此可能不会丢失数据。但是,对于如何再次稳定群集我一无所知。
我将如何从群集中完全删除SHARD2
?或我应该如何再次使用相同的服务器重新初始化分片?
我错过的一个小细节反过来成为解决方案的关键:集群由Mongo-MMS管理!
解决方案:
因此,我有一台辅助服务器,另一台服务器处于STARTUP模式,而第三台服务器却荒谬地宣布自己不属于副本集!整个群集由MMS管理。我确实关闭了所有三个服务器。现在,我只是简单地以独立模式启动了辅助数据库,以获取整个数据库的备份。
在此期间,我从群集中删除了该分片,由于该分片中没有主分片,因此排空卡住了。但是,发生了一件奇怪的事情,这些服务器上的自动化代理已被删除。备份完成后,我重新启动了辅助服务器mongod
,该服务器上有数据。可悲的是,终端确实显示了SECONDARY,但是当我检查rs.status()时,它显示了三台服务器,我确实记得切断了其中一台恶意服务器。那就是让我震惊的MMS正在管理这些副本集的配置。
删除恶意服务器后,我迅速将Force标志配置为true。因此,现在我有两台服务器,一台位于辅助服务器,另一台处于启动模式。重新配置后几秒钟!瞧!中学将自己提升为小学。
经过漫长的战斗,但很高兴地说,不需要恢复备份或重新处理整个碎片!