본문 바로가기
RDBMS/mysql

MySQL Replication 구성 방법

by Bill Lab 2024. 10. 2.
728x90

서비스를 운영하다보면은 하나의 단일 구성으로 DB 를 사용했을때,

DB의 지원한계로 인해 원활한 운영이 되지않는경우가 있다.

 

대표적으로 DB Transaction 처리 건들이 많아서, 계속해서 thread pool wait

현상이 발생하는경우, 단일 조회 처리가 매우 오래걸리는 건 때문에(과도한 서브쿼리, 복잡한 쿼리 사용으로)

다른 자원에서는 단순 조회만 처리하면되는데, 이건들도 앞단의 pending 작업으로 인해 

대기가 발생하게 된다.

(얼마나 비효율적인가?)

 

이렇게 등장한 개념이 CQRS!! 조회와 조회가 아닌건들을 분리하자!

그리고 이를 지원하고자 나온 개념이 MySQL의 Replication!!

(조회라도 분산시켜주자)

 

Replication 구성을 하게되면,

Master 와 Master 가아닌 Slave 로 구성할 수 있다.

(여기서 아쉬운 점은 Master를 여러개로 늘릴 수 없다는 것과,

Slave 에서 처리는 Read만 가능하다는 것이다.)

 

따라서 CQRS 패턴 적용 시 Read 처리는 Slave 로, 이외의 CUD 처리는

Master 보내면 된다.

(간단하죠?)

 

자! 그럼 어떻게 세팅을 할까?

DB 환경 세팅부터 하자

$docker pull mysql

  

도커 이미지를 받아온 다음, 이미지를 실행할때 하나는 Master, 하나는 Slave 로 띄우면 된다.

//master 실행
docker run -p 3306 --name db-master -e MYSQL_ROOT_PASSWORD=0000 -d docker.io/mysql

//컨테이너 내부로 접근하여 세팅변경!
//이게 귀찮으면 docker-compose 로 처음부터 config 세팅해서 뛰우는 방법도 있음
docker exec -it db-master /bin/bash

vi 로 my.cnf 파일 수정 (/etc/mysql/my.cnf)
log-bin=mysql-bin
server-id=1

//docker 재시작
docker restart db-master

 

Slave 컨테이너 생성

docker run -p 3306 --name db-slave -e MYSQL_ROOT_PASSWORD=0000 --link db-master -d docker.io/mysql

 

컨테이너 내부로 접근하여 config 수정 (server-id 값)

//동일경로
log-bin=mysql-bin
sesrver-id=2

//docker 재시작
docker restart db-slave

 

728x90

'RDBMS > mysql' 카테고리의 다른 글

mysql docker 실행하기  (0) 2025.01.29
mysql named lock 에 대해서  (0) 2024.12.27