DB 클러스터란

원문: http://thinkit.co.jp/story/2010/10/05/1784
2010년11월 번역

1. DB 클러스터란?

기본적인 DB 구축은 1개의 서버로 하나의 DB를 구축해서 운용하는 형태가 많다. 그러나 여러가지 이유로 하나의 DB를 여러개의 서버가 나눠서 처리하도록 하는 형태가 늘어나고 있다.
이 문서에서는 어려종류의 DB 클러스터와 용도, 주요한 기술 및 실제 구현예를 설명한다. 여기서 DB 클러스터라 함은 하나의 DB을 복수개의 서버(또는 가상 서버)상에 구축되는 경우를 지칭한다.
DB 클러스터와 비슷한 형태로 복수개의 독립된 DB가 서러 연계되는 경우가 있다. 이러한 DB는 서로 데이터를 읽거나 쓰게 되는데, DBLink 또는 SQL/MED (Management of External Data)라고 한다. 이러한 형태에 대해서는 이 문서의 설명외로 한다.

2. DB 클러스터의 용도
DB가 제공하는 기능중에서, 하나의 서버만으로 실현이 힘든 기능은 아래의 3가지이다.

고가용성(Transactional)
병렬처리(Analytic)
성능향상(Online)

이러한 분류 방법은 오픈소스 관계형 DB시스템(RDBMS)의 하나인 Postgres의 코어 멤버인 Josh Berkus씨가 제안한 것이다. 현재 PostgreSQL을 사용한 클러스터 기술의 의론의 기반이 되고 있다.

고가용성(Transactional)
무언가의 원인으로 DB가 충돌을 일으킨 경우라도, 단시간내에 실행을 재개가능할 뿐 아니라 데이터의 내용도 유실되지 않도록 하지 않으면 안되는 경우가 상황이 있다. DB의 가용성이란, DB가 동작하고 있는 시간과 정지한 시간의 비율이다. 즉 99.9%또는 99.99%와 같이 표현한다. 가용성 99.99%란 연간 53분간 장애로 정지했음을 의미한다. 99.999%의 가용성이란 5분 정도 정지했음을 의미한다. 서버가 한대인 경우에 장애가 발생하면 미리 백업해 둔 데이터를 복원하고, 백업할 시점으로 부터 장애발생까지의 사이의 갱신로그(트랜젝션 로그)를 적용해서 복구해야 한다. 백업만으로는 백업한 이후에 발생한 변경을 날려 버리기 때문에 로그 등을 이용해서 복구해줄 필요가 있는 것이다.
서버가 하드웨어적인 장애로 충돌한 경우, 새로운 서버로 교체한 후, 데이터베이스를 복원하고, 변경을 적용하게 된다. 이런 경우 소프트웨어 장애로 발생한 충돌에 비해 복구에 많은 시간이 걸리게 되어 수일까지 걸릴 수 있다. 이는 DB 운영에서 있을 수 없는 일이다.
고가용성을 실형하려면 머저, DB 시스템을 구성할 서버나 스토레지 장비를 각각 2대 이상으로 구성해서, 만의 하나 어느쪽인가에 장애가 발생했다고 하더라도 단 시간내에 운용을 재개할 수 있도록 함을 의미한다. 이를 고가용성 클러스터라고 한다.
고가용성 클러스터 구축시의 주의점은 어딘가 하 부분의 문제가 발생했을 때 복구하는데까지 오랜 시간이 걸리지 않도록 해야 한다는 점이다. 한 부분의 문제가 전체 시스템을 정지 시켜 버리는 곳을 Single Point Of Failure, SPOF라고 한다.

병렬처리(Analytic)
데이터웨어하우스(DWH)를 정보원으로 하는 데이터 분석 어플리케이션(BI툴 등)과 같이, 데이터베이스의 내용을 분석하는데 사용하는 어플리케이션이 있다. 이런 경우 분석 대상의 데이터량이 너무 많고(수 기가, 테라 바이트), 사용하는 SQL문이 복잡(10개 이상의 테이블의 조합을 해서 통계를 내거나)하기 때문에 하나의 SQL문 실행에 막대한 시간이 걸린다. 이럴 경우 데이터베이스를 복수 개의 작은 단위로 분해해서 각각을 분석하는 처리를 병렬로 실행해서 결과를 통합하는 것 같은 방법을 사용할 수 있다.

성능향상(Online)
DB 유저수가 막대해 지는 케이스는, Web계 어플리케이션에서 자주 발생하는 케이스이다. 대규모 Web 어플리케이션의 경우 데이터베이스의 복사본을 만들어서 참조 처리는 복사한 DB를 사용하게 하는 방법으로 유저수가 많아지는 것을 대비할 수 있다.

이런식으로 복수개의 서버를 조합해서 위의 3가지 요구를 만족시키는 시스템의 구성형태를 DB 클러스터라고 한다.
아래에 각 요구에 적용한 DB 클러스터에 대해서 설명한다.


Comments