Blue 와 Green 의 테이블 구조가 다른 상태에서 복제가 정상적으로 진행이 되는지 테스트 해보자
1. mysql rds 생성
mysql rds 인스턴스 생성은 이전에 작성한 포스팅을 참조하자
https://riorio.tistory.com/606
생성이 완료 되면 테스트 DB 를 생성하고 테스트 테이블을 하나 생성하자
CREATE DATABASE TEST;
USE TEST
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(10) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin NOT NULL,
email VARCHAR(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin,
age varchar(5) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin,
address text collate utf8mb4_general_ci,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) CHARACTER SET utf8mb3 COLLATE utf8mb3_bin;
-- sample data 입력
INSERT INTO users (username, email, age, address) VALUES ('john_doe', 'john@example.com', '30', 'seoul-south korea');
2. 블루그린 - 그린 인스턴스 추가
그린 인스턴스를 생성한다. 그린 인스턴스 전용 파라미터 그룹을 새로 만들어서 설정해준다.
그린 전용 파라미터 그룹에는 아래 두가지 파라미터가 수정이 되었다.
read_only=0
slave_type_conversions=ALL_NON_LOSSY
버튼을 누르면 그린 인스턴스가 생성작업이 시작된다.
생성이 완료되면 엔드포인트 정보로 접속하자.
3. 테스트
테이블 구조를 다르게 유지하기 위해 그린에만 DDL 을 실행한다.
insert 는 blue 에서 실행하고 green 에서 복제가 되는지 조회해보자
-- [G] 1. char set
ALTER TABLE users CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- [B] 1. char set
INSERT INTO users (username, email, age, address) VALUES ('fastlookup', 'fast@example.com','1','L.A santa monica beach');
-- [G] 2. col order
ALTER TABLE users MODIFY COLUMN email VARCHAR(100) AFTER age;
-- [B] 2. col order
INSERT INTO users (username, email, age, address) VALUES ('émilie', 'émilie@example.com','24','jeju-island');
-- [G] 3. col type varchar -> int
ALTER TABLE users MODIFY COLUMN age int;
-- [B] 3. col type varchar -> int
INSERT INTO users (username, email, age) VALUES ('jane_smith', 'jane@example.com', 25);
-- [G] 3. col type text -> varchar
ALTER TABLE users MODIFY COLUMN address VARCHAR(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
-- [B] 4. col type text -> varchar
INSERT INTO users (username, email, age, address) VALUES ('no_index', 'no_index@example.com','98','new-york,new-york');
블루-그린 테이블 구조가 달라도 데이터는 정상적으로 복제가 되었다.
작업이 완료되었고, 복제가 완료되었으면 staging 을 prod 로 바꾸는 switch over 를 하자
전환이 완료되었다. 그린은 신규블루로 바뀌었고 엔드포인트도 기존 블루의 엔드포인트로 바뀌었다.
기존블루의 인스턴스 이름에는 "old" 가 붙게 된다.
사용자 입장에서는 잠깐의 순단이 발생하고 운영반영이 되었다.
* 스위치오버 전후 유의점
- 전환 전 그린 파라미터의 원복 : read_only, slave_type_conversions ( 재부팅 필요)
- 그린의 데이터 검증, sql 플랜 확인
- 전환 작업은 DB연결 수가 적은 시점에 해야 원활하게 작업가능
(리소스사용의 최소화, 빠른 전환, 데이터 불일치, 충돌 리스크 감소)
'생계 > AWS' 카테고리의 다른 글
[AWS] PostreSQL RDS 생성 하기 (0) | 2024.10.23 |
---|---|
AWS DMS 로 데이터 옮기기 (0) | 2024.10.14 |
AWS RDS oracle console에서 파일 다운받기 (0) | 2024.05.09 |
아마존 AWS EC2 생성하기 프리티어 (0) | 2024.03.03 |
[무과금] 아마존 AWS 프리티어 mysql RDS 생성 (0) | 2024.02.17 |