MongoDB replica set强制重新配置

MongoDB的replica set是一种取代了master-slave的replication的架构,具备自动failover的能力。因此,其可靠性和可管理性比master-slave更高。replica set的failover依靠少数服从多数的选举票机制来推选新的主节点。为了从术语上与master-slave进行区分,在replica set中,我们把主节点成为primary,把从节点成为secondary。

少数服从多数的机制意味着我们应该有奇数个节点。但是,我们可能会遇到只有两个节点的情况。

两个节点的情况下,我们可以将其中一个节点设置为不具备投票权的节点,只负责复制数据,以避免数据丢失的情况发生。一旦主节点不可用,我们可以手工将不具备投票权的节点重新配置为主节点。

强制重新配置,能将一个secondary的节点,强制变为master节点。

一种方法是将坏掉的那个节点从集合中删除,从而重新达到平衡。

cfg = rs.config()
cfg.members = [ cfg.members[i], cfg.members[j], ...]
rs.reconfig(cfg, {force: true})

另一种方法是调整节点的priority和votes。可以将其priority和votes都设置为0,从而使它不具备被选举权。priority是被选举权,而votes是选票。

cfg = rs.config …

Continue Reading