데이터베이스 클러스터의 개요
개념
- 데이터를 통합할 때 성능 향상과 가용성을 높이기 위해 DB 차원의 파티셔닝(Partitioning) 또는 클러스터링(Clustering)을 이용한다.
- 파티셔닝은 용량이 큰 테이블이나 인덱스를 관리하기 쉬운 단위로 분리하는 방법이다
- 클러스터링은 동일한 성격의 데이터를 동일한 데이터 블록에 저장하는 방법으로, 자주 같이 사용되는 데이터를 같은 위치에 저장시키는 기법이다.
장점
- 파티션 사이의 병렬 처리를 통해 빠른 검색 및 처리 성능 얻음
- 성능의 선형적인 증가 효과
- 특정 파티션의 장애가 발생하더라도 서비스가 중단되지 않는 고가용성(High Availability, HA) 확보
파티셔닝의 종류
파티셔닝은 DB 구성 형태에 따라 단일 서버 내의 파티셔닝과 다중 서버 사이의 파티셔닝으로 구분되며, 리소스 공유 관점으로는 공유 디스크(Shared Disk)와 무공유(Shared Nothing)로 구분
무공유(Shared Nothing)
각 DB 인스턴스는 자신이 관리하는 데이터 파일을 자신의 로컬 디스크에 저장하며, 노드간 공유하지 않는다.
개별 인스턴스와 노드는 완전히 분리된 데이터의 서브 집합에 대한 소유권을 가지며, 각 데이터는 소유권을 가진 인스턴스가 처리한다. 무공유 구조는 노드 확장에 제한이 없지만, 노드에 장애가 발생할 경우를 대비해 별도의 장애허용성(폴트톨러런스, Fault-Tolerance)를 구성해야 한다.
Oracle RAC(Real Application Cluster)를 제외한 대부분의 DB 클러스터가 무공유 방식을 채택하고 있다.
공유 디스크(Shared Disk)
데이터 파일은 논리적으로 모든 데이터베이스 인스턴스 노드들과 공유하며, 각 인스턴스들은 모든 데이터에 접근 가능하다.
데이터를 공유하려면 SAN(Storage Area Network) 같은 공유 디스크가 필요하며, 모든 노드가 수정 가능하기에 동기화 작업을 위한 별도의 커뮤니케이션 채널 필요
공유 디스크는 하나의 노드만 살아 있어도 서비스가 가능하기 때문에 높은 수준의 장애허용성(Fault-Tolerance)을 제공한다. 다만 클러스터가 커지게 될 경우 디스크 영역에서 병목 현상이 발생하는 문제가 존재한다. Oracle Rac이 공유 디스크 방식을 이용하고 있다.
데이터베이스별 파티셔닝
Oracle RAC 데이터베이스 서버
오라클(Oracle) RAC 데이터베이스 서버는 클러스터의 모든 노드에서 실행되며, 데이터는 공유 스토리지에 저장된다. 응용 프로그램은 특정 노드가 아니라 RAC 클러스터에 연결하며, RAC은 클러스터의 모든 노드에 로드를 고르게 분산한다
가용성
어떤 노드가 장애를 일으키면 나머지 노드에서 문제 없이 계속 실행된다. 장애 노드에 연결된 사용자는 다른 노드에 다시 연결되어 클러스터의 나머지 노드에 분산된다.
확장성
추가 처리 성능이 필요할 경우, 새 노드를 클러스터에 쉽게 추가할 수 있으며, 추가 될 경우 노드간 균형을 위해 로드가 다시 분산된다. Oracle 10g R2 RAC은 클러스터 내에 최대 100개 노드를 지원한다.
비용 절감
저가형 상용 하드웨어(CPU 4개 미만)의 클러스터에서도 고가의 SMP 시스템만큼 효율적으로 응용 프로그램을 실행하여 하드웨어 비용 절감 가능 (ex: 4CPU의 16노드 클러스터를 사용하면 동급 성능의 64CPU SMP 시스템에 비해 비용을 크게 절감 가능)
IBM DB2 ICE(Integrated Cluster Environment)
DB2는 CPU,메모리,디스크를 파티션별로 독립적으로 운영하는 무공유 방식의 클러스터링을 지원한다. 애플리케이션은 분산된 DB를 하나의 데이터베이스(Single View Database)로 보게 되며, 어느 파티션에 존재하는지 알 필요가 없다. 데이터와 사용자가 증가하면 기존 시스템에 노드를 추가하고 데이터를 재분배하여 시스템의 성능과 용량을 일정하게 유지한다.
DB2는 파티셔닝을 어떻게 하느냐에 따라 성능의 차이가 발생할 수 있으며, 노드에 장애 발생시 별도의 장애복구(Failover) 매커니즘을 추가해야 한다. DB2는 이러한 문제를 극복하기 위해 공유 디스크 방식을 사용하는데 평상시에는 특정 노드에 의해서만 서비스되지만, 장애 상황이 발생하면 다른 노드가 해당 디스크에 접근하여 처리하는 방식으로 가용성을 보장한다.
마이크로소프트(Microsoft) SQL Server
SQL Server는 연합(Federated) 데이터베이스 형태로 여러 노드에 확장할 수 있는 기능을 제공한다. 연합 DB는 디스크 등을 공유하지 않는 독립된 서버에서 실행되는 서로 다른 DB들 간의 논리적인 결합이며, 네트워크를 이용하여 연결된다.
물리적으로 분산된 각 노드에 테이블을 생성한 후 데이터를 수평적으로 분할된다. 모든 파티션에 대해 union all을 이용하여 논리적인 뷰(View)를 구성하는 방식으로 싱글 뷰를 제공한다. SQL Server에서는 이러한 뷰를 DVP(Distributed Partitioned View)라 한다.
전역 스키마(Global Schema) 정보가 없기에 모든 노드를 액세스 해야 하는 단점이 있고, 노드가 많거나 추가/삭제의 경우 파티션을 새로해야 하는 문제가 존재하며, failover에 대해서는 별도로 구성해야 한다. SQL Server는 Active-Active가 아닌 Active-Standby 방법을 제공한다.
MySQL
MySQL 클러스터는 무공유 구조에서 메모리(최근에는 디스크도 제공) 기반 데이터베이스의 클러스터링을 지원하며, 특정한 HW 및 SW를 요구하지 않고 병렬 서버 구조로 확장이 가능하다.
MySQL 클러스터는 관리 노드(Management Node), 데이터 노드(NDB Node), MySQL 노드로 구성되며 아래와 같은 역할을 수행한다.
노드 | 역할 |
관리 노드 | - 클러스터를 관리하는 노드로 클러스터 시작과 재구성 시에서만 관여 |
데이터 노드 | - 클러스터의 데이터를 저장 |
MySQL 노드 | - 클러스터 데이터에 접근을 지원 |
MySQL 클러스터는 가용성을 높이기 위해 데이터를 다른 노드에 복제한다.
MySQL 클러스터 구성 시 제한 사항
- 파티셔닝은 LINEAR KEY 파티셔닝만 사용 가능
- 클러스터 참여 노드 수는 255로 제한, 데이터 노드는 최대 48개까지만 가능
- 트랜잭션 수행 중 롤백을 지원하지 않으므로, 작업 수행 중 문제 발생 시, 전체 트랜잭션 이전으로 롤백
- 메모리 부족 문제로 여러 개의 트랜잭션으로 분리해 처리하는 것이 좋음(ex: Delete from ~ limit ~)
- Column 명 길이는 31자, DB와 테이블명 길이는 122까지로 제한, 메타데이터(속성정보)는 2만 320개까지만 가능
- 클러스터내 최대 테이블 수는 2만 320개
- 운영 중에 노드를 추가/삭제할 수 없음
연관 포스팅
'IT 자격증 > 데이터 분석 전문가(ADP)' 카테고리의 다른 글
NoSQL과 구글 빅테이블(Google BigTable) - ADP #10 (0) | 2022.07.25 |
---|---|
분산 파일 시스템 (Distributed File System) - ADP #8 (0) | 2022.05.02 |
대용량 비정형 데이터 처리 - ADP #7 (0) | 2022.05.01 |
데이터 연계 및 통합 기법 - ADP #6 (0) | 2022.04.30 |
EAI(Enterprise Application Integration) - ADP #5 (0) | 2022.04.01 |