MongoDB 드라이버는 서버 선택 알고리즘 을 사용하여 사용할 복제본 세트 멤버를 선택하거나, 여러 mongos 인스턴스에 연결된 경우 사용할 mongos 인스턴스 를 선택합니다.
서버 선택은 작업마다 한 번씩 발생합니다.
참고
분산 트랜잭션 에 포함된 읽기 작업은 primary로 읽기 설정을 사용해야 합니다. 특정 트랜잭션의 모든 작업은 동일한 노드로 라우팅되어야 합니다.
서버 선택은 각 작업마다 한 번씩 발생하며, 읽기에 대한 멤버 자격을 결정하기 위해 읽기 설정 (read preference) 설정과 localThresholdMS 설정에 의해 관리됩니다. 읽기 설정 (read preference)은 각 작업마다 다시 평가됩니다.
| |
|---|
| |
| 드라이버는 자격이 있는 세컨더리 멤버 목록을 구성합니다. 읽기 설정 (read preference)에 지정된 maxStalenessSeconds 및 태그 집합으로 멤버의 자격을 더욱 제한할 수 있습니다. 자격 있는 멤버 목록이 비어 있지 않다면, 드라이버는 가장 "가까운" (즉, 평균 네트워크 왕복 시간이 가장 낮은) 자격 있는 멤버를 결정하고, 이 "가장 가까운" 서버의 평균 왕복 시간과 localThresholdMS를 더하여 지연 시간 창을 계산합니다. 드라이버는 이 지연 시간 창을 사용하여 대기 시간 창 내에 있는 멤버들로 자격 있는 멤버 목록을 줄입니다. 이 지연 시간 창 내에 있는 자격 있는 멤버 목록에서 드라이버는 무작위로 자격 있는 멤버를 선택합니다.
|
| 드라이버는 자격 있는 멤버들(프라이머리와 세컨더리)의 목록을 구성합니다. 읽기 설정 (read preference)에 지정된 maxStalenessSeconds 및 태그 집합으로 멤버의 자격을 더욱 제한할 수 있습니다. 자격 있는 멤버 목록이 비어 있지 않다면, 드라이버는 가장 "가까운" (즉, 평균 네트워크 왕복 시간이 가장 낮은) 자격 있는 멤버를 결정하고, 이 "가장 가까운" 서버의 평균 왕복 시간과 localThresholdMS 를 더하여 지연 시간 창을 계산합니다. 드라이버는 이 지연 시간 창을 사용하여 대기 시간 창 내에 있는 멤버들로 자격 있는 멤버 목록을 줄입니다. 이 지연 시간 창 내에 있는 자격 있는 멤버 목록에서 드라이버는 무작위로 자격 있는 멤버를 선택합니다.
|
| 프라이머리를 사용 가능한 경우, 드라이버는 프라이머리를 선택합니다. 프라이머리를 사용할 수 없는 경우 읽기 설정 (read preference) secondary 에 대한 서버 선택 프로세스를 따라 자격 있는 세컨더리 멤버를 선택합니다.
|
| 읽기 설정 (read preference) secondary에 대한 서버 선택 프로세스를 따라, 자격 있는 세컨더리 멤버 목록이 비어 있지 않으면, 드라이버는 자격 있는 세컨더리 멤버를 선택합니다. 그렇지 않고 목록이 비어 있다면, 드라이버는 주를 선택합니다.
|
연결 시드 목록에 mongos 인스턴스가 두 개 이상 있는 경우 드라이버는 가장 "가까운" mongos(즉, 평균 네트워크 왕복 시간이 가장 짧은 멤버)를 결정하고, 이 "가장 가까운" mongos 인스턴스의 평균 왕복 시간과 localThresholdMS를 더하여 지연 시간 창을 계산합니다. 드라이버는 지연 시간 창에 속하는 mongos 인스턴스들 사이에서 무작위로 부하를 분산합니다.
복제본 세트 샤드가 있는 샤딩된 클러스터의 경우 mongos는 샤드에서 읽을 때 읽기 설정 (read preference)을 적용합니다. 서버 선택은 읽기 설정 (read preference) 및 replication.localPingThresholdMs 설정에 따라 결정됩니다. 읽기 설정 (read preference)은 각 작업마다 다시 평가됩니다.
| |
|---|
| |
| |
| |
| 프라이머리을 사용할 수 있는 경우 mongos는 프라이머리을 선택합니다.
- # . 프라이머리 를 사용할 수 없는 경우 서버
- 선택은 읽기 설정 (read preference)
secondary 에 대한 프로세스 를 따릅니다.
|
| 읽기 설정 secondary에 대한 서버 선택 프로세스에 따라 적합한 세컨더리 멤버 목록이 비어 있지 않은 경우 mongos는 적격 세컨더리 멤버를 선택합니다. 적격 세컨더리 멤버 목록이 비어 있으면 mongos 에서 프라이머리 선택합니다.
|