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로 보내는 역할이 필요
- active/active
- 레플리카
- 데이터베이스 스토리지 유실에 대한 대안으로 스토리지 까지 복제
- 아래와 같이 복제만 하는 레플리카 케이스와 복제를 하면서 동시에 slave서버는 select 용도
- 주 서버는 Master, 부 서버는 Slave라고 함
- 재해복구를 위한 DR센터 운영 (같은 데이터베이스 센터에 존재하는 게 아니고 다른 원격지에 Slave 서버를 놔둬야 복구가 가능)
- 샤딩
- 같은 테이블 스키마를 가진 데이터를 다수의 데이터베이스에 분산하여 저장
- 대규모 시스템에서 성능향상을 위해 사용
- 데이터베이스와 스토리지를 n개로 분리하여 데이터 분산 저장(복제가 아님) - 고가용성과는 크게 상관 없음
- 샤딩전략
- Hash sharding
- DB 서버가 추가 될 경우 해쉬 함수가 변경 - 서버 추가 시 ID%4에 대한 값이 틀어지므로 바꿔야 함
- Dynamic sharding
- 목적지 shard와 id range만을 지정하므로, 서버 추가시 용이 - 범위만 추가로 늘리면 됨
- Hash sharding
- 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
- backend mysql_back
- 클라이언트 접속
- 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)
- project_overview
- readme
- 조별 프로젝트 진행
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 |