[MySQL] RDS 업그레이드 및 볼륨암호화 작업

안녕하세요 오늘은 베스핀글로벌 D&A실 왕승준님이 작성해 주신 [MySQL] RDS 업그레이드 및 볼륨암호화 작업에 대해 알아보겠습니다. 궁금하신 부분이 있으시면 댓글을 달아주세요 🙂

[ AWS MySQL RDS 버전 업그레이드 및 볼륨암호화 작업 ]

작업 배경 및 목적 :

1. MySQL RDS old minor 버전 Maintenance 예정 

현재 버전 MySQL 5.7.28 로 RDS old minor 버전(5.7.31 이하)에 대해 메인터넌스 일정이 예정되어 있어 22년 9월 30일 내로 업그레이드를 수행하지 않은 경우 정해진 메인터넌스 일자에 업그레이드 강제 수행 예정.
정기PM 일정에 맞춰 진행하기 위해 AWS 측에 해당 메인터넌스에 대해 진행 연기를 요청하였지만 연기가 불가하다는 답변을 받아 9월 중 5.7.38로 마이너 업그레이드 작업 진행하기로 함.

2. 스토리지 볼륨 암호화

스토리지 볼륨 암호화가 비활성화 되어있어 보안 취약점 문제가 되어 볼륨 암호화 조치 필요.

3. 네이밍 룰 적용

해당 RDS만 생성수행사(SDS)가 달라 운영 RDS의 네이밍룰 정책에 맞지 않게 생성되어 네이밍 수정 필요.

작업 시나리오 :

1. Old RDS) 기존 운영 FIDO의 Replica 생성 

2. Repl RDS) FIDO Replica 복제 중지

set sql_safe_updates=0;
call mysql.rds_stop_replication;

3. Repl RDS) 복제 시점 확인 

Replica의 log file과 position 정보 확인 

mysql> show slave status \G
—————————————————–
        Master_Log_File: mysql-bin-changelog.002292
        Read_Master_Log_Pos: 1007
.
.
        Relay_Master_Log_File: mysql-bin-changelog.002292
.
.
        Exec_Master_Log_Pos: 1007

4. Repl RDS) 버전 Upgrade

DB 엔진 버전 : 5.7.38

5. Repl RDS) FIDO Replica의 스냅샷 생성

스냅샷 식별자 : 220812_fido_snap

6. Snapshot) Copy Snapshot

볼륨암호화 설정을 위해 생성된 스냅샷 복사 (스토리지 볼륨 암호화)
스냅샷 식별자 : 220812_fido_snap_copy
암호화 활성화

7. Snapshot) 6에서 생성된 스냅샷으로 NEW FIDO 복원 (RDS이름 네이밍룰에 따라 변경 / 스토리지 유형 변경)

DB 인스턴스 식별자 : rds-an2-fido-prd-mysql
다중 AZ 배포 : 대기 인스턴스 생성
VPC : VPC_SPASS_PRD_KR
서브넷 그룹 : net_db_prd
퍼블릭 액세스 : 아니오
VPC 보안 그룹 : 기존 항목 선택 : sr-spass-fido
추가구성 : DB 포트 : xxxx
인스턴스 구성 : db.r5.4xlarge
DB 파라미터 그룹 : rpg-an2-fido-prd-mysql (사전에 기존 파라미터 카피하여 이름 변경)
마이너 버전 자동 업그레이드 사용하지 않음
삭제 방지 활성화

8. New RDS) 방화벽 등록

Old RDS와의 복제 연결 및 트래픽 전환 시 서비스 연결을 위한 방화벽 등록 작업

9. Old RDS) New RDS와의 복제를 위한 계정 생성

create user ‘repl’@’%’ identified with sha256_password by ‘password’;
GRANT EXECUTE, REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO ‘repl’@’%’;

10. NEW RDS) NEW FIDO에서 ORG FIDO를 Master로 Slave 설정.

set SQL_SAFE_UPDATES =0;
CALL mysql.rds_set_external_master (‘ORG RDS Private IP’, port, ‘repl’, ‘password’, ‘mysql-bin-changelog.002292’, 1007, 0)
— CALL mysql.rds_set_external_master (‘servername’, port, ‘user’, ‘password’, ‘binlog-file’, binlog-offset, 0);

11. Old RDS -> New RDS) 서비스 전환

WAS 서버 4대를 2대씩 순차적으로 작업

12. New RDS) RDS Slave 복제 실행 및 상태 확인

set sql_safe_updates=0;
CALL mysql.rds_start_replication;
show slave status;       — Slave_IO_State : Waiting for master to send event

13. New RDS) 복제 중지

set sql_safe_updates=0;
call mysql.rds_stop_replication;

감사합니다 🙂

문의: info@bespinglobal.com | 대표번호: 02-1668-1280

Leave a Comment