Post

[Cloud] RDS(Relational Database Service)์˜ ์ดํ•ด

๐Ÿ“Œ ๋“ค์–ด๊ฐ€๋ฉฐ

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” AWS์˜ RDS(Relational Database Service)๋ฅผ ์ •๋ฆฌํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์ŠคยทDBMS ๊ธฐ๋ณธ ๊ฐœ๋…๋ถ€ํ„ฐ, RDS๊ฐ€ ๋Œ€์‹  ๊ด€๋ฆฌํ•ด์ฃผ๋Š” ๊ฒƒ๋“ค, ์ง€์› ์—”์ง„, ๊ทธ๋ฆฌ๊ณ  Multi-AZ DB๋ฅผ ๋งŒ๋“ค์–ด ์žฅ์•  ์กฐ์น˜(Failover)๋ฅผ ํ™•์ธํ•˜๋Š” Lab๊นŒ์ง€ ๋‹ค๋ฃฌ๋‹ค.

RDS๋ž€? ํด๋ผ์šฐ๋“œ์—์„œ ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‰ฝ๊ฒŒ ์„ค์ •ยท์šด์˜ยทํ™•์žฅํ•˜๋„๋ก AWS๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค(PaaS). ํ•˜๋“œ์›จ์–ด ํ”„๋กœ๋น„์ €๋‹, SW ์„ค์น˜ยทํŒจ์น˜, ์Šคํ† ๋ฆฌ์ง€ ๊ด€๋ฆฌ, ๋ฐฑ์—…, ๊ณ ๊ฐ€์šฉ์„ฑ์„ AWS๊ฐ€ ๋Œ€์‹  ์ฒ˜๋ฆฌํ•œ๋‹ค.


1. DB / DBMS / RDS ๊ฐœ๋… ์ •๋ฆฌ

์šฉ์–ด์ •์˜
๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(DB)๊ณต์œ  ๋ชฉ์ ์œผ๋กœ ์ฒด๊ณ„ํ™”ยทํ†ตํ•ฉํ•ด ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ ์ง‘ํ•ฉ
๊ด€๊ณ„ํ˜• DB(RDB)๋ฐ์ดํ„ฐ๋ฅผ ํ–‰ยท์—ด์˜ ํ…Œ์ด๋ธ”๋กœ ์ €์žฅ, ์‚ฌ์ „ ์ •์˜๋œ ๊ด€๊ณ„๋กœ ๊ตฌ์„ฑ
DBMS์‚ฌ์šฉ์ž์™€ DB ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑยท์ˆ˜์ •ยท์‚ญ์ œยท๊ฒ€์ƒ‰ํ•˜๋Š” ๊ด€๋ฆฌ SW
RDS๊ด€๊ณ„ํ˜• DB๋ฅผ ๊ด€๋ฆฌํ˜•์œผ๋กœ ์ œ๊ณตํ•˜๋Š” AWS ์„œ๋น„์Šค

2. ๊ด€๋ฆฌํ˜• ์„œ๋น„์Šค์˜ ์ฑ…์ž„ ๋ถ„๋‹ด

RDS์˜ ํ•ต์‹ฌ ๊ฐ€์น˜๋Š” ๊ด€๋ฆฌ ๋ถ€๋‹ด์„ AWS๋กœ ๋„˜๊ธฐ๋Š” ๊ฒƒ์ด๋‹ค. ์‚ฌ์šฉ์ž๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ตœ์ ํ™”์—๋งŒ ์ง‘์ค‘ํ•œ๋‹ค.

์‚ฌ์šฉ์ž๊ฐ€ ๊ด€๋ฆฌAWS๊ฐ€ ๊ด€๋ฆฌ
์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ตœ์ ํ™”OS ์„ค์น˜ยทํŒจ์น˜, DB SW ์„ค์น˜ยทํŒจ์น˜
ย ๋ฐฑ์—…, ๊ณ ๊ฐ€์šฉ์„ฑ, ๊ทœ๋ชจ ์กฐ์ •
ย ์ „๋ ฅยท์„œ๋ฒ„ ๋ž™ํ‚น, ์„œ๋ฒ„ ์œ ์ง€๊ด€๋ฆฌ

์˜จํ”„๋ ˆ๋ฏธ์Šค โ†’ RDS

