[섹션 3] 관계형 데이터베이스 서비스 구성
● 개요
: 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)