본문 바로가기

DB

데이터베이스 클러스터링/레플리케이션/샤딩 차이점

728x90
반응형

데이터베이스는 서버역할을 하는 Database서버와 데이터를 저장하는 저장소가 한 세트로 구성되어있다.

서비스를 제공할 때 Database Server에 장애가 나면 서비스가 멈추게 된다.

그것을 방지하기 위해서 백업전략을 사용할 수 있다.

 

간단한 방식으로 서비스 DB장애를 예방할 수 있는데 클러스터링이 그 방법 중 하나이다.

 

클러스터링

위와 같은 방식으로 구성하는 것을 클러스터 구성이라고 한다.

동일한 DB서버가 한 저장소를 바라보고, Active-Active상태로 구성이 되면 한 대가 장애가 나도 다른 한 대로 서비스 운영이 가능하다.

 

한 대만 부담하던 CPU나 메모리의 부담이 두 대로 나눠지기 때문에 DB서버의 부하가 줄어든다.

다만, 두 DB서버가 한 저장소를 공유하기 때문에 저장소에 병목현상이 생길 수 있다. 

 

해당 단점을 보완하기 위해서 한 대만 Active상태로 두고 나머지 서버를 Standby로 두는 방법을 Active-Standby라고 한다.

DB서버에 장애가 발생하면 Fail over로 다른 서버를 Active상태로 변환단다.

 

그렇게 하면 병목 현상을 해결할 수 있지만 fail over가 되는 잠깐의 시간동안 데이터가 유실 될 수 있다.

 

레플리케이션(Replication)

클러스터링의 단점은 잠깐의 fail over동안 데이터가 유실 될 수 있다는 점이다.

그리고 DB서버는 두 대로 운영하면서 저장소는 하나로 괜찮을까 라는 생각이 들 수 있는데 

이로인해 나온 개념이 레플리케이션이다.

 

Master -slave개념이다.

마스터에 작업하는 데이터를 슬레이브로 복제한다.

데이터손실을 방지할 수 있고 마스터에 Insert, update, delete작업을 하고 slave서버에서 select를 함으로 

DB서버의 부하를 분산할 수 있다.

 

단점으로는 서버비용이 추가로 발생하는 것이고 데이터의 양이 엄청나게 많아질 경우 데이터를 찾는데 오래 걸린다는 점이다.

 

샤딩

샤딩은 테이블을 특정한 기준으로 나눠서 저장하고 검색하는 개념이다.

shard key를 기준으로 데이터를 분산해서 저장한다.

 

hard sharding

샤드 수 만큼 hash함수를 사용해서 나온 결과에 따라 DB에 저장하는 방식이다.

구현이 간단하지만 확장성이 낮다.

DB서버가 추가되면 해쉬함수가 변경되어야 하기 때문에 기존 데이터의 정합성이 깨진다.

 

Dynamic Sharding

테이블 형식의 데이터를 바탕으로 샤드를 결정해서 적절하게 저장하는 방식이다.

단순히 키만 추가해주면 되기 때문에 확장이 쉽다. 

단일 장애점이 되기 때문에 장애가 발생하면 문제가 될 수 있다. 

 

Entity Group

연관성있는 엔티티를 한 샤드에 두는 방식이다.

같은 샤드에 있는 데이터끼리 조회하면 빠르지만 다른 샤드에 있는 데이터를 함께 조회하면 느려진다. 

 

728x90
반응형

'DB' 카테고리의 다른 글

redis cluster 구성(windows)  (0) 2021.10.12
MongoDB 명령어 정리 (createUser, DB, drop ..)  (0) 2021.02.18