10107 NotWritablePrimary: not master / not writable primary
MongoDB의미
쓰기(또는 primary가 필요한 다른 작업)가 현재 primary가 아닌 replica set 멤버로 전송되었다. primary만 쓰기를 받으므로 작업이 거부되었다.
원인
애플리케이션이 secondary에 쓰고 있거나, 페일오버(election) 중 이전 primary가 secondary가 되었는데 클라이언트가 여전히 연결되어 있거나, 드라이버의 읽기/쓰기 preference와 토폴로지 정보가 오래된 경우다. 연결 문자열에 replicaSet 파라미터가 없는 것이 전형적인 원인이다.
해결 방법
드라이버에 모든 replica set 멤버와 replica set 이름을 구성해(연결 문자열에 replicaSet=... 및 모든 호스트) 드라이버가 primary를 자동으로 찾고 페일오버 시 재라우팅하도록 한다. 쓰기를 primary로 라우팅하는 기본 읽기/쓰기 preference를 사용한다. 일시적 오류이므로 애플리케이션에서 retryable writes를 활성화한다. rs.status()로 어떤 멤버가 PRIMARY인지 확인한다.
같은 데이터베이스의 다른 항목
- 67 CannotCreateIndexCannot create index
- 27 IndexNotFoundIndex not found
- 79 UnknownReplWriteConcernUnknown replica set write concern
- 91 ShutdownInProgressThe server is in the process of shutting down (서버가 종료 중)
- 189 PrimarySteppedDownPrimary stepped down while operation was in progress (작업 진행 중 primary가 step down됨)
- 24 LockTimeoutOperation exceeded time limit waiting for a lock (락 대기 중 작업 시간 한도 초과)
- 7 HostNotFoundCould not find host