← Replica DB 프로젝트
🧪

04 / 05

테스트

DML/DDL 복제 검증, 장애 시나리오 테스트, 대량 Write 부하 테스트

TestingFailoverStress Test
개요버전업이중화 구성테스트튜닝

Testing

이중화 테스트

운영 적용 전에 테스트 환경에서 다양한 시나리오를 검증했다. 기본 복제 동작부터 장애 상황, 대량 Write 부하까지 테스트해서 안정성을 확인했다.

기본 복제 테스트

Master에서 DML(INSERT, UPDATE, DELETE)과 DDL(ALTER TABLE, CREATE INDEX)을 실행하고 Replica에 정상 반영되는지 확인했다.

-- Master에서
INSERT INTO test_table (name, value) VALUES ('test1', 100);
UPDATE test_table SET value = 200 WHERE name = 'test1';
DELETE FROM test_table WHERE name = 'test1';

-- DDL
ALTER TABLE test_table ADD COLUMN created_at DATETIME DEFAULT CURRENT_TIMESTAMP;
CREATE INDEX idx_name ON test_table(name);

-- Replica에서 확인
SELECT * FROM test_table;
SHOW CREATE TABLE test_table\G
데이터 동기화 확인
DML, DDL 모두 정상적으로 복제 확인 완료.

장애 시나리오 테스트

시나리오 1: Replica 재시작

sudo systemctl restart mariadb

재시작 후 GTID 기반으로 자동 복제 재개 확인. 위치를 자동으로 찾아감.

시나리오 2: 네트워크 단절

# Master IP 차단
sudo iptables -A INPUT -s [master-test-ip] -j DROP
sudo iptables -A OUTPUT -d [master-test-ip] -j DROP

# 30초 후 복구
sudo iptables -D INPUT -s [master-test-ip] -j DROP
sudo iptables -D OUTPUT -d [master-test-ip] -j DROP

네트워크 복구 후 IO Thread 자동 재연결, 밀린 binlog 수신 후 복제 정상화.

장애 시나리오 테스트

대량 Write 부하 테스트

Master에 10만건 INSERT를 발생시켜서 Replica가 따라가는지 확인했다.

DELIMITER //
CREATE PROCEDURE bulk_insert(IN cnt INT)
BEGIN
  DECLARE i INT DEFAULT 0;
  WHILE i < cnt DO
    INSERT INTO test_table (name, value)
    VALUES (CONCAT('bulk_', i), RAND() * 1000);
    SET i = i + 1;
  END WHILE;
END //
DELIMITER ;

CALL bulk_insert(100000);

10만건 INSERT 후 Seconds_Behind_Master가 일시적으로 증가했다가 점차 따라잡는 것을 확인했다. 이 테스트에서 병렬 복제 튜닝의 필요성을 발견했다.

대량 Write 부하 테스트

테스트 결과 요약

테스트 항목결과
기본 DML 복제정상
DDL 복제정상
Replica 재시작자동 복구
네트워크 단절 복구자동 재연결
대량 Write 부하튜닝 후 안정
GTID 동기화정상
이중화 구성튜닝