NLB를 이용하여 RDS의 부하 분산을 실시한다.

소개



마스터가 되는 RDS의 부하가 올라오면, 우선은 리드 레플리카를 작성해 분산한다고 생각합니다.
대부분의 경우는 리드 액세스에 의한 부하가 높아지므로, 그 리드 복제본에서도 다루기가 어려워지는 것 같으면 다른 하나 늘릴 필요가 있을 것입니다.
그 경우, RDS라면 리드 레플리카 마다 엔드 포인트가 생겨 버립니다.
하지만 NLB로 리드 레플리카를 묶는 것으로, 1개의 엔드 포인트로 부하 분산을 실시할 수 있습니다.

전제



이번에는 아래 그림과 같은 구성을 만듭니다.



또, 전제로서 EC2 인스턴스와 RDS2대는 준비한 상태로 시작합니다.

NLB 만들기



대상 그룹 만들기



먼저 대상 그룹을 만듭니다.
EC2 > 로드 밴 런 시그 > 타겟 그룹에서 타겟을 생성합니다.



여기서의 포인트는 「타겟의 종류」를 ip 로 하는 것입니다.
그렇다고 하는 것은, 인스턴스로 해 버리면 타겟의 추가를 EC2 밖에 할 수 없기 때문입니다.

만들면 다음은 대상 추가입니다.

타겟 추가



먼저 RDS 엔드포인트에서 IP를 조사합니다.

IP 확인 1
$ host koh3i-01.cmhex6vatlc7.ap-northeast-1.rds.amazonaws.com
koh3i-01.cmhex6vatlc7.ap-northeast-1.rds.amazonaws.com has address 10.0.1.114

IP 확인 2
$ host koh3i-02.cmhex6vatlc7.ap-northeast-1.rds.amazonaws.com
koh3i-02.cmhex6vatlc7.ap-northeast-1.rds.amazonaws.com has address 10.0.2.222

IP를 알면 다음과 같이 대상을 추가합니다.



로드 밸런서 만들기


  • 로드 밸런서 유형 선택

  • EC2 > 로드 밸런서 > 로드 밸런서에서 로드 밸런서 생성을 클릭하여 Network Load Balancer를 생성합니다.



    1단계: 로드 밸런서 설정





    RDS의 부하 분산이므로 내부 트래픽 만 있기 때문에 스키마를 내부로 만듭니다.



    설정이 끝나고 잠시 후 healthy가 될 것입니다.



    그러면 등록 완료입니다.
    만약 건강이 안 된다면 보안 그룹을 확인해 보십시오.
    RDS에 부여된 보안 그룹은 NLB가 사용하는 서브넷의 사용 권한을 포함하지 않아야 합니다.

    max_connect_errors 설정



    Amazon RDS > 파라미터 그룹에서 RDS에서 사용하는 파라미터 그룹을 선택하고 파라미터 그룹 작업을 편집합니다.
  • 변경 내용
  • max_connect_errors の値を 18446744073709547520 へ変更。
    

    이 파라미터는 재기동 불필요하므로 설정하자마자 반영됩니다.

    연결 확인



    그럼 연결해 보겠습니다.

    mysql
    $ mysql -hNLB4RDS-a3b3aefb0002a0e2.elb.ap-northeast-1.amazonaws.com -uroot -phogehogehoge
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 2249
    Server version: 5.6.37 MySQL Community Server (GPL)
    
    Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> 
    

    안전하게 연결할 수있었습니다.

    또한 max_connect_errors를 설정하지 않으면,

    error
    $ mysql -hNLB4RDS-a3b3aefb0002a0e2.elb.ap-northeast-1.amazonaws.com -uroot -phogehogehoge
    ERROR 1129 (HY000): Host '10.0.2.59' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
    

    연결이 차단됩니다.
    이것은 NLB가 실시하는 헬스 체크의 원인으로 RDS측은 부정 접속되어 있다고 판단해 버리기 때문입니다.

    포인트



    이번 포인트는 보안 그룹과 파라미터 그룹입니다.
    1. 보안 그룹 설정에서 NLB에서 RDS에 대한 상태 확인을 허용합니다.
    2. 파라미터 그룹 설정에서 상태 확인 액세스로 차단되지 않도록 max_connect_errors 를 조정합니다.

    결론



    이 솔루션을 통해 리드 부하를 "RDS를 정렬하여 완화"할 수 있습니다.
    하지만 가능하면 Aurora를 사용하는 것이 좋다고 생각합니다.

    좋은 웹페이지 즐겨찾기