3. 2018.02.28 OPEN LAB
이중화를 안했을 경우....
▸만약 VideoTag 서비스가 DB서버를 한개만 쓰고 있다고 가정
해 봅시다. 그런데 갑자기 DB서버가 프로세스가 멈추거나 고
장이 났다면..?
▸프로세스가 죽었으면 이는 불행 중 다행이다. 프로세스가 죽
었을 동안 이용은 못하지만 프로세스만 다시 살리면 어느정도
복구는 가능하다.
▸하지만 DB서버가 물리적으로 고장 났다고 생각해보자. 고치
는 것도 어려울 뿐더러 시간도 오래 걸린다.
▸위와 같은 상황을 대비하기 위해, 그리고 효율성을 높이기 위
해 이중화는 필요하다. 그렇다면 어떻게 진행 해야 하는것일
까...?
4. 2018.02.28 OPEN LAB
DB 서버 이중화
▸그렇다면 이중화는 어떻게 진행 해야 할까..?
▸간단하다. 웹 서버를 이중화 하는 것처럼 DB 서버도 여러개를 두면
된다.
▸다만.. DB서버를 여러개를 만드는 것은 어렵지 않다. 하지만 DB에
서 가장 중요한것은 바로 데이터이다. 데이터를 어떻게 동기화 시
키느냐가 DB 서버 이중화의 핵심 포인트이다. 그렇다면 어떤 방법
이 있을까..?
5. 2018.02.28 OPEN LAB
REPLICAION,,,?
▸응답, 뒤로 젖혀짐, 사본, 복제 라는 뜻을 가지고 있다.
▸일반적으로 Computer Engineering에서 리플리케이션은 데이
터를 실시간으로 복제하는 것을 말한다.
▸즉, 데이터 백업을 물리적으로 다른 서버에 실시간으로 한다
는 것을 말한다.
▸MySQL 3.23.15 부터 지원, 3.23.31부터 안정화 되었다.
6. 2018.02.28 OPEN LAB
REPLICATION의 종류
▸Replication를 이용한 구현은 대표적으로 아래 3가지가 있다.
▸Master & Slave Replication
▸Dual-Master Replication
▸Dual-Master & Slave Replication
▸여기서 Master는 데이터의 갱신/참조 두가지 종류의 쿼리 모
두를 받아 들이는 서버를 말하며, Slave는 참조 쿼리만 받아
들이는 서버를 말한다.
7. 2018.02.28 OPEN LAB
REPLICATION의 원리[1] - 3개의 쓰레드.
▸Replication은 3개의 쓰레드를 사용해서 구현된다. Master에서 생성
되는 쓰레드 1개와 Slave에서 생성되는 2개의 쓰레드(I/O 쓰레드,
SQL 쓰레드) 이다.
▸우선 START SLAVE 라는 명령어로 Slave는 I/0쓰레드가 생성되고 이
I/O 쓰레드는 Master 로부터 바이너리 로그 파일을 요청 한다. 그러면
Master는 쓰레드를 하나 생성해서 바이너리 로그 파일을 Slave로 전
달하고, I/O 쓰레드가 해당 내용을 받아서 릴레이 로그를 생성한다. 그
러면 Slave의 SQL 쓰레드는 릴레이 로그를 읽어서 로그 안에 있는 명
령문을 Slave에서 실행시켜 데이터를 동기화 한다.
▸하나의 Master는 접속된 Slave 별로 하나의 쓰레드를 생성하고, 각
Slave는 자신만의 I/O 쓰레드와 SQL 쓰레드를 가진다.
8. 2018.02.28 OPEN LAB
REPLICATION의 원리[2] - 바이너리 로그
▸바이너리 로그에는 데이터를 지금 또는 나중에 업데이트 하는 모든
명령문이 이벤트 형태로 저장된 로그 파일이다.
▸SELECT, SHOW와 같은 참조 명령문은 기록되지 않으며 각 명령문
이 데이터를 업데이트하는 소비 시간 정보를 가지고 있다.
▸바이너리 로그의 목적은 DB 장애 발생시 데이터를 복구하거나,
Replication 구성시 Slave로 보내져야 하는 명령문을 기록하기 위해서
이다
▸보통 host_name.nnnnnn 과 같이 생성 되며 재시작 될때만다 로그 파
일이 1씩 증가 된다.
▸SHOW binary logs; 명령어로 생성된 로그를 확인 할 수 있다.
9. 2018.02.28 OPEN LAB
REPLICATION의 원리[3] - 릴레이 로그
▸릴레이 로그는 Slave 에서 생성되는 로그 파일이다. Slave의 I/O쓰
레드가 Master로부터 갱신 로그를 수신해서 슬레이브 측에 저장한
로그 입니다.
▸이 갱신 로그를 Slave의 SQL쓰레드가 모두 처리해서 Master와
Slave의 동기화를 진행 합니다.
▸또한 Master에서 생성된 바이너리 로그와 포맷 형식이 같으나, 바
이너리 로그와는 달리 SQL 쓰레드가 모든 이벤트를 처리하면 해당
로그파일을 삭제 합니다.
▸데이터 복제를 위해서 Slave는 릴레이 로그에서 어디까지 처리 되
었는지를 알아야 하는데 이 정보를 포지션 정보라고 한다.
10. 2018.02.28 OPEN LAB
REPLICATION의 원리[4] - 포지션 정보
▸Slave는 리플리케이션을 완료한 위치정보를 알고 있습니다.
그러므로 Slave를 재부팅 한다던가 종료 되었을때 다시 재가
동 된다 하더라도 Slave는 종료한 시점부터 다시 데이터를 복
제합니다.
▸이렇게 Master의 Host 정보, 로그 파일명, 로그 파일내에서
처리한 포인트 정보를 포지션 정보라고 합니다.
▸이 정보는 SHOW SLAVE STATUS 라는 SQL로 확인 가능하
다.
11. 2018.02.28 OPEN LAB
REPLICATION의 원리[5] -비동기 데이터 복사
▸Replication은 로그를 기반으로 데이터를 복제 합니다. 즉
Master에서 수행한 갱신 처리가 동시에 Slave로 반영 되는 것
이 아니라, 시간차가 어느정도 존재 한다는 것입니다. 그래서
이를 비동기 데이터 복사 라고 합니다.
▸Replication 방식이 아닌 Cluster 방식의 이중화를 사용할 경
우 동기 복사 또는 반동기 복사를 사용하기도 합니다. ( EX:
Galera Cluster )
12. 2018.02.28 OPEN LAB
MASTER & SLAVE REPLICATION
▸Master는 갱신과 참조 두가지 쿼리를
처리하며, Slave는 참조 쿼리만을 처
리 합니다.
▸INSERT, UPDATE 보다 SELECT가
많은 서비스에 많이 사용되며 가장
일반적인 방식 입니다.
▸데이터 이중화 효과와 함께 부하분산
효과도 가지고 있습니다.
Master Slave Slave
Web Server
13. 2018.02.28 OPEN LAB
MASTER & SLAVE REPLICATION 순서도.
데이터 갱신 요청
Master
DB
갱신 쿼리 수행
바이너리 로
그
Master의 쓰레드가 갱신
쿼리를 바이너리 로그에
쓴다.
Slave
Slave의 I/O 쓰레드가
바이너리 로그를 읽어 온
다.
릴레이 로그Slave의 I/O 쓰레드가
읽어온 바이너리 로그를
릴레이 로그에 작성한다.
DB
Slave의 SQL쓰레
드가 릴레이 로그
에 기록된 명령문
을 수행해서 동기
화 한다.
14. 2018.02.28 OPEN LAB
DUAL MASTER REPLICATION
▸갱신/참조 두가지 기능을 처리하는
서버를 이중화 하는 방법입니다.
▸갱신과 참조 명령문 모두를 분산해서
처리한다.
▸INSERT, UPDATE, SELECT 명령문
이 모두 비슷하게 사용되는 서비스 적
합합니다.
▸데이터 이중화 효과와 함께 부하분산
효과도 가지고 있습니다.
Master Master
Web Server
VIP
15. 2018.02.28 OPEN LAB
DUAL MASTER REPLICATION 순서도.
▸Master & Slave Replication 과 기본적으로 같은 순서로 진행
된다.
▸각자가 Master 이면서 Slave가 되는 형태이다.
요청 처리 요청 처리
바이너리 로그 바이너리 로그
릴레이 로그 릴레이 로그
Master A Master B
DB DB
16. 2018.02.28 OPEN LAB
DUAL MASTER & SLAVE REPLICATION
▸단일 Master 서버의 단점을 보완한
형태이다. Master 서버를 이중화 구
성한 뒤, 각각의 Master 서버를 다시
Active-Passive형태로 구성한다.
▸Active 서버 장애시 Passive 서버가
서비스를 지속 하는 형태이다.
▸마찬가지로 데이터 이중화 효과를
가지며 부하 분산 효과, 서비스 지속
성 향상의 특징을 가지고 있다.
Master(Active) Master(Passive)
Web Server
Slave
Slave
17. 2018.02.28 OPEN LAB
DUAL MASTER & SLAVE REPLICATION
▸앞에서 설명한 것과 달리 반동기 복제( Master 에서 모든 바
이너리 로그가 Slave로 전달 되었는지 확인하는 기능) 를 사
용한다. MySQL 5.5 부터 포함.
Master(Active) Master(Passive)
SlaveSlave Slave
데이터 갱신 요청
바이너리 로그 기록
반동기 복제
비동기 복제
18. 2018.02.28 OPEN LAB
SHARDING & HORIZONTAL
PARTITIONING (1)
▸샤딩은 데이터를 분산 또는 분할 처리하는 기법중 하나로 수평
분할 이라고도 불리기도 한다.
▸수평 분할은 하나의 테이블을 row를 기준으로 반은 A테이블에
, 나머지 반은 B테이블에 저장하여 이를 나눠서 처리하는 것을
말한다. 샤딩은 물리적으로 다른 DB에 Row를 기반으로 나눠
서 처리하는 것을 말한다.
▸위와 같은 데이터를 범위, 또는 특정 Row를 기준으로 나누어서
소로 다른 DB에 저장하여서 쓴다는 것이다.