民间,
我们已经看到MongoDB v2.6.9的一个非常奇怪的问题,当priority=0
的从属没有被用于读取请求时,并且不作为发现的一部分返回。将优先级更改为非零值可解决问题并使这些成员discoverable
成为可能。
使优先级为非零值不是所需的行为,因为此设置将允许成员成为主要成员。这些成员位于不同的AWS区域,我们希望避免出现裂脑情况。
当前配置:(注意我们更喜欢西部地区始终是主要的)
rs0:PRIMARY> rs.config()
{
"_id" : "rs0",
"version" : 24,
"members" : [
{
"_id" : 7,
"host" : "west1:27017",
"priority" : 1000,
"tags" : {
"dc" : "west"
}
},
{
"_id" : 8,
"host" : "west2:27017",
"priority" : 1000,
"tags" : {
"dc" : "west"
}
},
{
"_id" : 9,
"host" : "west3:27017",
"priority" : 1000,
"tags" : {
"dc" : "west"
}
},
{
"_id" : 10,
"host" : "east1:27017",
"votes" : 0,
"priority" : 2,
"tags" : {
"dc" : "east"
}
},
{
"_id" : 11,
"host" : "east2:27017",
"votes" : 0,
"priority" : 2,
"tags" : {
"dc" : "east"
}
}
]
}
使用1.4.x NodeJS驱动程序,所有读取都转到{west}节点,忽略{east}实例。
答案 0 :(得分:1)
虽然很奇怪,但我不确定它是否与mongo版本有关。 然而,看着你的配置我不认为东方成员会成为主要成员。 它的优先级低于其他成员,因此只有一个西方成员可以成为主要成员。
http://docs.mongodb.org/manual/core/replica-set-elections/
每个副本集成员都有一个优先级,可帮助确定其成为主要成员的资格。在选举中,副本集会选择具有最高优先级值的合格成员作为主要。默认情况下,所有成员的优先级均为1,并且成为主要成员的机会相等。在默认情况下,所有成员也可以触发选举。
答案 1 :(得分:0)
我们在1.4.38 NodeJS MongoDB驱动程序中发现了一个错误,并且要求它解决问题。它忽略了任何被动的mongodb成员。 https://github.com/mongodb/node-mongodb-native/commits/V1.4.38