MySQL 특징

MySQL은 기본적으로 서버 한대 짜리 솔루션 이므로 여러대의 서버에 분산해서 동작하지 못한다.

그래서 데이터가 많아질수록 조금씩 벅차지는 상황이 생겨나게 된다.

이렇게 mysql에 용량 이슈가 생길 경우 어떻게 용량을 증대할 수있을까?

 

- 용량 증대 방식

1. Scale-Up : 서버에 CPU와 Memory 추가

Scale - Up

그러나 한 서버에 CPU와 Memory를 추가하는 것에는 한계가 있다. Scale-up을 계속하다보면 더이상 안되는 지점이 발생하게 된다.

데이터가 점점 많아지면서 더이상 스케일 업이 안된다면 어떻게 해야할까?

일단 정말로 이 데이터 베이스(mysql)에 우리가 사용하는 데이터만(웹서비스에 바로 필요한 데이터들) 존재하는지 부터 확인해야 한다. 많은 경우, 안쓰는 데이터가 있을 수 있다. 또는, 굳이 mysql에 없어도 될 데이터가 있을 수 있다.

안쓰는 데이터들을 다른 시스템으로 빼는 식으로 하여 메모리를 줄일 수 있다.

그럼에도 부족할 수 있다.

 

2. Scale-Out : Master-Slave로 구성

Scale - Out : Master - Slave

서버 한대로 돌리는 걸 서버숫자를 늘려서 사용한다.

근데 mysql은 소프트웨어 자체가 두대, 혹은 그 이상의 서버에 같이 동작하지 못한다. 그냥 기본적으로 한대에만 돌아가는 소프트웨어다.

그래서 일반적으로 서버를 붙여서 용량을 증대하는 식의 스케일 아웃은 mysql에서 사용할 수 없다. mysql 소프트웨어가 그렇게 작성안되어 있기 때문이다.

Scale - Out : Cluster 방식, MySQL에서 사용할 수 없음.

이러한 mysql에 scale out을 할 수 있는 방법은 없을까?

 

만약 mysql 서버 한대로 읽을수 있는 데이터가 초당 100mb라고 하자. 근데 우리가 서포트해야할 읽기속도가 초당 200mb라면?

 

이런 경우에 slave를 만들 수 있다. mysql에 기본적으로 서버 한대가 있고(master) 마스터에 있는 데이터들이 slave로, 읽기 전용으로 복사가 된다. 그래서 이러한 백엔드 시스템에서 데이터를 읽을 일이 있을 때는 이렇게 slave를 만들면 된다.

그리고 slave는 여러개를 만들 수 있기 때문에 slave중에 하나를 가져다 쓸 수 있고 slave들을 로드밸런서로 묶어서 이들 중에 살아있는것들 중 아무거나 한개와 연결하여 거기서다 쓸 수도 있다.

 

결국 mysql에서 말하는 scale out 방식은 cluster 형태의 scale out 방식이 아니라 master slave형태로 sql하나가 갖고 있는 내용을 다수의 서버에(slave)에 복제함으로써 다른건 몰라도 읽기는 더큰 용량을 지원해 주게 된다.

 

mysql 자체가 핸들할 수 있는 데이터 양이 커지는건 아니고 (여전히 서버 한대가 처리할 수 있는 최대양(master서버)이 정해져 있음) 적어도 읽기에 관해서는 이 mysql이 readonly로 slave라는 서버로 복제하면 적어도 더 많은 읽기를 지원해줄 수 있다.

ex) DML중 select라는 명령어같은 경우는 slave를 더 많이 만들어서 더 큰 용량을 지원해 줄 수 있다. (읽기 용량 증대)
근데 이 방법도 결국 read밖에 안되고 write, 즉 테이블에 레코드를 추가하고 수정하고 하는 것들을 slave에다가는 못한다. 모든 쓰기작업은 master에다가 해야 한다.

댓글

Designed by JB FACTORY