[AWS MySQL] AWS JDBC Driver for MySQL

-          AWS JDBC 드라이버를 사용하여 장애조치 시간 단축하기

 

l  Version : AWS MySQL, Aurora

 

 

Amazon Web Service (AWS) JDBC Driver for MySQL 사용하면 애플리케이션에서 클러스터된 MySQL 데이터베이스의 기능을 활용할 있다. AWS JDBC Driver for MySQL 오픈소스 MySQL JDBC Connector 기반으로 제작되었기 때문에 호환 가능하다.

l  mysql-connector-j : https://github.com/mysql/mysql-connector-j

l  aws-mysql-jdbc : https://github.com/awslabs/aws-mysql-jdbc

 

MySQL AWS JDBC Driver MySQL 호환되는 Amazon Aurora 대해서도 빠른 장애 조치를 지원한다. Amazon RDS for MySQL 온프레미스 MySQL 배포 기능을 포함하여 클러스터형 데이터베이스 추가 기능에 대한 지원이 계획되어 있다.

 

Amazon Aurora에서 장애 조치는 기본 DB 인스턴스를 사용할 없을 데이터베이스가 클러스터 상태를 자동으로 복구하는 메커니즘이다. 클러스터가 기본 쓰기-읽기 DB 인스턴스에 최대 가용성을 제공할 있도록 데이터베이스 복제본을 새로운 기본 DB 인스턴스로 선택하여 이를 달성한다. 복제본 인스턴스를 기본 DB 인스턴스 역할로 승격하려면 먼저 연결을 올바르게 지정하기 위해 DNS 레코드를 업데이트해야 한다. 프로세스는 최대 분이 소요될 있다.

 

MySQL AWS JDBC Driver 가동 중지 시간을 최소화하기 위해 동작을 최적화하여 설계되었다. MySQL 클러스터 토폴로지의 캐시와 인스턴스의 역할(복제본 또는 기본 DB 인스턴스) 유지함으로써 이를 달성한다. 토폴로지는 MySQL 데이터베이스에 대한 직접 쿼리를 통해 제공되어 DNS 확인으로 인한 지연을 우회하는 지름길을 제공한다. 이를 바탕으로 MySQL AWS JDBC Driver 데이터베이스 클러스터 상태를 보다 면밀히 모니터링하여 새로운 기본 DB 인스턴스에 대한 연결을 최대한 빨리 설정할 있다.

 

MySQL AWS JDBC Driver에는 연결 플러그인 관리자도 있다. 플러그인 관리자를 사용하면 개발자는 주요 드라이버 기능을 그대로 유지하면서 유연한 방식으로 드라이버 기능을 확장할 있다. 연결 플러그인 관리자는 연결에 대한 초기화, 트리거 연결 체인을 정리한다. 연결 플러그인은 해당 연결과 관련된 추가 또는 보완 논리를 실행하는 도움이 되도록 연결 개체에 연결된 위젯이다. Enhanced Failure Monitoring 기능은 연결 플러그인 하나이다. 아래 그림은 연결 플러그인 관리자의 간소화된 워크플로를 보여준다.

드라이버가 JDBC 메소드를 실행할 때마다 연결 플러그인 관리자로 전달된다. Connection Plugin Manager에서 JDBC 메소드가 Plugin 순서대로 전달되어 체인처럼 로드 된다. 예제에서는 메서드는 먼저 Custom Plugin A 전달되고, 다음으로 Custom Plugin B 전달되고, 마지막으로 Default Plugin으로 전달된다. 플러그인은 JDBC 메소드를 실행하고 체인을 통해 결과를 다시 반환한다.

 

Enhanced Failure Monitoring 모니터 스레드에 의해 구현된 연결 플러그인으로 MySQL AWS JDBC Driver 향상된 장애 조치를 지원한다. 모니터는 연결된 데이터베이스 노드의 상태를 주기적으로 확인한다. 데이터베이스 노드가 비정상인 것으로 확인되면 데이터베이스 노드로 쿼리가 재시도되고 모니터가 다시 시작된다. 기본적으로 Enhanced Failure Monitoring 플러그인이 로드 된다. 그러나 Amazon RDS Proxy 사용하는 경우에는 향상된 장애 조치가 필요하지 않으며 RDS Proxy드라이버가 처리한다.

 

