生產環境不建議僅使用PRIMARY-SECONDARY模式
當primary掛掉,並且無法恢復時,可以把secondary提升為主節點。
注意:此時從節點可能有部分數據未同步過來,部分數據可能丟失。
1、在secondary節點刪除掛掉的primary節點
使用rs.conf查看當前配置
c = rs.conf()
輸出內容:
{
"_id" : "rd_repl",
"version" : 133334,
"protocolVersion" : NumberLong(1),
"members" : [
{
"_id" : 1,
"host" : "10.0.0.1:2717",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 3,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
},
{
"_id" : 2,
"host" : "10.0.0.2:2717",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 4,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
],
"settings" : {
"chainingAllowed" : true,
"heartbeatIntervalMillis" : 2000,
"heartbeatTimeoutSecs" : 10,
"electionTimeoutMillis" : 10000,
"catchUpTimeoutMillis" : -1,
"catchUpTakeoverDelayMillis" : 30000,
"getLastErrorModes" : {
},
"getLastErrorDefaults" : {
"w" : 1,
"wtimeout" : 0
},
"replicaSetId" : ObjectId("5ba492935fb60fd88fcab516")
}
}
比如要刪除members第一個節點:
{
"_id" : 1,
"host" : "10.0.0.1:2717",
"arbiterOnly" : false,
"buildIndexes" : true,
"hidden" : false,
"priority" : 3,
"tags" : {
},
"slaveDelay" : NumberLong(0),
"votes" : 1
}
執行mongodb的命令:
c = rs.conf()
c.members.splice(0,1)
# splice的第一個參數表示要刪除的數組元素的下標
2、重新配置mongo
rs.reconfig(c, {"force":true})
# c就是上面修改后的配置,加force參數是因為secondary默認沒有執行此命令的權限