데이터는 우리 사업의 생명줄과 같아요. 소중한 데이터를 안전하게 지키고, 서비스 중단 없이 안정적으로 운영하는 건 정말 중요한 일이죠. 그래서 오늘은 데이터베이스 복제와 고가용성 구성에 대해 이야기해보려고 합니다. 특히 MySQL의 Master-Slave 복제와 Oracle Data Guard를 활용한 방법을 자세히 알아보고, 실제 설정과 장애 복구 테스트 사례까지 꼼꼼하게 공유해 드릴게요.🛠️
1. 데이터베이스 복제란? 🌀
복제(Replication)는 마치 데이터를 복사해서 백업해두는 것과 같아요. 하나의 데이터베이스 서버에 있는 데이터를 다른 서버로 복사해두면, 혹시 모를 사고로 데이터가 손실될 위험을 크게 줄일 수 있답니다. 뿐만 아니라, 여러 사용자가 동시에 데이터를 읽으려고 할 때, 부하를 분산시켜서 서비스 속도를 향상시키는 효과도 있어요.
🚩장점:
- 데이터 안전성 보장.
- 읽기/쓰기 부하 분산.
- 장애 발생 시 빠른 복구.
2. MySQL Master-Slave 복제 설정 🌟
2.1 기본 개념:
- Master: 데이터를 쓰고 변경하는 역할을 합니다. 모든 데이터 변경은 Master에서 이루어집니다.
- Slave: Master의 데이터를 복사해서 저장하고, 읽기 요청을 처리합니다.
- 복제 방식: Master의 변경 내용을 Slave에 전달하는 방식에 따라 비동기 또는 반동기 방식으로 나뉩니다. 비동기 방식이 일반적이며, 반동기 방식은 데이터 정합성을 좀 더 보장하지만 성능에 약간의 영향이 있을 수 있습니다.
2.2 환경 준비:
- MySQL이 설치되고 정상적으로 작동하는 두 대의 서버(Master, Slave)가 필요합니다.
- Master 서버에서는 데이터를 쓰고 변경하는 작업을 수행하고, Slave 서버에서는 읽기 요청을 처리하도록 구성합니다.
2.3 설정 단계:
(Step 1) Master 서버 설정:
# my.cnf 파일 수정
[mysqld]
log-bin=mysql-bin # 바이너리 로그 활성화 (필수!)
server-id=1 # 고유 서버 ID 설정 (각 서버마다 다른 ID 부여)
binlog-do-db=your_database # 복제할 데이터베이스 지정 (선택적)
expire_logs_days=7 # 바이너리 로그 보관 기간 설정 (권장)
-- Master 서버에서 Replication 전용 사용자 생성
CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
FLUSH PRIVILEGES;
-- Master의 현재 바이너리 로그 파일 이름과 위치 확인 (Slave 설정 시 필요)
SHOW MASTER STATUS;
(Step 2) Slave 서버 설정:
# my.cnf 파일 수정
[mysqld]
server-id=2 # Slave 서버 ID 설정 (Master와 다른 ID)
relay-log=relay-bin # Relay 로그 설정 (Slave에서 Master의 로그를 저장하는 공간)
read_only=1 # Slave 서버에서 쓰기 방지 (권장)
-- Slave 서버에서 Master와 연결 설정
CHANGE MASTER TO
MASTER_HOST='master_ip_address',
MASTER_USER='replica_user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='mysql-bin.000001', -- Master의 로그 파일 이름
MASTER_LOG_POS=12345; -- Master의 로그 위치
-- 복제 시작!
START SLAVE;
-- 복제 상태 확인 (중요!)
SHOW SLAVE STATUS\G;
2.4 장애 복구 테스트:
- Master 서버를 강제로 중단시켜 봅니다.
- Slave 서버를 새로운 Master로 승격시킵니다.
STOP SLAVE;
RESET MASTER;
- 이전에 중단되었던 Master 서버를 복구한 후, 새로운 Slave로 설정하여 연결합니다.
3. Oracle Data Guard로 고가용성 구현 ⚙️
Oracle Data Guard는 Oracle 데이터베이스의 고가용성을 위한 솔루션입니다.
- Primary Database: 주 데이터베이스로, 쓰기와 읽기 작업을 모두 처리합니다.
- Standby Database: Primary 데이터베이스의 복제본을 유지하며, 재해 복구 및 읽기 전용 작업에 활용할 수 있습니다.
3.1 주요 모드:
- Maximum Performance: 성능을 최우선으로 고려하며, 데이터 손실 가능성이 약간 있습니다.
- Maximum Availability: 데이터 손실을 최소화하는 데 중점을 둡니다.
- Maximum Protection: 데이터 손실을 절대 허용하지 않는 가장 강력한 모드입니다.
3.2 설정 과정:
Primary 데이터베이스에서 Standby 데이터베이스로 데이터를 전송하고, Standby 데이터베이스는 Redo 로그를 수신하여 데이터를 복제합니다. 자세한 설정 과정은 Oracle 공식 문서를 참고하시는 것이 좋습니다.
3.3 장애 테스트:
Primary 데이터베이스를 종료하고, Standby 데이터베이스를 Primary 데이터베이스로 전환하는 테스트를 진행합니다.
-- Primary에서 Standby에 연결 설정
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=standby_db ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=standby_db';
장애 테스트:
- Primary DB 종료.
- Standby DB를 Primary로 전환:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH; ALTER DATABASE ACTIVATE STANDBY DATABASE;
4. 복제 및 고가용성 활용의 실무 팁 🧠
- 모니터링 도구 사용:
- MySQL: Percona Monitoring and Management.
- Oracle: Enterprise Manager와 Data Guard Broker.
- 주기적 테스트:
- 장애 복구 절차를 정기적으로 점검.
- Slave/Standby 상태 확인:
- MySQL: SHOW SLAVE STATUS\G.
- Oracle: V$DATABASE 뷰.
- 자동화:
- MySQL: MHA(Master High Availability Manager).
- Oracle: Data Guard 자동 전환 설정.
5. 마무리 🎯
MySQL의 Master-Slave 복제와 Oracle Data Guard는 데이터를 안전하게 보호하고 서비스의 연속성을 보장하는 핵심 기술입니다. 중요한 것은 단순히 설정을 따라 하는 것이 아니라, 자신의 환경에 맞는 전략을 선택하고 정기적인 테스트를 통해 시스템의 신뢰성을 확보하는 것입니다. 😊
궁금한 점은 댓글로 남겨주세요! 💬
'프로그래밍 > DB' 카테고리의 다른 글
[DB] Sqlite C# 연동 (6) | 2025.02.07 |
---|---|
[DB]SQL 로그를 활용한 데이터베이스 상태 분석 (3) | 2025.02.05 |
[DB]스케일업과 스케일아웃: 대규모 데이터 처리 🚀 (3) | 2025.01.23 |
[DB]데이터 무결성, 그 핵심에 대하여 (1) | 2025.01.23 |
[DB]MySQL과 Oracle에서 히스토리 테이블 관리하기✨ (1) | 2025.01.21 |