DBAtlas · 데이터베이스 운영 아틀라스

과반수 상실 후 replica set 강제 재구성 (force reconfig)

MongoDBReplica Set

명령어

// On a surviving member with the most recent optime (runs as a secondary):
rs.status().members.map(m => ({ host: m.name, state: m.stateStr, health: m.health, optime: m.optimeDate }))
cfg = rs.conf()
cfg.members.map((m, i) => ({ i: i, host: m.host }))
// Keep only the reachable members (example: members 0 and 2):
cfg.members = [cfg.members[0], cfg.members[2]]
rs.reconfig(cfg, { force: true })
// Verify the new primary election:
rs.status().members.map(m => ({ host: m.name, state: m.stateStr }))

하는 일

투표 멤버의 과반수를 영구적으로 잃었을 때(예: 데이터 센터 전체 소실), 남은 멤버로 새 구성을 만들어 set이 다시 primary를 선출할 수 있게 한다.

사용 시점

재해 시나리오에서만: 과반수가 돌아오지 않고 set이 읽기 전용으로 멈춘 경우.

주의

최후의 수단이다. 잃었던 멤버가 이후 이전 구성으로 돌아오면 split-brain과 rollback이 발생할 수 있으므로 네트워크에서 격리하고, 복귀시킬 때는 데이터를 지우고 초기 동기화로 추가한다. optime이 가장 최신인 멤버를 고른다. 그렇지 않으면 다른 멤버에서 majority-commit되지 않은 쓰기가 rollback된다. 일상적인 멤버 변경에는 force를 사용하지 않는다.

DBAtlas에서 열기 →

관련 항목