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

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인지 확인한다.

DBAtlas에서 열기 →

같은 데이터베이스의 다른 항목