๐Ÿ’ก ์˜จํ”„๋ ˆ๋ฏธ์Šค์—์„œ๋Š” OSยทDB ์„ค์น˜, ๋ฐฑ์—…, ์ด์ค‘ํ™”๊นŒ์ง€ ์ „๋ถ€ ์ง์ ‘ ํ•ด์•ผ ํ–ˆ๋‹ค. RDS๋Š” ์ด โ€œ์šด์˜์˜ ๋ฌด๊ฑฐ์šด ๋ถ€๋ถ„โ€์„ AWS๊ฐ€ ๋งก์•„, ๊ฐœ๋ฐœ์ž๊ฐ€ DBA ์ž‘์—… ์‹œ๊ฐ„์„ ์ค„์ด๊ณ  ๋น„์ฆˆ๋‹ˆ์Šค์— ์ง‘์ค‘ํ•˜๊ฒŒ ํ•œ๋‹ค.


3. RDS ์ง€์› ์—”์ง„ & ๊ตฌ์„ฑ ์š”์†Œ

์ง€์› ์—”์ง„: MySQL ยท PostgreSQL ยท Oracle ยท SQL Server ยท MariaDB ยท Amazon Aurora(AWS ์ž์ฒด ์—”์ง„, MySQL/PostgreSQL ํ˜ธํ™˜ยท๊ณ ์„ฑ๋Šฅ).

๊ตฌ์„ฑ ์ •๋ณด:

๊ตฌ์„ฑ ์š”์†Œ์—ญํ• 
์„œ๋ธŒ๋„ท ๊ทธ๋ฃนRDS๊ฐ€ ์‚ฌ์šฉํ•  ์„œ๋ธŒ๋„ทยทIP ๋ฒ”์œ„ ์ง€์ •
ํŒŒ๋ผ๋ฏธํ„ฐ ๊ทธ๋ฃนDB ์ž‘๋™ ๋ฐฉ์‹์„ ์ •์˜ํ•˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜
์˜ต์…˜ ๊ทธ๋ฃน๋ฐฑ์—…ยท๋ชจ๋‹ˆํ„ฐ๋ง ๋“ฑ ๊ณ ๊ธ‰ ์˜ต์…˜

์—”๋“œํฌ์ธํŠธ ํ˜•์‹: <rds-name>-mysql.<์‹๋ณ„์ž>.<๋ฆฌ์ „>.rds.amazonaws.com


4. Lab โ€” Multi-AZ RDS ์ƒ์„ฑ & Failover

ํ”„๋ผ์ด๋น— ์„œ๋ธŒ๋„ท์— Multi-AZ RDS๋ฅผ ๋‘๊ณ , ํผ๋ธ”๋ฆญ ์„œ๋ธŒ๋„ท ์›น ์„œ๋ฒ„๊ฐ€ ์ ‘์†ํ•˜๋Š” ๊ตฌ์„ฑ์ด๋‹ค.

flowchart TD
    User(("๐ŸŒ ์‚ฌ์šฉ์ž"))
    subgraph VPC["lab-vpc"]
        Web["๐Ÿ’ป Web Server<br/>(ํผ๋ธ”๋ฆญ, web-sg)"]
        subgraph Priv["ํ”„๋ผ์ด๋น— ์„œ๋ธŒ๋„ท (2a/2c)"]
            P[("๐Ÿ—„๏ธ RDS Primary")]
            S[("๐Ÿ—„๏ธ RDS Standby")]
        end
    end
    User --> Web
    Web -- "3306" --> P
    P -. ๋™๊ธฐ ๋ณต์ œ .-> S

์ธํ”„๋ผ ์•„ํ‚คํ…์ฒ˜

Task 1 โ€” ๋ณด์•ˆ ๊ทธ๋ฃน

๊ทธ๋ฃน์ธ๋ฐ”์šด๋“œ
web-sgHTTPยทSSH โ† anywhere
rds-sgMySQL 3306 โ† web-sg

Task 2 โ€” ์„œ๋ธŒ๋„ท/ํŒŒ๋ผ๋ฏธํ„ฐ/์˜ต์…˜ ๊ทธ๋ฃน

  • ์„œ๋ธŒ๋„ท ๊ทธ๋ฃน lab-rdb-subnetgroup: ํ”„๋ผ์ด๋น— 2a(10.0.2.0/24)ยท2c(10.0.3.0/24)
  • ํŒŒ๋ผ๋ฏธํ„ฐ ๊ทธ๋ฃน lab-rdb-parm-group: MySQL Community, mysql8.0
  • ์˜ต์…˜ ๊ทธ๋ฃน lab-rdb-options-group: mysql 8.0

