본문 바로가기
Database

[MariaDB] DB 서버 구성

by qoth_0 2023. 11. 27.
728x90
반응형

DB 서버 구성(아키텍처)

  • DB의 사용성에 문제가 생기지 않도록 하는 고가용성(HA) 확보를 위한 방안(하나가 문제가 생길 때 대처 가능하도록)
    • 클러스터링
      • 1대의 스토리지(저장소)와 여러대의 서버(프로그램) 운영
      • active/active(둘 다 활성화), active/stanby(하나만 활성화)
      • active/active 시 로드밸런싱(한 곳으로 부하가 몰리지 않도록 분산해주는 것) 필요
    • 레플리카
      • n개의 (스토리지, 서버) 를 운영
      • 하나의 스토리지와 하나의 서버가 한쌍으로 운영됨(이 세트가 n개)
    • 샤딩
      • 같은 테이블 스키마를 가진 데이터를 다수의 데이터베이스에 분산하여 저장하는 방법
      • 분산 시 어떤 데이터베이스에 내가 원하는 데이터가 있는지 한번에 찾기 위한 규칙(기준)이 필요 - 샤딩 전략
  • 클러스터링
    • DB를 한 대만 운영 할 경우에 문제점은 DB 서버가 죽으면 관련된 서비스가 전체가 중단
    • 동일한 DB 서버를 두 대를 묶고 두 DB 서버
      • active/active
        • 로드밸런서 필요 - 주로 프록시 이용(nginx)
        • vip(virtual ip) 필요 - active1이 101, active2가 102일 경우 사용자가 원격 접속시 이 ip를 알아야 함, 하지만 이 경우 해당 서버에만 접속하기 때문에 고가용성 설계하는 이유가 없어짐(둘 다 적절히 부하 분산하며 접속해야 함) - 따라서 사용자가 로드 밸런서의 ip인 vip로 100번으로 접속하게 하여 두 서버로 로드밸런싱 해주는 것 → 도메인 생성 시 vip로 생성
          • 이때, 로드밸런서를 위한 서버를 새로 만들지 않고 101 서버에 nginx를 깔아서 이를 vip로 사용할 수 있다.
      • active/stanby
        • 101이 죽으면 102를 active로 바꿔줌
        • 이때도 101로 보내던 것을 102로 보내는 역할이 필요
  • 레플리카
    • 데이터베이스 스토리지 유실에 대한 대안으로 스토리지 까지 복제
    • 아래와 같이 복제만 하는 레플리카 케이스와 복제를 하면서 동시에 slave서버는 select 용도
      • 주 서버는 Master, 부 서버는 Slave라고 함
    • 재해복구를 위한 DR센터 운영 (같은 데이터베이스 센터에 존재하는 게 아니고 다른 원격지에 Slave 서버를 놔둬야 복구가 가능)
      왼쪽은 Slave서버를 백업용도로만 사용, 오른쪽은 백업 및 조회용도로도 사용(부하 분산 가능)
  • 샤딩
    • 같은 테이블 스키마를 가진 데이터를 다수의 데이터베이스에 분산하여 저장
    • 대규모 시스템에서 성능향상을 위해 사용
    • 데이터베이스와 스토리지를 n개로 분리하여 데이터 분산 저장(복제가 아님) - 고가용성과는 크게 상관 없음
    • 샤딩전략
      • Hash sharding
        • DB 서버가 추가 될 경우 해쉬 함수가 변경 - 서버 추가 시 ID%4에 대한 값이 틀어지므로 바꿔야 함
      • Dynamic sharding
        • 목적지 shard와 id range만을 지정하므로, 서버 추가시 용이 - 범위만 추가로 늘리면 됨
  • HA구성
    • HA(High Availablity)는 고가용성을 뜻하는 것으로 장애없는 지속가능한 서비스를 지칭하고, 서버의 다중화 구성을 의미
    • MySQL 프록시 및 로드 밸런서
      • 사용자의 요청을 분산처리 하는 것이 로드 밸런서(부하분산) - HAProxy
      • 프록시는 사용자의 요청을 서버에 "대리"해서 전달하는것(리버스 프록시라고도 함- 서버입장에서 나가는 게 아닌 들어오는 것이기 때문, nginx를 리버스 프록시 용도로 많이 이용)
    • haproxy는 mysql 멀티 서버 구성에서 많이 사용하는 프로그램
      • sudo apt-get install haproxy
    • HA 구성 절차
      • mariadb 서버 2대를 3306, 3307 포트로 실행 (ip주소가 다르면 포트번호는 같아도 됨)
      • 사용자의 엔드포인트로 사용하고자 하는 가상의 IP를 지정
        • 각각의 서버가 다른 IP에 존재할 수 있으므로 단일 엔드포인트 필요
        • 192.168.1.100이라 가정
      • haproxy config 파일 생성
        • backend mysql_back

          balance roundrobin

          server mysql1 192.168.1.101:3306 check

          server mysql1 192.168.1.102:3307 check

      • 클라이언트 접속
        • mysql -u username -p -h 192.168.1.100 -P 3306 (-h는 원격접속 호스트명, -P는 포트)
        • 로컬일 경우 mysql -u root -p만 해도 됨

  • 데이터 모델링 프로젝트

    • 조별 프로젝트 진행
      • 개발하고자 하는 서비스 선정 및 분석
      • 데이터 베이스 설계 및 구축
      • 테스트
      • 최종발표
    • 산출물
      • readme
        • 팀원, 프로젝트 개요, 요구사항 요약, 개념적/논리적 모델링, 주요 쿼리 요약본
      • 폴더 구성
        • project_overview
          • 프로젝트 개요 및 요구사항
        • data_modeling
          • ERD
          • 릴레이셔널 스키마
        • 쿼리
          • 테이블 생성 쿼리문(DDL)
          • 사용자 관련 쿼리문(DCL)
          • 데이터 추가 쿼리문(DML)

728x90
반응형

'Database' 카테고리의 다른 글

[Redis] 설치, Redis란  (0) 2023.11.27
[MariaDB] 정규화  (2) 2023.11.27
[MariaDB] DB 설계  (1) 2023.11.27
[MariaDB] DB Dump  (1) 2023.11.24
[MariaDB] 저장 프로시저  (1) 2023.11.24