Replication
Replication은 무엇인가?
- 여러 개의 DB를 권한에 따라 Master Node와 Slave Node로 구성되는 것이 일반적이다.
- Master Node는 쓰기 작업만 담당
- Slave Node는 읽기 작업만 담당
- 비동기 방식으로 노드들 간 데이터를 동기화 한다.
Replication의 처리 순서
- Master Node에 쓰기 트랜잭션이 수행된다.
- Master Node는 데이터를 저장하고 트랜잭션에 대한 로그를 BIN log에 기록한다.
- Slave Node의 IO Thread는 Master Node의 BIN log를 Relay log에 복사한다.
- Slave Node의 SQL Thread는 Relay log를 한 row씩 읽어가며 데이터를 저장한다.
Replication의 장점
- DB요청의 대부분이 읽기 작업이므로 읽기와 쓰기를 분리하는 것만으로도 성능을 높일 수 있다.
- 비동기 방식으로 지연시간이 짧다.
Replication의 단점
- 노드들 의 데이터 동기화가 보장되지 않아 일관성 있는 데이터를 얻지 못할 수 있다
- Master가 다운되면 복구 및 대처가 어렵다.
Clustering
Clustering은 무엇인가?
- 여러개의 DB를 수평적인 구조로 구축하는 방식
- 분산환경을 구성하여 Fail Over 시스템을 구축하기 위해서 사용
- 동기방식으로 Node들 간의 데이터를 동기화함
Clustering의 처리 순서
- 1개의 Node에 쓰기 트랜잭션이 수행되고 Commit을 실행한다.
- 디스크에 내용을 쓰기전에 다른 노드로 데이터의 복제를 요청한다.
- 다른 Node에서 복제 요청을 수락했다는 OK신호를 보내고, 디스크에 쓰기 시작한다.
- 다른 Node로 부터 OK신호를 받으면 실제 디스크에 데이터를 저장한다.
Clustering 장점
- Node들 간의 데이터를 동기화하여 항상 일관성 있는 데이터를 얻을 수 있다.
- 1개의 Node가 죽어도 다른 Node가 살아있다면 시스템을 계속 장애없이 운영할 수 있다.
Clustering 단점
- 여러 Node들 간의 데이터를 동기화하는 시간이 필요하므로 Replication에 비해 쓰기 성능이 떨어진다.
- 장애가 전파된 경우 처리가 쉽지 않다.
- 데이터 동기화에 의해 스케일링에 한계가 있다.
Clustering 구성하기
Cluster하기 적합한 Table
- 조회가 자주 발생하고 수정이 거의 발생하지 않는 테이블
- 컬럼안의 많은 중복 데이터를 가지는 테이블
- 자주 Join이 되는 테이블
Cluster Key선정하기
👍
- 데이터 값의 범위가 큰 column
- 테이블간의 조인에 사용되는 column
👎
- 특정 데이터 값이 적은 column
- 자주 데이터 수정이 발생하는 column
- LONG, LONG RAW column은 포함할 수 없다.
Cluster Index VS Non-Cluster Index
비교 | Cluster Index | Non-Cluster Index |
---|
차이 | 물리적으로 행을 재배열한다. | 물리적으로 재배열 하지 않는다. |
크기 | 인덱스 페이지 용량이 Non-Clusted Index 페이지 용량 보다 작다 | Clusted Index 페이지 용량 보다 용량이 크다. |
선택도 | 30% 이내에서 사용해야 좋다. | 3% 이내에서 사용해야 좋다. |
최대갯수 | 테이블당 1개 | 테이블당 249개 |
생성 | Primary Key 설정시, 해당 컬럼은 자동적으로 Cluster Index 생성 | Non-Cluster Index를 명시해야 생성 (Index page를 따로 만들며 로그 파일에 저장된다.) |
Active-Active VS Active-Standby
Active-Active
- Cluster를 이루는 DB 서버들이 모두 Active한 상태로 두는것
- 하나의 서버가 죽어도 다른 서버가 역할을 바로 수행하여 중단되는 시간이 없다.
- 서버의 물리적인 양이 증가되면 CPU와 Memory와 같은 리소스가 증가하기 때문에 성능향상을 기대할 수 있다.
- 디스크를 공유하면 이에 따른 Bottleneck이 발생 할 수 있다.
- 다수의 서버를 운영해야 하므로 비용이 증가된다.
Active-Standby ✨
- HA(High Availability) Clustering 구축 방법 중 가장 대표적인 것 중 하나.
- Active-Standby구조는 구성과 운영이 쉽다.
- 운영서버, Active서버, Standby서버로 구성된다.
- 한 서버가 Active상태로 서비스 중일 때, Standby 서버는 준비 상태로 대기중인 상태다.
구성종류
- Cold-Standby : 평소에는 Standby 서버가 대기 상태로 있다가 Active 서버가 다운되는 시점 작동
- Hot-Standby : 평소에도 Standby 서버가 작동
Hot-Standby가 전환시간이 짧지만 그만큼 비용이 증가된다. 항상 DB서버 2대를 사용하지만 실제 동작하는 것이 Active 서버라면 그 전환시간을 줄이기 위해 Hot-Standby를 구성하는 것은 비효율적이다.
동작 방식
- Active 서버에 장애가 발생해 서비스를 못하게 되면.
- Standby 서버에 있는 HA가 운영 서버에 장애 발생을 보고한다.
- HA가 자동으로 Standby 서버에 모든 서비스를 올리고 서비스를 이어간다.
- 기존 Active서버에 접속했던 Client는 접속이 끝어지겠지만, 재접속 시 바로 서비스를 이어 나갈 수 있다.