본문 바로가기
DBMS

[RDB] MariaDB Master-Slave Replication

by Ahngyuho 2025. 3. 10.

1. Master-Slave Replication 개념

Master-Slave Replication은 하나의 데이터베이스 서버(Master)에서 발생한 변경 사항을 다른 데이터베이스 서버(Slave)로 실시간 또는 일정 주기마다 복제하는 방식입니다.

이 방식은 Master에서 수행된 모든 데이터 변경(insert, update, delete 등)을 Binary Log(Binary Log File)를 통해 기록하고, Slave가 해당 로그를 읽고 적용하는 방식으로 동작합니다.


2. Master-Slave Replication을 사용하는 이유

  1. 데이터 백업 및 장애 복구(Failover & Recovery)
    • Master 서버가 장애가 발생했을 경우, Slave 서버를 빠르게 Master로 전환하여 서비스 중단을 최소화할 수 있습니다.
  2. 읽기 부하 분산(Read Scaling)
    • Master 서버는 쓰기(Write) 작업을 담당하고, Slave 서버는 읽기(Read) 작업을 담당함으로써 데이터베이스 부하를 분산시킬 수 있습니다.
  3. 데이터 분석 및 보고
    • Slave 서버를 분석 및 보고서 생성 전용 서버로 사용하여, Master 서버의 성능 저하 없이 데이터 조회 작업을 수행할 수 있습니다.
  4. 데이터 보안 및 백업
    • 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