여러가지/Docker & AWS

[섹션 3] 관계형 데이터베이스 서비스 구성

15June 2023. 11. 24. 14:25

● 개요

: MySQL 데이터베이스를 복수의 가용영역에 이중화로 구성하고 Linux 기반의 가상 서버와 MySQL 데이터베이스를 연결

 

 

● 서비스

- Amazon RDS

 

 

● 다이어그램 아키텍처

 

RDS - 복수의 가용영역에 RDS가 존재하면 자동적으로 하나는 Master, 하나는 Standby로 할당된다.

Read Replica RDS: Master DB와 연동되어 DB 상의 변동 내용 실시간 업데이트

 

 

● 구현 순서

 

ㄱ. Amazon RDS를 통한 MySQL 데이터베이스 이중화(Multi-AZ) 구성

1) RDS 용 Securtiy Group 생성

2) Subnet Group 생성

3) 복수의 가용영역에 MySQL 데이터베이스 생성 (Multi-AZ Deployment)

- DB Engine

- DB Instance

- Storage

- Availability & Durability

- Connectivity

- Authentication

- Backup

...

4) 데이터베이스 정보 확인

 

ㄴ. 웹 서버와 데이터베이스 인스턴스 연결

1) EC2-데이터베이스 연결을 위한 정보 구성

- Endpoint

- Master user

- Master password

...

2) 데이터베이스 접속

3) 테이블 생성 및 데이터 입력

4) 웹 브라우저를 통해 데이터베이스 연결 테스트

 

ㄷ. 데이터베이스의 Read Replica 생성 및 웹 서버 연결

1) 데이터베이스 Read Replica 생성

2) EC2-Read Replica 데이터베이스 연결

3) 웹 브라우저를 통해 Read Replica 데이터베이스 연결 테스트

4) 원본 데이터베이스 변경 후 웹 브라우저를 통해 Read Replica 반영 테스트

 

ㄹ. Failover을 통한 데이터베이스 이중화 테스트

1) Master/Standby 데이터베이스 IP 정보 확인

2) Master 데이터베이스 Failover 테스트 (Reboot with Failover)

3) Standby 데이터베이스가 Master 데이터베이스로 변경 확인

4) 웹 브라우저를 통해 데이터베이스 연결 테스트

 

 

● 구현

ㄱ. Amazon RDS를 통한 MySQL 데이터베이스 이중화(Multi-AZ) 구성

1) RDS 용 Securtiy Group 생성

보안 그룹 이름: lab-vpc-rds-sg

-> 10.1.0.0/16 // lab-vpc의 IPv4 CIDR

2) Subnet Group 생성

RDS > 서브넷 그룹 > DB 서브넷 그룹 생성

이름: lab-vpc-rds-subnet-group

3) 복수의 가용영역에 MySQL 데이터베이스 생성 (Multi-AZ Deployment)

- DB Engine

- DB Instance

- Storage

- Availability & Durability

- Connectivity

- Authentication

- Backup

...

엔진 유형: MySQL

[v] 다중 AZ DB 클러스터를 지원하는 버전 표시

템플릿: 개발/테스트

[v] 다중 AZ DB 인스턴스

DB 인스턴스 식별자: lab-vpc-rds

[v] 버스터블 클래스

DB 인스턴스 클래스: db.t2.micro

할당된 스토리지: 20

[ ] 스토리지 자동 조정 활성화

[ ] Enhanced 모니터링 활성화

초기 데이터베이스 이름: labvpcrds

[v] 일반 로그

4) 데이터베이스 정보 확인

-> 엔드포인트를 사용하여 데이터베이스와 엑세스하고 인스턴스와 통신한다.

-> 가용 영역  // Master DB 위치

-> 다중 AZ: 예

-> 보조 영역: ap-northeast-2a  // Standby DB 위치

EC2 > 네트워크 인터페이스

 

ㄴ. 웹 서버와 데이터베이스 인스턴스 연결

(EC2 > 로드밸런서 > lab-vpc-alb-private)

-> MySQL에 접근 안됨

 

1) EC2-데이터베이스 연결을 위한 정보 구성

- Endpoint

- Master user

- Master password

...

(public-ec2-a1을 통해 private-ec2-a1에 접속)

> cd /var/www/html

> vi dbinfo.inc

<?php

