Ncloud Classic 환경에서 Cloud DB for MySQL 서버의 읽기 부하를 로드밸런서로 분산시키는 방법입니다

개요

MySQL DB서버의 부하를 줄이기 위해 보통 읽기 전용 DB서버를 생성하게 되는데, 읽기 전용 서버를 여러대 생성해서 로드밸런서(Load Balancer)로 연결하면 읽기 부하를 분산 시키고 좀 더 안정적인 서비스가 가능해집니다.

여기서는 Ncloud (네이버 클라우드) Classic 환경에서 관리형 DB인 Cloud DB for MySQL의 읽기 전용 Slave DB를 로드밸런서에 연결하고 제대로 부하가 분산되는지 확인해보겠습니다.

사전 준비

DB 접속과 부하 분산을 테스트할 서버가 필요합니다. 여기서는 CentOS 7.8 서버를 준비했습니다.

DB 서버 생성

우선 [Cloud DB for MySQL] - [DB Server]에서 DB를 생성합니다.

서버 설정

서버 설정에서 중요한 부분은 [고가용성 지원] 항목입니다. Slave DB를 추가하기 위해서는 [고가용성 지원] 항목을 체크해야 합니다. 혹시 고가용성 지원 없이 서버를 생성했을 경우 이후에 [고가용성 지원]을 설정하면 문제 없이 Slave DB를 추가할 수 있습니다.

Ncloud Classic 환경에서 Cloud DB for MySQL 디비의 읽기 부하를 로드밸런서로 분산시키는 방법

DB 설정

그 외 필요한 DB 설정을 입력합니다. 여기서 Backup 설정은 고가용성을 선택했을 경우 자동으로 사용하도록 설정됩니다.

Ncloud Classic 환경에서 Cloud DB for MySQL 디비의 읽기 부하를 로드밸런서로 분산시키는 방법

Slave DB 추가

DB 서버 생성이 완료되면 아래와 같이 [Master], [Standy Master] 2대의 서버가 생성된 것을 확인할 수 있습니다.
Master 서버를 선택하고 [DB 관리] 메뉴에서 [Slave 추가]를 선택합니다.

Ncloud Classic 환경에서 Cloud DB for MySQL 디비의 읽기 부하를 로드밸런서로 분산시키는 방법

Slave DB 정보

Slave DB 서버 추가 팝업에서는 특별히 수정할 부분 없이 [예] 버튼을 클릭하면 추가 됩니다.

Slave DB Server는 Master DB Server와 동일한 스펙 (DB Server 타입, 스토리지 타입, 스토리지 용량)및 DB Config 설정으로 생성됩니다. Slave DB Server 역시 Master DB Server와 동일한 요금이 청구되며, 사용한 시간으로 과금됩니다.
Ncloud Classic 환경에서 Cloud DB for MySQL 디비의 읽기 부하를 로드밸런서로 분산시키는 방법

생성 완료

Slave DB를 1대 생성했으면 동일한 방법으로 하나 더 생성합니다. 여기서는 [test-003], [test-004]라는 이름으로 생성되었습니다.

Ncloud Classic 환경에서 Cloud DB for MySQL 디비의 읽기 부하를 로드밸런서로 분산시키는 방법

ACG 설정

다음으로 방화벽 ACG를 미리 설정해야 하는데, Master DB를 선택하고 아래쪽에 있는 [ACG] 항목을 클릭합니다.

Ncloud Classic 환경에서 Cloud DB for MySQL 디비의 읽기 부하를 로드밸런서로 분산시키는 방법

ACG 리스트에서 Cloud DB를 생성할때 자동으로 생성된 [cloud-db-OOOO]라는 이름의 ACG를 선택하고 [ACG 설정] 버튼을 클릭합니다.

Ncloud Classic 환경에서 Cloud DB for MySQL 디비의 읽기 부하를 로드밸런서로 분산시키는 방법

규칙 설정