Task 3 โ€” RDS ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ

ํ‘œ์ค€ ์ƒ์„ฑ, ์—”์ง„ MySQL 8.0.39, ๋ฐฐํฌ๋Š” ๋‹ค์ค‘ AZ DB ์ธ์Šคํ„ด์Šค๋กœ ํ•œ๋‹ค.

ํ•ญ๋ชฉ๊ฐ’
์‹๋ณ„์žlab-rds
๋งˆ์Šคํ„ฐ ์‚ฌ์šฉ์žmaster / master-password
์ธ์Šคํ„ด์Šค ํด๋ž˜์Šคt3.micro
์Šคํ† ๋ฆฌ์ง€gp3 20GB
ํผ๋ธ”๋ฆญ ์•ก์„ธ์Šค์•„๋‹ˆ์˜ค
๋ณด์•ˆ ๊ทธ๋ฃนrds-sg (3306)
์ดˆ๊ธฐ DBlabdb

ํ”„๋กœ๋•์…˜ vs ๊ฐœ๋ฐœ/ํ…Œ์ŠคํŠธ ํ…œํ”Œ๋ฆฟ:

ํ•ญ๋ชฉํ”„๋กœ๋•์…˜๊ฐœ๋ฐœ/ํ…Œ์ŠคํŠธ
Multi-AZ๊ถŒ์žฅ(์ž๋™ ์žฅ์•  ์กฐ์น˜)์„ ํƒ(๋น„์šฉ ์ ˆ๊ฐ)
๋ฐฑ์—…/๋ชจ๋‹ˆํ„ฐ๋งํ™œ์„ฑํ™”ํ•„์š” ์‹œ
๋น„์šฉ์ƒ๋Œ€์  ๋†’์Œ์ ˆ๊ฐ ๊ฐ€๋Šฅ

โš ๏ธ ํผ๋ธ”๋ฆญ ์•ก์„ธ์Šค๋Š” โ€˜์•„๋‹ˆ์˜คโ€™๋กœ ๋‘์–ด DB๋ฅผ ์ธํ„ฐ๋„ท์— ๋…ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค. ์›น ์„œ๋ฒ„(web-sg)์—์„œ ์˜ค๋Š” 3306๋งŒ ํ—ˆ์šฉํ•ด, DB๋Š” ํ”„๋ผ์ด๋น—ํ•˜๊ฒŒ ์œ ์ง€ํ•œ๋‹ค.

Task 4 โ€” ์›น ์„œ๋ฒ„ (์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ)

ํผ๋ธ”๋ฆญ ์„œ๋ธŒ๋„ท์— ์›น ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ค๊ณ , PHPยทMariaDB ํด๋ผ์ด์–ธํŠธ๋ฅผ ์„ค์น˜ํ•ด RDS ์—ฐ๋™์šฉ ์•ฑ์„ ๋ฐฐํฌํ•œ๋‹ค.

1
2
3
4
5
6
7
8
#!/bin/bash -ex
dnf update
dnf install httpd php php-mysqlnd php-fpm php-json mariadb105 -y
systemctl enable --now httpd
cd /var/www/html/
wget https://aws-largeobjects.s3.ap-northeast-2.amazonaws.com/AWS-AcademyACF/lab7-app-php7.zip
unzip lab7-app-php7.zip -d /var/www/html/
chown apache:root /var/www/html/rds.conf.php

Task 5 โ€” Failover ํ™•์ธ (ํ•ต์‹ฌ)

์›น ํŽ˜์ด์ง€์— DB ์ •๋ณด(์—”๋“œํฌ์ธํŠธยทlabdbยทmaster)๋ฅผ ์ž…๋ ฅํ•ด ์—ฐ๋™ํ•œ ๋’ค, ์žฌ๋ถ€ํŒ…(์žฅ์•  ์กฐ์น˜)์œผ๋กœ Standby๋กœ ๋„˜์–ด๊ฐ€๋Š”์ง€ nslookup์œผ๋กœ ํ™•์ธํ•œ๋‹ค.

DB ์—ฐ๋™