define('DB_SERVER', 'db_instance_endpoint');
define('DB_USERNAME', 'admin');
define('DB_PASSWORD', 'master password');
define('DB_DATABASE', 'sample');

?>

-> db_instance_endpoint  // RDS > 엔드포인트

-> master password  // RDS

-> sample // RDS 이름 - 없이 (생성된 데이터베이스의 이름)

(+) public-ec2-a1을 통해 private-ec2-c1에 접속하여 동일 작업

2) 웹 브라우저를 통해 데이터베이스 연결 테스트

3) 데이터베이스 접속

(public-ec2-a1을 통해 private-ec2-a1에 접속)

> mysql -h <-RDS Endpoint-> -P 3306 -u admin -p  // RDS Endpoint로 private-ec2-a1에서 데이터베이스 접속

4) 테이블 생성 및 데이터 입력

> show databases;  // 데이터베이스 목록 보기
> use labvpcrds;  // 데이터베이스(labvpcrds) 사용하기
> CREATE TABLE SAMPLE (
ID INT(11) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
NAME VARCHAR(45),
ADDRESS VARCHAR(90)
);  // 테이블(SAMPLE) 만들기

> show tables;  // 생성된 테이블 확인하기
> INSERT INTO SAMPLE (NAME, ADDRESS) VALUES ('KIM', 'SEOUL');  // 테이블에 데이터 입력하기

> SELECT * FROM SAMPLE;  // 테이블 데이터 보기(전체)

5) 웹 브라우저를 통해 데이터베이스 연결 테스트

=> public-ec2-a1을 통해 private-ec2-c1에 접속하여 확인하면 public-ec2-a1을 통해 private-ec2-a1에서 생성한 테이블과 입력한 데이터가 저장 되어있는 것을 확인할 수 있다. 마찬가지로 public-ec2-a1을 통해 private-ec2-c1에서 테이블을 생성하고 데이터를 입력하면 마찬가지로 추가되어 웹 브라우저를 통해 확인 가능하다.

 

ㄷ. 데이터베이스의 Read Replica 생성 및 웹 서버 연결

1) 데이터베이스 Read Replica 생성

RDS > 데이터베이스 > lab-vpc-rds > 작업 > 읽기 전용 복제본 생성

DB 인스턴스 식별자: lab-vpc-rds-rr

[v] 스토리지 자동 조정 활성화

[v] 단일 DB 인스턴스

가용 영역: ap-northeast-2c

2) EC2-Read Replica 데이터베이스 연결

(public-ec2-a1을 통해 private-ec2-a1에 접속)

> cd /var/www/html

> vi dbinfo.inc

<?php

define('DB_SERVER', 'db_instance_endpoint');
define('DB_USERNAME', 'admin');
define('DB_PASSWORD', 'master password');
define('DB_DATABASE', 'sample');

?>

-> db_instance_endpoint  // Replica 데이터베이스의 RDS 엔드포인트로 변경

(+) public-ec2-a1을 통해 private-ec2-c1 접속하여 같은 작업

3) 웹 브라우저를 통해 Read Replica 데이터베이스 연결 테스트 (로드밸런서 lab-vpc-alb-private DNS)

4) 원본 데이터베이스 변경 후 웹 브라우저를 통해 Read Replica 반영 테스트

> mysql -h <-RDS Endpoint-> -P 3306 -u admin -p  // RDS Endpoint로 private-ec2-a1에서 원본 데이터베이스 접속

 

ㄹ. Failover을 통한 데이터베이스 이중화 테스트

1) Master/Standby 데이터베이스 IP 정보 확인

(public-ec2-a1)

> dig <-원본 데이터 베이스 엔드포인트->

Master: 10.1.6.189

// 네트워크 인터페이스의 프라이빗 IPv4 주소로 확인

읽기 전용: 10.1.6.248

Standby: 10.1.5.45

2) Master 데이터베이스 Failover 테스트 (Reboot with Failover)

RDS > 원본 데이터베이스 > 작업 > 재부팅

3) Standby 데이터베이스가 Master 데이터베이스로 변경 확인

(public-ec2-a1)

> dig <-원본 데이터 베이스 엔드포인트->

Master: 10.1.5.45

4) 웹 브라우저를 통해 데이터베이스 연결 테스트

(로드밸런서 lab-vpc-alb-private DNS)