1. Master-Slave Replication 개념
Master-Slave Replication은 하나의 데이터베이스 서버(Master)에서 발생한 변경 사항을 다른 데이터베이스 서버(Slave)로 실시간 또는 일정 주기마다 복제하는 방식입니다.
이 방식은 Master에서 수행된 모든 데이터 변경(insert, update, delete 등)을 Binary Log(Binary Log File)를 통해 기록하고, Slave가 해당 로그를 읽고 적용하는 방식으로 동작합니다.
2. Master-Slave Replication을 사용하는 이유
- 데이터 백업 및 장애 복구(Failover & Recovery)
- Master 서버가 장애가 발생했을 경우, Slave 서버를 빠르게 Master로 전환하여 서비스 중단을 최소화할 수 있습니다.
- 읽기 부하 분산(Read Scaling)
- Master 서버는 쓰기(Write) 작업을 담당하고, Slave 서버는 읽기(Read) 작업을 담당함으로써 데이터베이스 부하를 분산시킬 수 있습니다.
- 데이터 분석 및 보고
- Slave 서버를 분석 및 보고서 생성 전용 서버로 사용하여, Master 서버의 성능 저하 없이 데이터 조회 작업을 수행할 수 있습니다.
- 데이터 보안 및 백업
- Master 서버의 데이터가 유실되거나 장애가 발생해도 Slave 서버에서 데이터를 보존할 수 있습니다.
3. Master-Slave Replication 설정 방법
1) Master 서버 설정
(1) Master 서버의 설정 변경
vi /etc/mysql/mariadb.conf.d/50-server.cnf
설정 파일에서 [mariadb] 섹션에 아래 내용을 추가합니다.
log-bin
server_id=1
log-basename=master1
binlog-format=mixed
변경 사항 적용을 위해 MariaDB 서비스를 재시작합니다.
systemctl restart mariadb
(2) Master 상태 확인
mariadb -u root -p
SHOW MASTER STATUS;
이 명령을 실행하면 Binary Log 파일명과 Position 값이 출력됩니다.
(3) Slave 연결을 위한 사용자 계정 추가
CREATE USER 'slave_user'@'%' IDENTIFIED BY 'qwer1234';
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'%';
FLUSH PRIVILEGES;
2) Slave 서버 설정
(1) Slave 서버의 설정 변경
vi /etc/mysql/mariadb.conf.d/50-server.cnf
설정 파일에서 [mariadb] 섹션에 아래 내용을 추가합니다.
server_id=2
변경 사항 적용을 위해 MariaDB 서비스를 재시작합니다.
systemctl restart mariadb
(2) Master 서버 지정 및 Slave 시작
Master 서버 정보를 사용하여 Slave 설정을 수행합니다.
mariadb -u root -p
CHANGE MASTER TO
MASTER_HOST='172.16.141.51',
MASTER_USER='slave_user',
MASTER_PASSWORD='qwer1234',
MASTER_PORT=3306,
MASTER_LOG_FILE='[마스터에서 SHOW MASTER STATUS 실행 후 File 이름]',
MASTER_LOG_POS=[마스터에서 SHOW MASTER STATUS 실행 후 position 값],
MASTER_CONNECT_RETRY=10;
예제:
CHANGE MASTER TO
MASTER_HOST='172.16.141.51',
MASTER_USER='slave_user',
MASTER_PASSWORD='qwer1234',
MASTER_PORT=3306,
MASTER_LOG_FILE='master1-bin.000003',
MASTER_LOG_POS=344,
MASTER_CONNECT_RETRY=10;
이후, Slave를 시작합니다.
START SLAVE;
(3) Slave 상태 확인
SHOW SLAVE STATUS\G;
출력 결과에서 아래 두 값이 Yes인지 확인해야 합니다.
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
4. Master-Slave Replication 활용 방법
1) 읽기 부하 분산(Read Scaling)
- Master는 쓰기(Write) 전용, Slave는 읽기(Read) 전용으로 사용하여 성능을 최적화할 수 있습니다.
- 애플리케이션에서 SELECT 쿼리는 Slave 서버로 보내고, INSERT, UPDATE, DELETE는 Master 서버로 보냅니다.
2) 장애 발생 시 Slave를 Master로 승격 (Failover)
- Master 서버 장애 발생 시, Slave 서버를 새로운 Master로 설정할 수 있습니다.
- Slave에서 SHOW SLAVE STATUS;로 현재 적용된 로그 위치 확인 후, 새로운 Master로 변경합니다.
3) 데이터 백업 및 보존
- Slave 서버에서 데이터를 백업하여 Master의 데이터 손실 가능성을 줄일 수 있습니다.
5. 결론
Master-Slave Replication은 데이터베이스의 확장성과 안정성을 높이는 중요한 기법입니다.
이를 통해 읽기 부하 분산, 데이터 백업, 장애 복구 등의 이점을 얻을 수 있으며, 대규모 시스템에서 필수적인 데이터 관리 방법으로 활용됩니다.
설정 과정은 비교적 간단하지만, 운영 환경에서는 지속적인 모니터링과 장애 대응을 고려하여 사용해야 합니다.
'DBMS' 카테고리의 다른 글
SQL Query Execution order (4) | 2024.11.29 |
---|---|
Jpa Audit (2) | 2024.10.21 |