ACG에 설정이 필요한 규칙은 2가지입니다.

  • 부하 분산을 위한 Load Balancer -> Cloud DB for MySQL로 접근을 허용하는 규칙
  • 테스트를 위한 Server -> Cloud DB for MySQL로 접근을 허용하는 규칙

Load Balancer -> Cloud DB for MySQL로 접근을 허용하는 규칙은 Load Balancer 전용 ACG [ncloud-load-balancer]를 [접근 소스] 항목에 추가합니다.

Server -> Cloud DB for MySQL로 접근을 허용하는 규칙은 [접근 소스] 항목에 [Server IP] 또는 [Server에 설정된 ACG]를 입력하면 됩니다.

Ncloud Classic 환경에서 Cloud DB for MySQL 디비의 읽기 부하를 로드밸런서로 분산시키는 방법

Load Balancer 생성

마지막으로 로드밸런서를 생성해야 하는데, 로드밸런서를 생성할 때 Slave DB와 연결하려면 네트워크 항목을 [Private IP]로 설정해야 합니다.
그리고 프로토콜은 TCP, 포트는 3306으로 설정하겠습니다.

Ncloud Classic 환경에서 Cloud DB for MySQL 디비의 읽기 부하를 로드밸런서로 분산시키는 방법

서버 추가

[서버 추가] 화면에는 적용할 서버 리스트에 위에서 생성했던 Slave DB 서버가 나타나는데, 모두 선택하고 오른쪽으로 이동 시킵니다.

Ncloud Classic 환경에서 Cloud DB for MySQL 디비의 읽기 부하를 로드밸런서로 분산시키는 방법

설정에 이상이 없으면 로드밸런서가 생성되고, 적용 서버의 연결 상태가 모두 [성공]으로 나타납니다.

Ncloud Classic 환경에서 Cloud DB for MySQL 디비의 읽기 부하를 로드밸런서로 분산시키는 방법

테스트 서버 설정

읽기 부하가 제대로 분산되는지 테스트 하기 위해 준비된 서버에 [MySQL Client]를 설치합니다.

~# yum -y install mysql
Ncloud Classic 환경에서 Cloud DB for MySQL 디비의 읽기 부하를 로드밸런서로 분산시키는 방법

부하 분산 테스트

설치된 MySQL Client를 이용해서 Load Balancer IP로 접속한 후에 접속한 DB 서버의 호스트명을 확인하는 쿼리를 실행합니다.

여러 차례 반복해보면 아래와 같이 위에서 추가했던 Slave DB [test-003], [test-004]에 각각 접속되는 것을 확인할 수 있습니다.

~# mysql -h {Load Balancer IP} -u {계정} -p
MySQL [(none)]> SELECT @@hostname;

[test-003]에 접속된 상태

Ncloud Classic 환경에서 Cloud DB for MySQL 디비의 읽기 부하를 로드밸런서로 분산시키는 방법

[test-004]에 접속된 상태

Ncloud Classic 환경에서 Cloud DB for MySQL 디비의 읽기 부하를 로드밸런서로 분산시키는 방법

DB 삭제

테스트를 끝낸 DB를 삭제하려고 할 때 [Slave나 Recovery DB 서버가 있는 경우 Master DB를 삭제할 수 없습니다.]라는 메시지가 나타나는 것을 확인할 수 있습니다.

그래서 DB를 삭제할 때는 [Slave DB]부터 삭제해야 하고, [Slave DB]를 삭제할 때에도 동시에 삭제할 수 없고 1대씩 차례로 삭제해야 합니다.

Ncloud Classic 환경에서 Cloud DB for MySQL 디비의 읽기 부하를 로드밸런서로 분산시키는 방법

참고 URL

  1. Ncloud Cloud DB for MySQL 읽기 부하 분산 설정 가이드
  2. VPC 환경 Cloud DB for MySQL 읽기 부하를 네트워크 프록시 로드밸런서로 분산시키는 방법
  3. VPC 환경 Cloud DB for MySQL 읽기 부하를 네트워크 로드밸런서로 분산시키는 방법