MySQL에서 마스터-슬레이브 복제 설정하기

MySQL에서 마스터-슬레이브 복제(Master-Slave Replication)는 데이터베이스의 고가용성과 성능을 향상시키기 위한 중요한 방법입니다.

마스터 서버에서 데이터를 변경하면, 그 변경 사항이 자동으로 슬레이브 서버에 복제되어 데이터의 일관성을 유지하고, 읽기 작업을 분산시킬 수 있습니다.

 

 

1. 마스터-슬레이브 복제란?

마스터-슬레이브 복제는 MySQL에서 데이터베이스의 복제 기능을 통해 마스터 서버에서 발생한 모든 데이터 변경 사항을 슬레이브 서버로 자동으로 복사하는 방식입니다. 마스터 서버는 데이터 변경 작업을 처리하고, 슬레이브 서버는 마스터 서버의 데이터를 읽기 전용으로 복제하여 성능을 최적화하고 부하를 분산할 수 있습니다.

마스터-슬레이브 복제의 주요 장점

  • 데이터베이스 읽기 성능 향상: 슬레이브 서버에서 읽기 작업을 처리하여 마스터 서버의 부하를 분산시킵니다.
  • 데이터베이스 고가용성 제공: 마스터 서버에 장애가 발생할 경우 슬레이브 서버를 마스터로 승격시켜 시스템 가용성을 높일 수 있습니다.
  • 백업 작업 최적화: 슬레이브 서버에서 백업을 수행하여 마스터 서버의 성능에 영향을 미치지 않게 합니다.

 

2. 마스터-슬레이브 복제 설정하기

마스터-슬레이브 복제를 설정하려면, 마스터 서버와 슬레이브 서버를 설정하고, 복제 설정을 위한 권한을 부여한 후, 복제를 시작해야 합니다. 아래는 단계별 설정 방법입니다.

2.1. 마스터 서버 설정

마스터 서버에서 복제를 위한 설정을 수행합니다. 마스터 서버의 `my.cnf` 파일에서 서버 ID로그 파일을 설정해야 합니다.

[mysqld]
server-id = 1
log-bin = mysql-bin
bind-address = 0.0.0.0

위 설정에서 server-id는 마스터 서버의 고유한 식별자이며, log-bin은 마스터 서버에서 발생하는 모든 변경 사항을 기록하는 바이너리 로그를 활성화하는 옵션입니다. bind-address는 서버가 어떤 IP 주소로 바인딩될지 설정합니다.

2.2. 마스터 서버에서 복제 사용자 생성

슬레이브 서버에서 데이터를 복제할 수 있도록 마스터 서버에서 복제 전용 사용자를 생성합니다.

CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
FLUSH PRIVILEGES;

위 쿼리는 `replica_user`라는 사용자를 생성하고, 복제 권한을 부여합니다. 이 사용자는 슬레이브 서버에서 데이터를 복제하는 데 사용됩니다.

2.3. 마스터 서버에서 복제 정보 확인

마스터 서버에서 복제 정보를 확인하려면 SHOW MASTER STATUS 명령어를 사용합니다. 이 명령어는 현재 바이너리 로그 파일과 위치를 반환하며, 슬레이브 서버에서 복제 시작 시점으로 사용됩니다.

SHOW MASTER STATUS\G

이 명령어를 실행하면, 마스터 서버의 로그 파일과 해당 위치가 출력됩니다. 출력된 값은 슬레이브 서버에서 설정하는 데 사용됩니다.

2.4. 슬레이브 서버 설정

슬레이브 서버에서 마스터 서버와 연결을 위한 설정을 합니다. 슬레이브 서버의 `my.cnf` 파일에서 서버 ID를 설정하고, 마스터 서버의 정보를 사용하여 복제 연결을 설정합니다.

[mysqld]
server-id = 2

슬레이브 서버에서도 고유한 `server-id`를 설정합니다. 마스터와 슬레이브의 `server-id`는 서로 달라야 합니다.

2.5. 슬레이브 서버에서 복제 시작

슬레이브 서버에서 마스터 서버의 데이터를 복제하려면 CHANGE MASTER TO 명령어를 사용하여 마스터 서버의 정보를 설정합니다.

CHANGE MASTER TO
MASTER_HOST = 'master_ip',
MASTER_USER = 'replica_user',
MASTER_PASSWORD = 'password',
MASTER_LOG_FILE = 'mysql-bin.000001',
MASTER_LOG_POS = 107;
START SLAVE;

위 명령어는 슬레이브 서버에서 마스터 서버의 정보를 설정하고, 복제를 시작합니다. `MASTER_LOG_FILE`과 `MASTER_LOG_POS`는 마스터 서버에서 실행된 마지막 로그 파일과 위치를 사용해야 합니다.

2.6. 복제 상태 확인

슬레이브 서버에서 복제 상태를 확인하려면 SHOW SLAVE STATUS\G 명령어를 사용합니다. 이 명령어는 슬레이브 서버에서 복제 상태와 에러 여부 등을 확인하는 데 유용합니다.

SHOW SLAVE STATUS\G

출력 결과에서 `Slave_IO_Running`과 `Slave_SQL_Running` 값이 "Yes"로 표시되면 복제가 정상적으로 진행되고 있는 것입니다.

 

 

3. 마스터-슬레이브 복제 활용 예시

3.1. 부하 분산

복제된 슬레이브 서버는 읽기 전용으로 사용되어, 읽기 작업을 분산시킬 수 있습니다. 마스터 서버는 주로 쓰기 작업을 처리하고, 슬레이브 서버는 읽기 작업을 처리하여 시스템 부하를 줄일 수 있습니다.

3.2. 고가용성

마스터 서버에 장애가 발생하면, 슬레이브 서버를 마스터로 승격시켜 서비스의 가용성을 유지할 수 있습니다. 이를 통해 장애 발생 시 시스템의 다운타임을 최소화할 수 있습니다.

3.3. 실시간 데이터 복제 및 백업

슬레이브 서버는 실시간으로 마스터 서버의 데이터를 복제하므로, 데이터 백업을 슬레이브 서버에서 수행하여 마스터 서버의 성능에 영향을 미치지 않게 할 수 있습니다.

 

 

4. 복제의 제약 사항

  • 지연 시간: 마스터-슬레이브 복제에서 지연 시간(Lag)이 발생할 수 있습니다. 슬레이브 서버는 마스터 서버에서 변경된 데이터를 실시간으로 받지만, 네트워크 환경이나 서버 성능에 따라 지연될 수 있습니다.
  • 읽기-쓰기 분리: 슬레이브 서버는 기본적으로 읽기 전용입니다. 쓰기 작업을 슬레이브 서버에서 직접 처리하려면 복제 구성을 변경해야 합니다.
  • 트랜잭션 충돌: 슬레이브 서버에서 데이터를 수정하는 경우, 마스터 서버와의 충돌이 발생할 수 있습니다. 이러한 경우에는 복제 구성을 변경하거나 주의 깊게 관리해야 합니다.

마스터-슬레이브 복제를 통해 데이터베이스의 성능을 최적화하고, 고가용성 및 부하 분산을 구현할 수 있습니다.