programing

MariaDB Connector/J 및 AWS RDS Aurora에서 이상한 간헐적 문제 발생

randomtip 2022. 9. 5. 22:43
반응형

MariaDB Connector/J 및 AWS RDS Aurora에서 이상한 간헐적 문제 발생

설정은 다음과 같습니다.

  • AWS RDS Aurora 클러스터, 단일 지역, 단일 마스터, 2개의 읽기 복제본
  • 동일한 VPC 내에서 실행되는 Java 노드
  • MariaDB Connector/J(Aurora 페일오버 모드 포함)
  • 접속 풀로서의 HikariCP
  • HikariCP에는 디폴트가 있습니다.maxLifetime30분의
  • Aurora는 디폴트입니다.wait_timeout8시간의

MariaDB Connector/J에게 Aurora 읽기 복제와 마스터에 대해 지정된 쿼리를 실행하도록 지시하기 위해 전화합니다.Connection.setReadOnly(true)그것을 얻은 후에HikariDataSource.

모든 것이 잘 작동하지만...평균적으로 일주일에 두 번 정도 Java 노드 플릿의 2%가 읽기 복제본을 쿼리할 때 예외에 도달합니다.예외는 동일한 복제본에 대해 1, 2초 이내에 서로 다른 노드에서 발생합니다.

기본 예외 스택은 다음과 같습니다.

Caused by: java.sql.SQLInvalidAuthorizationSpecException: (conn=2445137) Communications link failure with secondary host xxx.xxx.us-east-1.rds.amazonaws.com:3306. (conn=1644010) Connection is closed
      at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.createException(ExceptionFactory.java:66)
      at org.mariadb.jdbc.internal.util.exceptions.ExceptionFactory.create(ExceptionFactory.java:153)
      at org.mariadb.jdbc.MariaDbStatement.executeExceptionEpilogue(MariaDbStatement.java:273)
      at org.mariadb.jdbc.ClientSidePreparedStatement.executeInternal(ClientSidePreparedStatement.java:229)
      at org.mariadb.jdbc.ClientSidePreparedStatement.execute(ClientSidePreparedStatement.java:149)
      at org.mariadb.jdbc.ClientSidePreparedStatement.executeQuery(ClientSidePreparedStatement.java:163)
      at com.zaxxer.hikari.pool.ProxyPreparedStatement.executeQuery(ProxyPreparedStatement.java:52)
      at com.zaxxer.hikari.pool.HikariProxyPreparedStatement.executeQuery(HikariProxyPreparedStatement.java)
      at com.querydsl.sql.AbstractSQLQuery.iterateSingle(AbstractSQLQuery.java:370)
      ... 21 more
Caused by: java.sql.SQLException: Communications link failure with secondary host xxx.xxx.us-east-1.rds.amazonaws.com:3306. (conn=1644010) Connection is closed
on HostAddress{host='xxx.xxx.us-east-1.rds.amazonaws.com', port=3306},master=false.  Driver has reconnect connection
      at org.mariadb.jdbc.internal.failover.AbstractMastersListener.throwFailoverMessage(AbstractMastersListener.java:563)
      at org.mariadb.jdbc.internal.failover.FailoverProxy.handleFailOver(FailoverProxy.java:391)
      at org.mariadb.jdbc.internal.failover.FailoverProxy.executeInvocation(FailoverProxy.java:324)
      at org.mariadb.jdbc.internal.failover.FailoverProxy.invoke(FailoverProxy.java:294)
      at com.sun.proxy.$Proxy27.executeQuery(Unknown Source)
      at org.mariadb.jdbc.ClientSidePreparedStatement.executeInternal(ClientSidePreparedStatement.java:220)
      ... 26 more

다음으로 해당 Aurora 인스턴스의 MySQL 오류 로그를 확인하면 Java 노드에서 예외가 발생한 후 몇 초 또는 몇 분 후에 연결 중단이 보고됩니다.

1644010 [Note] Aborted connection 1644010 to db: 'xxx' user: 'xxx' host: 'xxx' (Got an error reading communication packets)

비슷한 걸 마주친 사람이 있나요?원인이 무엇인지 짐작이 가는 것이 있습니까?

언급URL : https://stackoverflow.com/questions/67198865/strange-intermittent-issue-with-mariadb-connector-j-and-aws-rds-aurora

반응형