Infra/cloud

[AFOS] 6주차 데이터베이스 서비스 - 실습 : RDS

미니문92 2021. 7. 19. 21:34

3. RDS 배포 및  Web과 연동 실습 진행

 

 

RDS(MySQL) 배포 및 연동

1. RDS -> 데이터베이스 생성 클릭 -> 데이터베이스 생성 4분 정도 소요

  • RDS DB1 생성
# 별도 언급이 없는 부분은 기본값 설정
생성 방식 : 표준 생성
엔진 옵션 : MySQL
템플릿 : 프리 티어
DB 인스턴스 식별자 : beas1 (현재 AWS 리전에서 AWS 계정이 소유하는 모든 DB 인스턴스에 대해 유일, 각자 편하게 설정)
마스터 사용자 이름 : root
마스터 암호(암호확인) : qwe12345
DB 인스턴스 클래스 : 버스터블 클래스(t 클래스 포함) db.t2.micro
VPC : DB-VPC1 퍼블릭 액세스 가능 : 아니요
VPC 보안 그룹 : ##-VPC1SG3-## 포함된것 선택 , 기본 default 는 제거
가용 영역 : ap-northeast-2a
추가 구성 : 클릭
 - 초기 데이터베이스 이름 : sample
 - DB 파라미터 그룹 : ##-mydbparametergroup-## 포함된것 선택
 - 백업 보존 기간 : 0일
 - 유지 관리 기간 : 선택 기간 → 일요일 , 01 :00 , 0.5시간
  • RDS DB2 생성
# 별도 언급이 없는 부분은 기본값 설정
생성 방식 : 표준 생성
엔진 옵션 : MySQL
템플릿 : 개발/테스트
DB 인스턴스 식별자 : minimun (현재 AWS 리전에서 AWS 계정이 소유하는 모든 DB 인스턴스에 대해 유일, 각자 편하게 설정)
마스터 사용자 이름 : root
마스터 암호(암호확인) : qwe12345
DB 인스턴스 클래스 : 버스터블 클래스(t 클래스 포함) db.t2.micro (이전 세대 클래스 포함 체크)
다중 AZ 배포 : 대기 인스턴스 생성
VPC : DB-VPC1
퍼블릭 액세스 가능 : 아니요
VPC 보안 그룹 : ##-VPC1SG3-## 포함된것 선택 , 기본 default 는 제거
추가 구성 : 클릭
 - 초기 데이터베이스 이름 : sample
 - DB 파라미터 그룹 : ##-mydbparametergroup-## 포함된것 선택
 - 백업 보존 기간 : 35일
 - Enhanced 모니터링 활성화 (Uncheck)

=> 생성 후 연결 & 보안 탭 메뉴에 엔드포인트(접속 주소) 메모

 

=> 생성 후 구성 탭 메뉴에 다중 AZ와 보조 영역 확인

 

2. WebSrv SSH 접속 후 RDS 확인

# 변수 지정
[ec2-user@WebSrv ~]$ RDS1=mym-dbtest1.cuzxdyerai8i.ap-northeast-2.rds.amazonaws.com
[ec2-user@WebSrv ~]$ RDS2=mym-dbtest2.cuzxdyerai8i.ap-northeast-2.rds.amazonaws.com
[ec2-user@WebSrv ~]$ echo $RDS1
mym-dbtest1.cuzxdyerai8i.ap-northeast-2.rds.amazonaws.com
[ec2-user@WebSrv ~]$ echo $RDS2
mym-dbtest2.cuzxdyerai8i.ap-northeast-2.rds.amazonaws.com

# dig 질의
[ec2-user@WebSrv ~]$ dig +short $RDS1
10.1.3.102
[ec2-user@WebSrv ~]$ dig +short $RDS2
10.1.4.211

