ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [AWS + Spring] EB + Spring Boot + Aurora RDS 연동 및 Read/Write 분산 처리 (2)
    Spring 2023. 1. 4. 17:23
    반응형

    이전 포스팅에선 ElasticBeanStalk, Aurora Cluster, Bastion Host를 구성했었다.

    이번 포스팅에선 Aurora Read Instance(읽기 전용)를 추가하고

    bastion hostssh turnnel 방식을 사용하여 Intellij DataBase Tool에  Aurora Server를 연동할 예정이다.

     

     

     

    💡 프로비저닝된 Amazon Aurora DB 클러스터를 공개적으로 액세스할 수 있는 기본적인 방법은 아래와 같다.

    • DB 인스턴스에 퍼블릭 IP 주소가 있어야 한다.
    • DB 인스턴스가 공개적으로 액세스할 수 있는 서브넷에서 실행되고 있어야 한다.

     

    하지만 위와 같은 구성일 때는, 외부로부터 안전하지가 않고 TLS를 사용하여 VPC 외부에서 오는 연결을 암호화 할 수가 있다.

    우리는 앞서 Aurora와 같은 VPC에 있는 bastion-host EC2를 생성했었다. 이 bastion-hostSSH 터널링 방식을 사용하여

    연동 할 것이다.

     

     

    📌 시작하기

    1. Intellij Ultimate DataBase에 AuroraDB 연동

     

     

     

    Intellij에서 Mysql Driver로 연결하려고 하면 Connection Time Out이 뜨는 이슈가 간혹 있다.

     Amazon Aurora MySQL로 Driver를 변경하자.

     

     

     

     

    💡 Troubleshooting

    본인 Intellij 버전에선 Aurora Driver 3.0으로 연결을 시도하면 (conn=65) invalid fetch size Error 가 발생한다.

    해당 이슈를 찾아보니 3.0 버전에선 Integer.MIN_VALUE를 가져오려고 하기 때문에 발생한다고 한다.

    그렇기 때문에 아래 사진처럼 Amazon Aurora MySQL Driver Version을 2.7.X로 변경해주어야 한다.

    (Intellij 버전에 따른 이슈로 추측됨)

     

    Reference: https://jira.mariadb.org/projects/CONJ/issues/CONJ-977?filter=allissues

     

     

    변경한 Amazon Aurora MySQL을 클릭하여 'Go to Driver' 클릭

     

     

    3.0 버전인 경우 2.7.3 버전으로 변경

    (+ 버튼 클릭 > Provided Driver > MariaDB Connector J > 2.7.3 버전 클릭 후 적용)

     

     

     

     

    1. Host: Aws Aurora Instance Endpoint 입력
    2. Port: Mysql Port 3306 입력
    3. User: Aurora Master User Name 입력
    4. Password: Aurora Master User Password 입력
    5. Database: 초기 DataBase명 입력

    경고 문구가 신경쓰이는 경우 Ignore 클릭 & 전부 입력 후에, 상단 'SSH/SSL' Tab 클릭

     

     

     

     

    Use SSH tunnel Check > ... 클릭

     

     

     

     


    1. SSH Hostname : 배스천 호스트의 IP와 SSH 포트인 :22 를 입력

    2. SSH Username: 보통 ec2-user

    3. Authentication type: Key pair 클릭
    4. SSH Key File : 배스천 호스트에 접속이 가능한 개인키나 공개키 선택 (pem file)
    5. TEST CONNECTION 클릭하여 배스천 호스트와 연결 확인

     

    SSH 터널링 셋팅을 구성 후, General Tab 눌러서 Test Connection을 하고 OK를 눌러서 Aurora Instance에 연결한다.

     

     

    intellij Database에 연결된 것을 확인 할 수 있다.

     

     

     

     

    2. Amazon Aurora Cluster 파라미터 그룹 추가

    default 파라미터는 수정이 불가능하기 때문에(에러 발생) character 같은 옵션 변경을 위해서는

    새로운 파라미터 그룹을 적용해야 한다.

     

     

     

    RDS > 파라미터 그룹 > 파라미터 그룹 생성 클릭

     

     

     

    유형은 DB Cluster Parameter Group으로 선택하여 클러스터 파라미터 그룹 생성

     

    * 유형은 DB 클러스터 파라미터 그룹DB 파라미터 그룹 2가지가 있다.

     

    DB 클러스터 파라미터 그룹은 클러스터내 모든 Aurora DB 인스턴스에 공통적으로 적용되는 파라미터 그룹의 역할을 하게 되며 파라미터의 기본값도 포함되어 있다.

    DB 파라미터 그룹은 클러스터내 각 개별의 Aurora 단일 DB 인스턴스의 파라미터 그룹을 의미한다. 특정 인스턴스에만 별도로 파라미터 값을 다르게 설정해야할 필요가 있을 때 DB Parameter Group 을 별도로 생성하여 해당 인스턴스에서 사용하는 형태로 이용할 수 있다.

     

     

     

    생성한 클러스터 파라미터 그룹을 클릭하여 상세 페이지로 들어와서 '파라미터 필터링' 검색을 통해 필요한 옵션의 값을 수정할 수 있다.

    utf는 이모지 저장이 불가능한 방식이기 때문에 이모지 저장까지 가능한 utf8mb4로 변경한다.

    아래 목록 옵션값을 수정하고 파라미터 편집을 완료한다.

     

    #utf8mb4로 변경

    character-set-client

    character-set-connection

    character-set-filesystem

    character-set-database

    character-set-results

    character-set-server

     

    #utf8mb4_general_ci로 변경

    collation_connection

    collation_database

    collation_server

     

    수정한 파라미터 타입이 dynamic이면 바로 적용이 되고, static이라면 재가동을 해주어야 한다.

     

     

     

     

    RDS > Aurora Cluster 수정화면으로 돌아와서 위 사진처럼 클러스터 파라미터 그룹을 변경해준다.

     

     

     

     

    클러스터 파라미터 그룹을 변경했기 때문에 라이터 인스턴스를 재부팅 해준다.

    Aurora MySQL 버전 2.10 이상에서는 클러스터의 리더 인스턴스를 재부팅하지 않고 Aurora MySQL 클러스터의 라이터 인스턴스를 재부팅할 수 있다.

    이렇게 하면 라이터 인스턴스를 재부팅하는 동안 읽기 작업에 대한 클러스터의 고가용성을 유지하는 데 도움이 된다. 나중에 편리한 일정에 따라 리더 인스턴스를 재부팅할 수 있다.

    그래서 지금 사용하는 버전이 2.10 이전 버전이라면 라이터 인스턴스의 재기동에 주의 해야 한다.

     

     

    show variables like 'c%';

     

     

    위 명령어로 Variable을 확인해보면 아래 사진과 같이 변경이 된 것을 확인할 수 있다.

    다만, character_set_database collation_database는 바뀌지 않았다. 따로 수정해주어야 한다.

     

    ALTER DATABASE test CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci;

     

    다시 명령어로 확인해보면 수정이 잘 되어있는 것을 확인할 수 있다.

     

     

     

     

    3. 읽기 전용 복제본 추가

    현재 구성한 Amazon Aurora Cluster DB 는 클러스터 내 1개의 기본 인스턴스(마스터) 만 존재하는 상태다. 기존이 클러스터로 구성되며 인스턴스 레벨의 멀티 AZ가 지원되지 않기 때문에 읽기 복제본 인스턴스를 사용한 문제시 장애복구 및 다운타임을 줄이게 된다.

     

    또한 우리는 이 Reader Instance를 이용하여 Read-Write 분산 처리를 할 계획이다.

     

    RDS > 데이터베이스 > Cluster 선택 후 읽기 추가 클릭

     

     

     

    복제 원본을 선택해주고, 식별자를 입력한다.

    인스턴스 용량은 본인의 환경에 맞추어 선택해주면 된다.

     

     

    연결 항목에서는 퍼블릭 엑세스 가능 여부가용 영역(AZ) 를 선택 할수 있으며 포트는 변경이 불가능하다. 

     

     

    추가 구성에서 "장애 조치 우선 순위" 를 지정해야 하며 이전에 기본 인스턴스(마스터) 에서는 티어-0을 선택하였기 때문에

    이번에 생성하는 읽기 복제본더 후 순위 티어-1을 지정한다.

     

     

    생성하는데는 5분정도 소요되고 완료 되면 위 사진과 같이 리더 인스턴스가 추가된 것을 확인할 수 있다.

     

     

     

    위에서 '라이터 인스턴스'에 연결한 것처럼 '리더 인스턴스'도 연결을 하려면 똑같이 해주면 된다.

     

    엔드포인트를 통해서 읽기 인스턴스에 접속 할 수 있으며 서비스 용도의 애플리케이션에서는 ro 가 붙은 클러스터 읽기 엔드포인트 를 통해 접속해야 한다. 물론 쓰기 인스턴스로 접속을 위해서도 클러스터 쓰기 엔드포인트 로 접속을 해야 한다.

    그래야 장애나 기타 문제가 발생하여 페일오버 되어 읽기 인스턴스가 기본 인스턴스로 승격이 되었을 경우 접속 주소의 변경 없이 그대로 사용할 수 있다.

     

     

    성공적으로 연결이 된 것을 확인할 수 있다.

     

     

     

    자, 이렇게 읽기 전용 복제본(Reader Instance)도 생성했고, Intellij Database Tool(BI)에 연동까지 완료 했다.

    다음 포스팅에선 Spring Boot ReplicationRouting Configuration을 구성하여 Read-Write 분산처리를 할 것이다.

     

     

     

     

     

    Reference:
    - https://aws.amazon.com/ko/premiumsupport/knowledge-center/rds-connect-using-bastion-host-linux/

    - https://hoing.io/archives/24483

    반응형

    댓글

Designed by Tistory.