연결 문제 해결
이 페이지의 내용
보안 인증서 오류
Java 버전 8 이하를 사용하는 경우 신뢰 저장 에 인증서를 추가해야 할 수 있습니다. 최신 버전의 JDK로 업그레이드 하거나 Atlas 문서의보안 FAQ 지침에서 인증서를 추가하는 방법에 대한 정보를 읽을 수 있습니다.
시간 초과 오류
드라이버를 통해 서버에 메시지를 보낼 때 메시지가 응답하는 데 시간이 걸리는 경우가 있습니다. 이 경우 다음 메시지 중 하나와 유사한 오류 메시지가 나타날 수 있습니다.
Timed out after 30000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}.
No server chosen by ReadPreferenceServerSelector{readPreference=primary} from cluster description
이러한 오류 중 하나가 발생하면 다음 방법을 시도하여 문제를 해결하세요.
세트 maxConnectionTimeoutMS
maxConnectionTimeoutMS
옵션은 제한시간이 초과되기 전에 Java 드라이버가 연결을 기다리는 시간을 표시합니다. 기본값은 10000
입니다. 이 값을 늘리거나 드라이버가 시간 초과되지 않도록 하려면 0
으로 설정할 수 있습니다.
및 설정 maxConnectionLifeTime
maxConnectionIdleTime
및 설정을 고려합니다. 이 매개변수는 운전자 maxConnectionLifeTime
가 MongoDB 인스턴스 에 대한 연결을 유지하는 기간을 구성합니다. 이러한 매개변수에 대한 자세한 내용은 maxConnectionIdleTime
연결 풀 설정을 참조하세요.
MongoDB 서버 선택 시간 초과 예외
일부 서버를 사용할 수 있는 경우에도 애플리케이션이 요청을 완료하지 못할 수 있으며, 이로 인해 드라이버가 서버 선택 시간 초과 예외를 반환하게 됩니다.
이 예외는 MongoTimeoutException
유형입니다. 다음은 프라이머리 세트에 연결할 수 없는 복제본 세트에 요청을 보내려고 할 때 발생하는 예외의 샘플입니다.
com.mongodb.MongoTimeoutException: Timed out while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=REPLICA_SET, servers=[ {address=localhost:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.ConnectException: Connection refused}}, {address=localhost:27018, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSocketOpenException: Exception opening socket}, caused by {java.net.ConnectException: Connection refused}}, {address=localhost:27019, type=REPLICA_SET_SECONDARY, roundTripTime=15.0 ms, state=CONNECTED} ] }
이 오류에는 연결 문제의 원인을 식별하는 데 도움이 될 수 있는 각 노드의 연결 상태를 설명하는 클러스터 상태 보기가 포함되어 있습니다.
앞의 오류에서 연결된 유일한 서버는 localhost:27019
세컨더리 노드입니다. 이로 인해 드라이버가 primary
의 읽기 설정을 충족하는 서버를 선택할 수 없으므로 요청 시간이 초과됩니다. 이 상황에서도 읽기 설정을 secondary
, secondaryPreferred
또는 nearest
로 설정하면 연결된 세컨더리 노드에 대해 읽기 작업을 계속 수행할 수 있습니다.
serverSelectionTimeoutMS
연결 옵션을 지정하여 드라이버가 서버를 선택해야 하는 시간을 조정할 수도 있습니다. 자세한 내용은 연결 옵션 가이드를 참조하세요.
기타 오류
이 섹션에서는 더 넓은 범주에 속하지 않는 연결 오류를 보여줍니다.
스레드 예외 모니터링
INFO: Exception in monitor thread while connecting to server ssc-cluster-01-shard-00-02.9cbnp.mongodb.net:27017
이 로그 줄은 각 복제본 세트 멤버 또는 mongos
서버 의 상태를 지속적으로 확인하는 모니터 가 노드 또는 서버 중 하나에 문의 하지 못했음을 나타냅니다. 이 메시지는 서버 유지 관리 작업 중에 예상되는 메시지이므로 무시해도 됩니다.
인증서 요청 예외
javax.net.ssl.SSLHandshakeException: extension (5) should not be presented in certificate_request
이는 특정 버전의 JDK에서 TLS 1.3 프로토콜을 사용하여 연결하려고 할 때 발생할 수 있는 알려진 문제입니다.
MongoDB 인스턴스 또는 클러스터에 연결할 때 이 오류가 발생하면 JDK를 다음 패치 버전 이상으로 업데이트하세요.
JDK 11.0.7
JDK 13.0.3
JDK 14.0.2
이 문제에 학습 보려면 OpenJDK 버그 시스템 추적기 문제의 문제 설명 을 참조하세요.
디버깅 팁
이 섹션은 특정 오류 메시지와 관련은 없지만 연결 문제 해결 과정에 도움이 될 수 있는 정보가 포함되어 있습니다.
TLS/SSL을 위한 상세 로깅
-Djavax.net.debug=all
시스템 특성을 사용하여 TLS/SSL을 사용하여 설정된 연결을 포함하여 모든 연결과 관련된 디버그 레벨 로깅을 사용하도록 설정할 수 있습니다.
디버그 수준 로깅을 활성화하면 연결 문제의 근본적인 문제를 진단하는 데 도움이 될 수 있습니다. TLS/SSL 로깅 메시지에 대해 자세히 알아보려면 SSL/TLS 연결 디버깅 하기를 참조하세요. Java 문서.