Maison > Questions et réponses > le corps du texte
假设有这样一个场景,有一个MongoDB的副本集,由于故障导致只剩下两个节点可用,而这两个节点目前都是slave
节点。其他的故障节点也无法再重新启动,即无法重新加入到副本集中。
Q:这种情况下是否因为这个副本集就无法使用了?
PHP中文网2017-04-24 09:13:00
Lorsque la plupart des nœuds sont en panne et que le nombre de nœuds restants pouvant être connectés entre eux ne dépasse pas la moitié, vous pouvez vous référer à la documentation pour reconfigurer le jeu de réplicas :
- http://docs.mongodb.org/manual/tutorial/reconfigure-replica-set-with-unavailable-members/
Deux méthodes sont mentionnées dans le document :
迷茫2017-04-24 09:13:00
Cela dépend du nombre total de nœuds dans votre jeu de réplicas. Lorsque le nombre de nœuds pouvant être connectés les uns aux autres dans le jeu de réplicas est supérieur à la moitié du nombre total de nœuds, un nouveau nœud principal peut être sélectionné. , et le jeu de réplicas peut fonctionner normalement. Si le nombre de nœuds interconnectés est inférieur ou égal à la moitié du point de résumé, tous les nœuds deviendront des nœuds secondaires. À ce stade, le jeu de réplicas deviendra en lecture seule et. toutes les opérations d'écriture échoueront
La raison de ce phénomène est que le jeu de réplicas mongodb n'autorise pas plusieurs nœuds principaux lorsque le nombre de nœuds pouvant être contactés est inférieur ou égal à la moitié du nombre total de nœuds, si le principal peut toujours l'être. sélectionné, plusieurs nœuds principaux peuvent apparaître, provoquant un chaos de données dans l'ensemble du jeu de réplicas, et tous les nœuds deviennent secondaires. Le jeu de réplicas peut toujours fonctionner normalement lorsque le nœud défaillant est restauré
.Si les nœuds normaux ne suffisent pas pour sélectionner le principal, il existe plusieurs façons de résoudre le problème.
1) 若其他节点因数据损坏不能启动,像你说的依然有两个节点存活,可以停止一个节点,将硬盘数据导出至挂掉的节点,启动即可.
2) 若其他节点因不可恢复原因导致不能启动,你可以去掉replset选项将此节点作为单机服务启动,若要恢复为副本集模式,可以试一下将一个正常节点的local相关的数据文件删除,重新以replset启动,初始化自身之后使用rs.add()添加新节点,线上没有遇到过这种情况,如果实在没办法,你可以试一下.