아래 표는 Aurora MySQL 5.7(2.10.0) 사용하여 AWS JDBC Driver for MySQL MariaDB Connector/J(Aurora 인식하도록 구성됨) 간의 장애 조치 시간을 벤치마킹한 결과이다. 데이터베이스에 연결되고 1초마다 테이블에 대해 쿼리를 실행하는 간단한 Java 앱을 실행한다음 Amazon RDS 콘솔을 통해 기본 데이터베이스에 장애 조치 명령이 실행되었다. 경우 모두 드라이버가 복제본에 자동으로 다시 연결되었지만 MySQL AWS JDBC Driver 오류를 인식하고 연결하는데 훨씬 빠르게 동작하였다.

 

벤치 마크 결과를 살펴보면 AWS JDBC Driver for MySQL 오류 감지에 평균 2, 복제본에 연결에 평균2초를 수행하여 최종 읽기까지의 중단 시간은 4초가 소요되었다.

MySQL 5.7 AWS JDBC Driver for MySQL MariaDB Connector/J Driver
Average Client Failure Detection 2 seconds 19 seconds
Average Reconnect Time 2 seconds 18 seconds
Total Reconnect Time 4 seconds 37 seconds

 

 

AWS JDBC 드라이버를 RDS Proxy 함께 사용할 주의해야할 부분이 있다. Enhanced Failure Monitoring 플러그인이 포함된 MySQL AWS JDBC Driver 함께 RDS Proxy 엔드포인트를 함께 사용할 경우 심각한 문제가 발생하지는 않지만 함께 사용을 권장하지는 않는다. 이유는 RDS Proxy 드라이버 요청을 데이터베이스 인스턴스 하나로 투명하게 다시 라우팅하기 때문이다. RDS Proxy 여러 기준에 따라 어떤 데이터베이스 인스턴스가 사용되는지를 결정한다. 이러한 결정 전환은 인스턴스 상태 모니터링 측면에서 플러그인을 쓸모 없게 만든다. 플러그인은 연결된 실제 인스턴스와 모니터링 중인 인스턴스를 식별할 없기 때문에 오류 감지에 대해서 오탐지의 원인이 있다. 동시에 플러그인은 여전히 ​​RDS Proxy 엔드포인트에 대한 네트워크 연결을 사전에 모니터링하고 중단이 발생할 경우 사용자 애플리케이션에 다시 보고할 있기 때문이다. 따라서 Enhanced Failure Monitoring 플러그인을 사용할 때에는 RDS Proxy 엔드포인트를 사용하지 않는 것이 좋다.

 

 

[참고자료]

l  https://awslabs.github.io/aws-mysql-jdbc/

l  https://aws.amazon.com/blogs/database/improve-application-availability-with-the-aws-jdbc-driver-for-amazon-aurora-mysql/

l  https://github.com/awslabs/aws-mysql-jdbc#the-aws-jdbc-driver-failover-process

 

 

 

2022-03-27 / Sungwook Kang / http://sungwookkang.com

 

 

AWS JDBC Driver, MySQL Connector, AWS JDBC, MySQL Failover, 장애조치, AWS 장애조치

  1. 김종현 2022.04.04 21:15

    안녕하세요. 한가지 질문이 있어서 댓글 작성합니다. 현재 저희가 Maria Connector/J 1.6.x 버전 (오래된 것)을 사용하고 있는데 이번에 aws-mysql-jdbc Driver를 사용하려고 합니다. 현재 DB는 AWS RDS Aurora(MySQL)를 사용중인데 내용 정리해주신거 보면 기본적으로 RDS Proxy를 쓰고 있는 것 같습니다. 그렇다면 Enhanced Failure Monitoring를 명시적으로 사용하지 않는이상 aws-mysql-jdbc Driver를 써도 상관없을까요?

    • SungWookKang 2022.04.07 23:03 신고

      안녕하세요. 본문에 쓰여있는 것처럼 큰 문제는 없으나, 장애조치시 현재 연결된 커넥션이 끊어진것인지 아닌지 판단시 정확히 판단하기 힘들 수 있기 때문에 질문 주신것 처럼 해당 기능을 끄고 사용한다면 문제가 없어 보입니다.

+ Recent posts