1. 데이터베이스 클러스터링

데이터베이스 클러스터링(Database Clustering)은 클러스터링은 동일한 데이터베이스를 여러 대의 서버가 관리하도록 클러스터를 구축하는 것을 뜻한다. 데이터베이스 시스템의 가용성, 성능, 확장성을 향상시키기 위해 여러 대의 데이터베이스 서버를 하나의 클러스터로 구성하는 기술이다. 클러스터링은 고가용성(HA) 환경을 구축하고, 부하 분산(load balancing)과 장애 복구(fault tolerance)를 지원하기 위해 사용된다. 여러 서버를 하나의 클러스터로 묶어 데이터베이스의 성능을 향상시키고, 하나의 서버에서 발생할 수 있는 장애를 방지한다.

다수의 서버가 하나의 시스템처럼 작동하여 부하를 분산하거나, 서비스 가용성을 높이는 구조

1.1. 클러스터링의 주요 목표

  • 가용성(Availability): 데이터베이스 서버 중 하나가 장애가 발생해도 다른 서버가 이를 대신 처리하여 시스템을 지속적으로 가동시킨다.
  • 성능 향상(Performance Improvement): 여러 서버가 동시에 데이터를 처리하여, 부하를 분산하고 성능을 향상시킨다.(Load Balancing)
  • 확장성(Scalability): 서버를 추가함으로써 시스템 용량을 확장할 수 있다.
  • 장애 복구(Fault Tolerance): 하나의 서버에서 장애가 발생해도 다른 서버가 이를 대체하여 데이터 손실 없이 시스템을 운영할 수 있다.

1.2. 클러스터링의 종류

1.2.1. 활성-대기(Active-Passive) 클러스터링

활성-대기 클러스터링에서는 하나의 서버만 활성 상태로 동작하고, 나머지 서버들은 대기 상태로 있으며 장애가 발생했을 때 대기 중인 서버가 활성 서버를 대체한다. 이 방식은 장애가 발생하면 빠르게 대처할 수 있지만, 대기 중인 서버는 리소스를 유휴 상태로 유지하므로 자원을 비효율적으로 사용할 수 있다.

1.2.2. 활성-활성(Active-Active) 클러스터링

활성-활성 클러스터링에서는 모든 서버가 동시에 활성 상태로 동작하고, 부하를 분산하여 데이터를 처리한다. 이 방식은 성능을 최적화할 수 있으며, 하나의 서버에 장애가 발생하더라도 다른 서버가 즉시 대체하여 시스템이 계속해서 동작한다. 하지만 데이터 일관성 유지와 충돌 해결을 위한 추가적인 관리가 필요하다.

1.2.3. 공유 디스크 클러스터링(Shared Disk Clustering)

공유 디스크 클러스터링은 여러 서버가 동일한 디스크를 공유하여 데이터를 저장하는 방식이다. 이 방식은 데이터 일관성을 유지하는 데 유리하지만, 디스크 I/O 성능에 제약이 있을 수 있다.

1.2.4. 공유 nothing 클러스터링(Shared Nothing Clustering)

공유 nothing 클러스터링은 각 서버가 독립적인 디스크를 사용하여 데이터를 저장하는 방식이다. 이 방식은 성능이 뛰어나지만, 데이터 일관성을 유지하는 데 추가적인 관리가 필요하다.

1.3. 클러스터링의 단점

  • 클러스터링은 여러 대의 서버가 데이터베이스를 공유하므로 병목현상이 발생해 더 많은 비용이 발생할 수 있다. 특히, Active-Active 방식은 모든 서버가 활성화된 상태이므로 병목 현상이 더 심하게 발생할 수 있다. 이러한 단점을 완화시킬 수 있는 방식이 바로 Active-StandBy 방식이다.

  • 클러스터링 방식은 DB 서버의 장애를 Fail-Over하는 방식이라고 할 수 있다. 하지만 만약 데이터베이스 자체에 장애가 일어난 경우 리플리케이션이 필요하다.

2. 데이터베이스 리플리케이션

데이터베이스 리플리케이션(Database Replication)은 말 그대로 복제본 데이터베이스를 운용하는 것이다. 한 데이터베이스 서버에서 변경된 데이터를 다른 데이터베이스 서버로 복제하여 여러 서버에 동일한 데이터를 분산 저장하는 기술이다. 리플리케이션을 통해 데이터의 가용성을 높이고, 읽기 성능을 향상시킬 수 있다.

2.1. 리플리케이션의 주요 목표

  • 고가용성(High Availability): 여러 데이터베이스 서버에서 동일한 데이터를 제공하므로, 하나의 서버가 장애가 발생해도 다른 서버에서 데이터를 제공할 수 있다.
  • 성능 향상(Performance Improvement): 읽기 요청을 여러 서버로 분산하여 읽기 성능을 향상시킨다.
  • 데이터 백업 및 복구(Data Backup and Recovery): 여러 서버에 데이터를 복제하여 데이터 손실을 방지하고, 빠른 복구를 지원한다.
  • 부하 분산(Load Balancing): 읽기 요청을 여러 서버로 분산시켜 데이터베이스 서버의 부하를 줄이고 성능을 향상시킨다.

2.2. 리플리케이션의 종류

2.2.1. 마스터-슬레이브(Master-Slave) 리플리케이션

마스터-슬레이브 리플리케이션은 하나의 마스터 서버에서 모든 쓰기 작업을 수행하고, 슬레이브 서버는 마스터 서버에서 발생한 변경 사항을 실시간으로 복제하여 읽기 작업을 처리하는 방식이다. 이 방식은 읽기 성능을 향상시키지만, 쓰기 작업은 마스터 서버에서만 처리되므로 쓰기 성능이 제한될 수 있다.

