TIL

24/02/02 TIL __ 레플리케이션 과 클러스터 그리고 샤딩

GABOJOK 2024. 2. 2. 23:49

 

 

클러스터, 샤딩 이런 용어들이 익숙하지 않아 공부한걸 정리한다. 

 

일단 db에 대해 다시 생각해야 한다. 

db는 단지 db 1개의 덩어리가 아니라 사실은

서버와 스토리지의 구성이다.

db는 서버 역할을 하는 db서버와, 데이터를 저장하는 저장소(스토리지)가 한 세트로 구성되어 있다.

 

 

클러스터링

 

서비스를 제공할 때 db server에 장애가 나면, 서비스가 멈추게 된다.
이것을 방지하기 위해 db서버를 늘리고, 하나의 저장소를 바라보도록 한다.
db서버의 부하가 줄어드는 장점이 있지만,
또 cpu나 메모리 자원 부하도 적어지지만,
병목현상 즉 몰려서 대기시간이 길어지는 상황이 생길 수 있다. 또 비용적 이슈도 있다.

클러스터링을 하는 다양한 방법이 있는데,
active-active, active-stanby 등이 있다.
active-active
- 두 서버 모두 활성화.
- 대기시간이 길어지는 상황 발생(병목현상)
active-stanby
- 하나의 서버만 활성화.
- 병목현상이 해결되는 장점이 있다.
- 이 서버에 장애가 발생하면 fail over진행 (fail over시 데이터 유실 가능성.)
- 스탠바이 하던 다른 서버를 엑티브 상태로 변환.
- fail over 이뤄지는 동안에는 영업손실이 필연적으로 발생 하고,
- db서버를 2대 구비하는데, 효율은 이전보다 1/2정도 안나온다는 단점이 있다.

 

 

 

 

레플리케이션

  • 클러스터링을 진행시 fail over 동안 데이터 유실 가능성 있다.
  • 레플리케이션은 master-slave개념을 기억하자.
  • 마스터에 작업하는 데이터를 슬레이브로 복제한다.
  • 마스터는 쓰기만 수행, 슬레이브는 읽기만 수행한다.
  • 데이터 유실을 방지할 수 있고, 부하도 분산시킬수 있다.
  • 그러다 단점으로는 서버비용 추가 발생과, 데이터 양이 많아지면 데이터를 찾는데 오래 걸린다.
  • 처리방식을 동기로 했을때, 비동기로 했을때 다른데
    • 동기방식은 replication시 속도가 느려진다.
    • 비동기방식은 데이터 동기화 하기 때문에 일관성 있는 데이터를 얻지 못할 수 있다.
  • 목적은 이렇다
    • 데이터의 ==안정성.
    • ==읽기 성능 개선
    • 가용성 향상.

아래 그림에서 셀렉트는 slave에게 시킨다.

 

 

 

 

샤딩

  • 데이터를 수평적으로 분할하는 방식이다
  • 이 분할은 하나의 데이터 베이스 안에 테이블을 기준으로 할 수도 있고, 전체 데이터베이스 수준에서 일어날 수 도 있다.
  • 테이블 샤딩과, 데이터베이스 샤딩으로 나눠진다.
  • 데이터베이스 샤딩은
    • 데이터베이스 스토리지를 여러 조각으로 나누어 각 조각을 다른 서버에서 관리하게 하는것.
    • 데이터베이스 서버와, 데이터베이스 스토리지 모두를 나누게 된다.
    • 각 서버는 데이터의 일부만을 관리한다.
    • (이에 반해 레플리케이션은 모든 레플리카가 동일한 데이터 세트를 가지게 된다. )
  • 테이블 샤딩은 테이블의 데이터를 여러 서버에 분산시키는 걸 말한다.
  • 샤드 키를 기준으로 나누어 저장.

 

 

 

참고한 블로그
https://jordy-torvalds.tistory.com/entry/Clustering-vs-Replication-vs-Sharding

https://techblog.woowahan.com/2687/