본문 바로가기

Back-End 공부/Database

[Database] 고가용성 DB서버 구성 방법 (클러스터링, 레플리카, 샤딩)

📌 DB 서버구성

  • DB의 사용성에 문제가 생기지 않도록 하는 고가용성 확보를 위한 방안
    • 클러스터링
      • 1대의 스토리지여러대의 서버 운영
      • active/active, active/stanby
      • active/active : 서버 두 대 모두 운영, 로드밸런싱 해줄 수 있는 로드 밸런서가 필요
      • active/stanby : 한 서버 운영, 다른 서버는 대기하고 있다가 가동 중인 서버가 다운되면 active로 동작
      • ex) 스토리지 하나에 프로세스 여러 개 두고, 각 프로세스에서 입력을 받음
    • 레플리카
      • n개의 (스토리지, 서버) 를 운영
      • ex) 스토리지 하나에 프로세스 하나, 스토리지 하나에 프로세스 하나, ... 로 처리됨
    • 샤딩
      • 같은 테이블 스키마를 가진 데이터를 다수의 데이터베이스에 분산하여 저장하는 방법
      • 대규모 테이블을 나눠서 저장해둘 때 사용

 

 

  클러스터링

  • DB를 한 대만 운영 할 경우에 문제점은 DB 서버가 죽으면 관련된 서비스가 전체가 중단
  • 동일한 DB 서버를 두 대를 묶고 두 DB 서버
    • active/active
    • active/stanby
     
  • 프록시 로드 밸런서를 VM 머신 앞 단에 배치(Vip : Virtual IP)하여 부하를 분산 => 로드밸런싱
  • 로드밸런서는 라운드 로빈 방식을 사용함

 

  레플리카

  • 데이터베이스 스토리지 유실에 대한 대안으로 스토리지 까지 복제
  • 아래와 같이 복제만 하는 레플리카 케이스와 복제를 하면서 동시에 slave서버는 select 용도
  • 재해복구를 위한 DR센터 운영
  • 왼쪽 그림 : 한 대의 컴퓨터를 가지고 삭제, 조회, 갱신 다른 서버는 백업만
  • 오른쪽 그림 : 한 대의 컴퓨터를 가지고 삭제, 조회, 다른 서버는 백업 + 조회 => 부하 분산

 

  샤딩

  • 같은 테이블 스키마를 가진 데이터를 다수의 데이터베이스에 분산하여 저장
  • 대규모 시스템에서 성능향상을 위해 사용
  • 데이터베이스와 스토리지를 n개로 분리하여 데이터 분산 저장
  • 고가용성과는 거리가 멀다

 

 

- 샤딩전략 : 다수 DB 분산 전략

  • Hash sharding
    • 해쉬 함수 값을 기준으로 분류 
    • DB 서버가 추가 될 경우 해쉬 함수가 변경
  • Dynamic sharding
    • 범위를 지정해 분류 
    • 목적지 shard와 id range만을 지정하므로, 서버 추가시 용이

 

 

  HA (High Availablity)

HA 하자 ! = 서버 N대 쓰자 !

  • HA(High Availablity)는 고가용성을 뜻하는 것으로 장애없는 지속가능한 서비스를 지칭하고, 서버의 다중화 구성을 의미
  • MySQL 프록시 및 로드 밸런서
    • 사용자의 요청을 분산처리 하는 것이 로드 밸런서(부하분산)
    • 프록시는 사용자의 요청을 서버에 "대리"해서 전달하는것(리버스 프록시라고도 함)
    • 포워드 프록시 : Server -> HAProxy -> Client
    • 포워드 프록시 대표적인 예 : VPN
    • 서버 입장에서 요청이 들어오면 리버스, 요청이 나가면 포워드
    • (리버스) 프록시로 많이 사용되는 것 : nginx
  • HA 구성
    • haproxy는 mysql 멀티서버 구성에서 많이 사용하는 프로그램
      • sudo apt-get install haproxy