2.2.2. 마스터-마스터(Master-Master) 리플리케이션

마스터-마스터 리플리케이션은 여러 서버가 모두 마스터 역할을 수행하고, 서로 간에 데이터를 복제하는 방식이다. 이 방식은 읽기와 쓰기 작업을 모두 분산시킬 수 있어 성능을 향상시킬 수 있지만, 데이터 충돌 및 일관성 유지에 대한 관리가 복잡하다.

2.2.3. 동기식 리플리케이션(Synchronous Replication)

동기식 리플리케이션은 데이터가 변경될 때, 모든 복제본 서버가 변경 사항을 즉시 반영하도록 하는 방식이다. 이 방식은 데이터 일관성을 보장하지만, 네트워크 지연이나 서버 장애가 발생할 경우 성능 저하가 발생할 수 있다.

2.2.4. 비동기식 리플리케이션(Asynchronous Replication)

비동기식 리플리케이션은 데이터 변경 사항을 즉시 복제하지 않고, 일정 시간 후에 복제하는 방식이다. 이 방식은 성능이 뛰어나지만, 데이터 일관성이 보장되지 않으므로 일부 데이터가 복제되지 않을 수 있다.

2.3. 리플리케이션의 주요 고려 사항

  • 데이터 일관성: 리플리케이션을 사용할 때 데이터의 일관성을 유지하는 것이 중요하다. 동기식 리플리케이션은 일관성을 보장하지만 성능에 영향을 미칠 수 있고, 비동기식 리플리케이션은 성능은 좋지만 일관성 문제를 일으킬 수 있다.
  • 충돌 해결: 마스터-마스터 리플리케이션에서 발생할 수 있는 데이터 충돌을 해결하는 방법을 고려해야 한다. 충돌 해결 전략에는 우선순위 기반 해결, 타임스탬프 비교 등이 있다.
  • 네트워크 대역폭: 리플리케이션은 네트워크를 통해 데이터를 복제하기 때문에 충분한 대역폭이 확보되어야 한다. 대역폭이 부족하면 성능 저하가 발생할 수 있다.

리플리케이션이 이루어진 Slave 데이터베이스는 비동기(Asynchronous) 방식으로 Master 데이터베이스와 동기화 한다. 따라서 두 데이터베이스 간의 데이터 동기화가 보장되지 않아 일관성에 문제가 생길 수 있다.

3 샤딩(Sharding)

샤딩은 분산 데이터베이스 환경에서 데이터 탐색속도를 올리기 위해 테이블을 특정 기준으로 나눠서 저장 및 검색하는 것이다. 샤딩의 핵심은 Data를 어떻게 잘 분산 시켜 저장할 것인지, 그리고 어떻게 잘 읽을 것인지에 대한 결정이다. 어떻게 잘 분산 시켜 저장할지에 기준이 되는 것을 Shard Key라고 한다.

3.1. 샤딩의 주요 목표

  • 수평적 확장(Scalability): 데이터가 커질수록 새로운 샤드를 추가해 시스템을 확장 가능.
  • 성능 최적화: 요청을 분산시켜 개별 서버의 부하를 줄임.

3.2. 샤딩의 종류

3.2.1. Hash Sharding

샤드의 수 만큼 Hash 함수를 사용 해서 나온 결과에 따라 DB 서버에 저장하는 방식

  • 장점: 구현이 단순하다
  • 확장성이 낮다, DB 서버가 추가 되면 해쉬 함수가 변경되어야 함으로 기존의 데이터 정합성이 깨진다.

3.2.2. Dynamic Sharding

로케이터 서비스가 테이블 형식의 데이터를 바탕으로 샤드를 결정해서 적절히 저장 하는 방식으로 Hash Sharding의 확장성 문제를 해결가능하다.

  • 장점: 확장성이 좋다.
  • 단점: 로케이터 서비스가 단일 장애점이 되므로, 로케이터 서비스에 장애가 발생하면 나머지 샤드 또한 문제가 발생하게된다.

3.3.3. Entity Group

연관성이 있는 엔티티를 한 샤드에 두는 방식이다. 데이터를 분할하여 여러 데이터베이스 서버에 나누어 저장하는 기tnffh 각 샤드(Shard)는 데이터의 특정 부분만을 저장하며, 고유한 서브셋을 관리한다.

  • 장점: 같은 샤드에 있는 데이터를 조회할 때는 효과적이다.
  • 단점: 다른 샤드에 있는 데이터를 함께 조회할 때는 오히려 성능이 떨어진다.

4. 클러스터링과 리플리케이션의 비교

특성 클러스터링 리플리케이션
데이터 일관성 일반적으로 높은 일관성 유지 동기식: 높은 일관성 / 비동기식: 일관성 낮음
장애 복구 장애가 발생한 서버를 다른 서버가 대체 마스터 서버에 장애 발생 시 복제본 서버에서 데이터 제공
성능 향상 부하 분산을 통한 성능 향상 읽기 부하 분산을 통한 성능 향상

5. 결론

클러스터링과 리플리케이션은 데이터베이스 시스템의 성능, 가용성 및 확장성을 향상시키는 중요한 기술이다. 클러스터링은 서버 간의 협력을 통해 성능을 향상시키고, 장애를 복구할 수 있으며, 리플리케이션은 데이터의 중복 저장을 통해 읽기 성능을 개선하고, 고가용성을 제공한다. 각 기술의 특성과 구현 방법을 잘 이해하고 적절한 환경에 맞춰 사용하는 것이 중요하다.

참조