Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ /

서버 선택 알고리즘

이 페이지의 내용

  • 복제본 세트에 대한 읽기 설정 (read preference)
  • 샤딩된 클러스터에 대한 읽기 설정 (read preference)

MongoDB 드라이버는 서버 선택 알고리즘 을 사용하여 사용할 복제본 세트 멤버를 선택하거나, 여러 mongos 인스턴스에 연결된 경우 사용할 mongos 인스턴스 를 선택합니다.

서버 선택은 작업마다 한 번씩 발생합니다.

이 페이지의 정보는 다음 환경에서 호스팅되는 배포에 적용됩니다.

  • MongoDB Atlas: 클라우드에서의 MongoDB 배포를 위한 완전 관리형 서비스

참고

분산 트랜잭션 에 포함된 읽기 작업은 primary로 읽기 설정을 사용해야 합니다. 특정 트랜잭션의 모든 작업은 동일한 노드로 라우팅되어야 합니다.

서버 선택은 각 작업마다 한 번씩 발생하며, 읽기에 대한 멤버 자격을 결정하기 위해 읽기 설정 (read preference) 설정과 localThresholdMS 설정에 의해 관리됩니다. 읽기 설정 (read preference)은 각 작업마다 다시 평가됩니다.

읽기 설정 모드
선택 프로세스
primary (기본값)
  1. 드라이버가 프라이머리를 선택합니다.

  1. 드라이버는 자격이 있는 세컨더리 멤버 목록을 구성합니다. 읽기 설정 (read preference)에 지정된 maxStalenessSeconds태그 집합으로 멤버의 자격을 더욱 제한할 수 있습니다.

  2. 자격 있는 멤버 목록이 비어 있지 않다면, 드라이버는 가장 "가까운" (즉, 평균 네트워크 왕복 시간이 가장 낮은) 자격 있는 멤버를 결정하고, 이 "가장 가까운" 서버의 평균 왕복 시간과 localThresholdMS를 더하여 지연 시간 창을 계산합니다. 드라이버는 이 지연 시간 창을 사용하여 대기 시간 창 내에 있는 멤버들로 자격 있는 멤버 목록을 줄입니다.

  3. 이 지연 시간 창 내에 있는 자격 있는 멤버 목록에서 드라이버는 무작위로 자격 있는 멤버를 선택합니다.

  1. 드라이버는 자격 있는 멤버들(프라이머리와 세컨더리)의 목록을 구성합니다. 읽기 설정 (read preference)에 지정된 maxStalenessSeconds태그 집합으로 멤버의 자격을 더욱 제한할 수 있습니다.

  2. 자격 있는 멤버 목록이 비어 있지 않다면, 드라이버는 가장 "가까운" (즉, 평균 네트워크 왕복 시간이 가장 낮은) 자격 있는 멤버를 결정하고, 이 "가장 가까운" 서버의 평균 왕복 시간과 localThresholdMS [1] 를 더하여 지연 시간 창을 계산합니다. 드라이버는 이 지연 시간 창을 사용하여 대기 시간 창 내에 있는 멤버들로 자격 있는 멤버 목록을 줄입니다.

  3. 이 지연 시간 창 내에 있는 자격 있는 멤버 목록에서 드라이버는 무작위로 자격 있는 멤버를 선택합니다.

  1. 프라이머리를 사용 가능한 경우, 드라이버는 프라이머리를 선택합니다.

  2. 프라이머리를 사용할 수 없는 경우 읽기 설정 (read preference) secondary 에 대한 서버 선택 프로세스를 따라 자격 있는 세컨더리 멤버를 선택합니다.

  1. 읽기 설정 (read preference) secondary에 대한 서버 선택 프로세스를 따라, 자격 있는 세컨더리 멤버 목록이 비어 있지 않으면, 드라이버는 자격 있는 세컨더리 멤버를 선택합니다.

  2. 그렇지 않고 목록이 비어 있다면, 드라이버는 주를 선택합니다.

연결 시드 목록에 mongos 인스턴스가 두 개 이상 있는 경우 드라이버는 가장 "가까운" mongos(즉, 평균 네트워크 왕복 시간이 가장 짧은 멤버)를 결정하고, 이 "가장 가까운" mongos 인스턴스의 평균 왕복 시간과 localThresholdMS를 더하여 지연 시간 창을 계산합니다. 드라이버는 지연 시간 창에 속하는 mongos 인스턴스들 사이에서 무작위로 부하를 분산합니다.

복제본 세트 샤드가 있는 샤딩된 클러스터의 경우 mongos 샤드에서 읽을 때 읽기 설정 (read preference)을 적용합니다. 서버 선택은 읽기 설정 (read preference)replication.localPingThresholdMs 설정에 따라 결정됩니다. 읽기 설정 (read preference)은 각 작업마다 다시 평가됩니다.

