2015-05-24

[MySQL] Replication (3) - Replication을 사용하는 이유

 지난번 글에서 MySQL replication이 무엇인지 설명하면서, replication은 cluster와 다르게 동기화되는 것을 기다리지 않아도 돼서 빠르므로, 실시간 동기화가 필요하지 않은 경우에 사용된다고 하였다. 그렇다면 실시간 동기화가 필요 없는 경우는 어떤 경우들이 있을까?
 이번 글에서는 MySQL이 추천하는 적절한 replication 사용 방법에 대해서 알아보도록 하겠다.

백업

 replication의 주목적은 데이터를 백업하는 것이다. MySQL은 데이터의 지속성을 보장해준다. 하지만 아쉽게도 데이터베이스 이외의 다양한 이유(e.g. 하드디스크)로 데이터베이스를 복구할 수 없게 되는 일이 있다. 이런 경우를 대비하여, 다른 컴퓨터에 데이터를 복사하여 마스터 데이터를 복구할 수 없으면 복사된 슬레이브의 데이터를 이용하여 데이터를 복구할 수 있게 한다.

아카이브

 단순 백업을 위해서 뿐 아니라 아카이브를 만들기 위해서도 replication이 사용된다. mysqldump를 이용하면 데이터를 복사하여 아카이브를 만들 수 있다. 하지만 쿼리를 수행 중인 데이터베이스에 mysqldump를 실행하면, 깨진 데이터가 들어올 수 있다. 이는 MySQL enterprise backup을 이용하면 해결할 수 있지만, replication을 이용해서 해결할 수도 있다.

 지난번 글에서 설명하였듯이, 슬레이브의 SQL thread를 정지시키면, 마스터의 데이터를 읽어와서 relay log를 만들지만, 데이터베이스는 업데이트하지 않는다. 따라서 SQL thread만 정지시켜 놓으면, 안전하게 mysqldump를 실행할 수 있다. 이를 이용하여 서비스 중인 데이터베이스의 데이터를 서비스를 중지시키지 않고 아카이브를 만들기 위해서 replication을 사용하기도 한다.

부하 분산

 혹은 쿼리를 분산시키기 위한 목적으로도 사용된다.
서버별로 다른 슬레이브에서 값을 읽게 한다

 대부분의 웹 서비스는 데이터의 변경에 비해서 데이터를 읽는 작업이 많다. 이런 경우 슬레이브를 이용하여 부하를 분산시킬 수 있다. 혹은 로그 분석기처럼 고정된 데이터를 다양하게 하는 서비스의 경우도 replication을 사용하는 것이 좋다. 이런 서비스들은 replication을 이용하여 데이터를 읽는 것을 슬레이브에서 수행하면 부하를 분산시킬 수 있다.

지역 분산

 혹은 글로벌 서비스를 위하여 지역별로 다른 슬레이브를 구성할 수도 있다.
지역별로 슬레이브를 만든다.
 간혹 전 세계를 상대로 같은 데이터를 서비스해야 하지만, 레이턴시도 매우 중요한 서비스들이 있다. 보통 이런 서비스의 경우 데이터베이스는 공유하고, 지역별로 서버를 둔 뒤, 서버 메모리 캐시 같은 것을 사용하는 것이 일반적이다. 하지만 replication을 사용하면 위의 복잡한 작업을 간단하게 해결할 수 있다.


 이상으로 replication의 다양한 사용방법을 알아보았다. 하지만 이는 어디까지나 MySQL 매뉴얼에서 추천하는 일반적인 사용법이고, 실제로 활용할 방법은 무궁무진하다. 중요한 것은 cluster와 차이점을 이해하고 적절한 지점에 사용하는 것이다.

MySQL Replication

댓글 없음:

댓글 쓰기