# mysql 접속
[ec2-user@WebSrv ~]$ mysql -h $RDS1 -uroot -pqwe12345
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 16
Server version: 8.0.23 Source distribution

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]> status;
--------------
mysql  Ver 15.1 Distrib 5.5.68-MariaDB, for Linux (x86_64) using readline 5.1

Connection id:          16
Current database:
Current user:           root@10.1.1.10
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server:                 MySQL
Server version:         8.0.23 Source distribution
Protocol version:       10
Connection:             mym-dbtest1.cuzxdyerai8i.ap-northeast-2.rds.amazonaws.com via TCP/IP
Server characterset:    utf8
Db     characterset:    utf8
Client characterset:    utf8
Conn.  characterset:    utf8
TCP port:               3306
Uptime:                 31 min 22 sec

Threads: 3  Questions: 1326  Slow queries: 0  Opens: 157  Flush tables: 3  Open tables: 76  Queries per second avg: 0.704
--------------

MySQL [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sample             |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

 

3. WebSrv 의 index.php 수정 후 WebSrv에서 AWS RDS1 DB 사용

# 상태정보 및 데이터베이스 확인
vim /var/www/html/index.php

# 아래 DB 주소와 암호를 변경
nano /var/www/html/index.php
<?php
define('DB_SERVER', 'mym-dbtest1.cuzxdyerai8i.ap-northeast-2.rds.amazonaws.com');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', 'qwe12345');
define('DB_DATABASE', 'sample');
?>

서버 주소 변경
데이터 입력 전

HTTP://WebEC2_PublicIP/ 접속 → 이후 이름,주소 추가

데이터 입력 후

  • 테이블 직접 생성 및 데이터(레코드)생성

 

 


RDS Multi-AZ 실습 진행(1번 RDS)

1. 백업(0일) 미사용 상태에서 '읽기 복제본 생성' 불가능 상태

2. DB수정 → '다중 AZ 배포' (대기 인스턴스 생성)클릭, 백업(35일) → 계속 → 즉시 적용 → DB 인스턴스 수정 클릭 ⇒ 17분 정도 시간 소요

다중 AZ가 '예' 로 변경된 것을 확인할 수 있음

 

 


RDS Multi-AZ 실습 진행(2번 RDS)

# 상태정보 및 데이터베이스 확인
vim /var/www/html/index.php

# 아래 2번 DB 주소와 암호를 변경
nano /var/www/html/index.php
<?php
define('DB_SERVER', 'mym-dbtest2.cuzxdyerai8i.ap-northeast-2.rds.amazonaws.com');
define('DB_USERNAME', 'root');
define('DB_PASSWORD', 'qwe12345');
define('DB_DATABASE', 'sample');
?>
HTTP://WebEC2_PublicIP/ 접속 → 이후 이름,주소 추가

데이터 입력 후 테이블 변경 확인

  • WebSrv 에서 다음 두 명령어 실행 시키고 db 재부팅
# mysql 접속 후 데이터 확인 반복 → 아래 재부팅 시 동작 확인을 위함 
while true; do mysql -h $RDS2 -uroot -pqwe12345 -e "USE sample;SELECT * FROM EMPLOYEES;"; date; sleep 1; done

# (옵션) dig 조회 → IP 변경 확인을 위함
while true; do dig +short $RDS2; date; sleep 1; done

장애 상황 시뮬레이션
RDS2 → 작업 → 재부팅 → ' 장애 조치로 재부팅 (Check) ' → 확인

 

# mysql 접속 후 데이터 확인 반복 → 아래 재부팅 시 동작 확인을 위함 
while true; do mysql -h $RDS2 -uroot -pqwe12345 -e "USE sample;SELECT * FROM EMPLOYEES;"; date; sleep 1; done
+----+-------+------------+
| ID | NAME  | ADDRESS    |
+----+-------+------------+
|  1 | test2 | test data2 |
|  2 | test3 | test data3 |
+----+-------+------------+
Tue Jul 20 13:12:49 UTC 2021
+----+-------+------------+
| ID | NAME  | ADDRESS    |
+----+-------+------------+
|  1 | test2 | test data2 |
|  2 | test3 | test data3 |
+----+-------+------------+
Tue Jul 20 13:12:50 UTC 2021


# (옵션) dig 조회 → IP 변경 확인을 위함
while true; do dig +short $RDS2; date; sleep 1; done
Tue Jul 20 13:13:17 UTC 2021
10.1.4.211
Tue Jul 20 13:13:18 UTC 2021
10.1.4.211
Tue Jul 20 13:13:19 UTC 2021
10.1.4.211
Tue Jul 20 13:13:20 UTC 2021  <===== 10.1.3.0/24 subnet으로 변경된 것 확인!!!
10.1.3.208
Tue Jul 20 13:13:21 UTC 2021
10.1.3.208
결론 : endpoint 의 변경 없이 다른 subnet에 db가 백업 되어있다 를 확인

 

 


RDS Read Replica 실습 진행(2번 RDS)

  • RDS2 -> 읽기 복제본 생성 => 10분정도 시간 소요

DB 인스턴스 식별자 : mym-dbtest2-readonly(현재 AWS 리전에서 AWS 계정이 소유하는 모든 DB 인스턴스에 대해 유일, 각자 편하게 설정)
AWS 리전 : Asia Pacific (Seoul)
다중 AZ 배포 : 대기 인스턴스를 생성하지 마십시오

복제본 생성 확인
엔드포인트 확인

RDS2=mym-dbtest2.cuzxdyerai8i.ap-northeast-2.rds.amazonaws.com
RDS2Read=mym-dbtest2-readonly.cuzxdyerai8i.ap-northeast-2.rds.amazonaws.com

# mysql 접속 후 데이터 확인
while true; do mysql -h $RDS2 -uroot -pqwe12345 -e "USE sample;SELECT * FROM EMPLOYEES;"; date; sleep 1; done
while true; do mysql -h $RDS2Read -uroot -pqwe12345 -e "USE sample;SELECT * FROM EMPLOYEES;"; date; sleep 1; done

데이터를 추가하면 실시간으로 동시 추가 되는 것 확인 가능

# 마스터 DB에서 정보 확인 : 마스터 DB에 바이너리 로그를 이용하여 복제를 구현
[ec2-user@WebSrv ~]$ mysql -h $RDS2 -uroot -pqwe12345 -e "show master status;"
+----------------------------+----------+--------------+------------------+-------------------+
| File                       | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------------+----------+--------------+------------------+-------------------+
| mysql-bin-changelog.000034 |      156 |              |                  |                   |
+----------------------------+----------+--------------+------------------+-------------------+


# 읽기 복제본 DB에서 정보 확인
[ec2-user@WebSrv ~]$ mysql -h $RDS2Read -uroot -pqwe12345 -e "show slave status\G"
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.23.3.31
                  Master_User: rdsrepladmin
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin-changelog.000034  => 마스터 DB의 바이너리 로그
          Read_Master_Log_Pos: 156
               Relay_Log_File: relaylog.000009
                Relay_Log_Pos: 277
        Relay_Master_Log_File: mysql-bin-changelog.000034  => 복제 동기화를 실행하는 바이너리 로그
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table: innodb_memcache.cache_policies,innodb_memcache.config_options,mysql.plugin,mysql.rds_configuration,mysql.rds_history,mysql.rds_monitor,mysql.rds_replication_status,mysql.rds_sysinfo
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 156
              Relay_Log_Space: 714
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 614894498
                  Master_UUID: f8c11af2-e94d-11eb-b461-0a57f60b6f7e
             Master_Info_File: mysql.slave_master_info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
       Master_public_key_path:
        Get_master_public_key: 0
            Network_Namespace:

 

 

 


Database 삭제

database는 중요한 데이터기 때문에 삭제할 때 스냅샷 생성 여부를 물어봄