1
2
3
4
5
6
7
8
9
# ์žฅ์•  ์กฐ์น˜ ์ „: Primary IP
$ nslookup <rds_Endpoint>
Address: 10.0.3.XX

# lab-rds โ†’ ์ˆ˜์ • โ†’ ์žฌ๋ถ€ํŒ…(์žฅ์•  ์กฐ์น˜๋กœ ์žฌ๋ถ€ํŒ…)

# ์žฅ์•  ์กฐ์น˜ ํ›„: ์—”๋“œํฌ์ธํŠธ๋Š” ๊ทธ๋Œ€๋กœ์ธ๋ฐ IP๋งŒ ๋ฐ”๋€œ(Standby๋กœ ์ „ํ™˜)
$ nslookup <rds_Endpoint>
Address: 10.0.2.41

Failover ์žฌ๋ถ€ํŒ…

๐Ÿ’ก Multi-AZ Failover์˜ ๋งˆ๋ฒ• โ€” ์žฅ์• ๊ฐ€ ๋‚˜๋„ ์—”๋“œํฌ์ธํŠธ(๋„๋ฉ”์ธ)๋Š” ๊ทธ๋Œ€๋กœ์ด๊ณ , ๋’ค์—์„œ ๊ฐ€๋ฆฌํ‚ค๋Š” IP๋งŒ Standby๋กœ ๋ฐ”๋€๋‹ค. ๊ทธ๋ž˜์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ ‘์† ์ฃผ์†Œ๋ฅผ ๋ฐ”๊ฟ€ ํ•„์š” ์—†์ด ์ž๋™์œผ๋กœ ๋Œ€๊ธฐ ์ธ์Šคํ„ด์Šค์— ์—ฐ๊ฒฐ๋œ๋‹ค. ์ด๊ฒƒ์ด ๊ณ ๊ฐ€์šฉ์„ฑ์˜ ํ•ต์‹ฌ์ด๋‹ค.

์‹ค์Šต ํ›„ DB โ†’ ์„œ๋ธŒ๋„ท/ํŒŒ๋ผ๋ฏธํ„ฐ/์˜ต์…˜ ๊ทธ๋ฃน โ†’ ์ธ์Šคํ„ด์Šค โ†’ ๋ณด์•ˆ ๊ทธ๋ฃน ์ˆœ์œผ๋กœ ์‚ญ์ œํ•œ๋‹ค.


๐Ÿ“ ์ •๋ฆฌ

1
2
3
4
5
RDS
โ”œโ”€ ๊ฐœ๋…   ๊ด€๋ฆฌํ˜• ๊ด€๊ณ„ํ˜• DB(PaaS)
โ”œโ”€ ์ฑ…์ž„   ์•ฑ์€ ์‚ฌ์šฉ์ž, ๋‚˜๋จธ์ง€(OSยทํŒจ์น˜ยท๋ฐฑ์—…ยทHA)๋Š” AWS
โ”œโ”€ ๊ตฌ์„ฑ   ์„œ๋ธŒ๋„ท/ํŒŒ๋ผ๋ฏธํ„ฐ/์˜ต์…˜ ๊ทธ๋ฃน + ์ธ์Šคํ„ด์Šค
โ””โ”€ HA     Multi-AZ โ†’ Failover ์‹œ ์—”๋“œํฌ์ธํŠธ ์œ ์ง€, IP๋งŒ ์ „ํ™˜
๊ฐœ๋…ํ•œ ์ค„ ์ •์˜
RDS๊ด€๋ฆฌํ˜• ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค
Multi-AZ๋Œ€๊ธฐ ์ธ์Šคํ„ด์Šค๋กœ ์ž๋™ ์žฅ์•  ์กฐ์น˜
์—”๋“œํฌ์ธํŠธFailover ํ›„์—๋„ ์œ ์ง€๋˜๋Š” ์ ‘์† ์ฃผ์†Œ

RDS์˜ ํ•ต์‹ฌ์€ DB ์šด์˜์„ AWS์— ๋งก๊ธฐ๊ณ , Multi-AZ๋กœ ์žฅ์• ์— ๋Œ€๋น„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. Failover ์‹œ ์—”๋“œํฌ์ธํŠธ๊ฐ€ ์œ ์ง€๋œ๋‹ค๋Š” ์  ๋•๋ถ„์—, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ˆ˜์ • ์—†์ด ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.