Docs Menu
Docs Home
/ / /
Java 동기화 드라이버

연결 문제 해결

이 페이지의 내용

  • 보안 인증서 오류
  • 시간 초과 오류
  • 세트 maxConnectionTimeoutMS
  • maxConnectionLifeTimemaxConnectionIdleTime설정
  • MongoDB 서버 선택 시간 초과 예외
  • 기타 오류
  • 스레드 예외 모니터링
  • 인증서 요청 예외
  • 디버깅 팁
  • TLS/SSL을 위한 상세 로깅

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 옵션은 제한시간이 초과되기 전에 Java 드라이버가 연결을 기다리는 시간을 표시합니다. 기본값은 10000입니다. 이 값을 늘리거나 드라이버가 시간 초과되지 않도록 하려면 0으로 설정할 수 있습니다.

및 설정을 고려합니다. 이 매개변수는 운전자 maxConnectionLifeTime 가 MongoDB 인스턴스 에 대한 연결을 유지하는 기간을 구성합니다. 이러한 매개변수에 대한 자세한 내용은 maxConnectionIdleTime 연결 풀 설정을 참조하세요.

일부 서버를 사용할 수 있는 경우에도 애플리케이션이 요청을 완료하지 못할 수 있으며, 이로 인해 드라이버가 서버 선택 시간 초과 예외를 반환하게 됩니다.

이 예외는 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 버그 시스템 추적기 문제의 문제 설명 을 참조하세요.

이 섹션은 특정 오류 메시지와 관련은 없지만 연결 문제 해결 과정에 도움이 될 수 있는 정보가 포함되어 있습니다.

-Djavax.net.debug=all 시스템 특성을 사용하여 TLS/SSL을 사용하여 설정된 연결을 포함하여 모든 연결과 관련된 디버그 레벨 로깅을 사용하도록 설정할 수 있습니다.

디버그 수준 로깅을 활성화하면 연결 문제의 근본적인 문제를 진단하는 데 도움이 될 수 있습니다. TLS/SSL 로깅 메시지에 대해 자세히 알아보려면 SSL/TLS 연결 디버깅 하기를 참조하세요. Java 문서.

돌아가기

FAQ