mongosprimary가 아닌 읽기 설정(read preference) 모드에 대한 헤지된 읽기(hedged read)를 지원합니다. 즉, mongosprimary가 아닌 읽기 설정을 사용하는 경우 읽기 작업을 방지하기 위해 가능한 경우 다른 구성원에게 추가 읽기를 보낼 수 있습니다. 읽기 작업을 헤지하기 위해 전송되는 추가 읽기는 maxTimeMSForHedgedReadsmaxTimeMS 값을 사용합니다.

다음 작업에 대해 헤지된 읽기(hedged read)가 지원됩니다:

헤지된 읽기(hedged read)를 사용하려면 다음을 수행합니다.

  • mongos가 헤지된 읽기(hedged read) 지원을 활성화해야 합니다(기본값). readHedgingMode 매개변수를 참조하세요.

  • primary가 아닌 읽기 설정에서 헤지된 읽기(hedged read)를 활성화해야 합니다.

읽기 설정 모드
선택 프로세스
primary (기본값)
  1. mongos는 프라이머리를 선택합니다.

  1. mongos는 적격한 세컨더리 멤버 목록을 구성합니다. 읽기 설정에 지정된 maxStalenessSeconds태그 세트로 멤버의 자격을 더욱 제한할 수 있습니다.

  2. 자격 있는 멤버 목록이 비어 있지 않다면, mongos는 가장 "가까운"(즉, 평균 네트워크 왕복 시간이 가장 낮은) 적격 멤버를 결정하고, 이 "가장 가까운" 서버의 평균 왕복 시간과 replication.localPingThresholdMs(또는 --localThreshold 를 명령줄 옵션)을 추가하여 지연 시간 창을 계산합니다. mongos는 이 지연 시간 창을 사용하여 적격 멤버 목록을 이 창에 속하는 멤버로 좁힙니다.

  3. 이 지연 시간 내에 있는 적격 멤버 목록에서 mongos가 적격 멤버를 무작위로 선택합니다. 헤지된 읽기(hedged read)를 사용하는 경우 mongos는 사용 가능한 경우 두 번째 적격 멤버를 선택합니다.

  1. mongos는 적격 멤버(프라이머리 및 세컨더리)의 목록을 구성합니다. 읽기 설정에 지정된 maxStalenessSeconds태그 세트로 멤버의 자격을 더욱 제한할 수 있습니다.

  2. 자격 있는 멤버 목록이 비어 있지 않다면, mongos는 가장 "가까운"(즉, 평균 네트워크 왕복 시간이 가장 낮은) 적격 멤버를 결정하고, 이 "가장 가까운" 서버의 평균 왕복 시간과 replication.localPingThresholdMs(또는 --localThreshold 를 명령줄 옵션)을 추가하여 지연 시간 창을 계산합니다 [1]. mongos는 이 지연 시간 창을 사용하여 적격 멤버 목록을 이 창에 속하는 멤버로 좁힙니다.

  3. 이 지연 시간 내에 있는 적격 멤버 목록에서 mongos가 적격 멤버를 무작위로 선택합니다. 헤지된 읽기(hedged read)를 사용하는 경우 mongos는 사용 가능한 경우 두 번째 적격 멤버를 선택합니다.

  1. 프라이머리을 사용할 수 있는 경우 mongos는 프라이머리을 선택합니다.

  2. 프라이머리값을 사용할 수 없거나 mongos헤지된 읽기(hedged read)를 사용하는 경우 서버 선택은 읽기 설정 secondary의 프로세스를 따릅니다. 헤지된 읽기(hedged read)의 경우,

    • 프라이머리를 사용할 수 있는 경우 mongos는 사용 가능한 경우 단일 적격 세컨더리를 선택합니다.

    • 프라이머리를 사용할 수 없는 경우 mongos는 사용 가능한 경우 두 개의 적격 세컨더리를 선택합니다.

  1. 읽기 설정 secondary에 대한 서버 선택 프로세스에 따라 적합한 세컨더리 멤버 목록이 비어 있지 않은 경우 mongos는 적격 세컨더리 멤버를 선택합니다. 헤지된 읽기(hedged read)를 사용하는 경우 mongos는 사용 가능한 경우 다른 세컨더리를 선택합니다.

  2. 적격 세컨더리 멤버 목록이 비어 있거나 mongos가 헤지된 읽기(hedged read)를 사용 중이고 적격 세컨더리 멤버를 하나만 사용할 수 있는 경우 mongos가 프라이머리를 선택합니다.

[1](1, 2) 기본 임계값은 15밀리초입니다.

돌아가기

헤지된 읽기