샤딩과 리플리카셋 이해하기
<레플리카 세트 도면>
샤딩이란
샤딩은 NoSQL에서 데이터를 분산 저장하는 기술이다. 이는 NoSQL의 쓰기 속도를 커버한다. 여기서 분산 저장이란 전체 데이터를 나누어 가지는 것이다. 분산된 데이터는 라우터(mongos)에서 메타 데이터를 가지고 있어 데이터의 위치를 정보를 파악할 수 있다. 이 데이터는 라우터의 Config-Server에서 저장/관리한다. 참고로 메타 데이터는 실재 데이터가 아닌 목차(index)이다.
샤딩의 문제점
몽고디비와 같은 NoSQL은 하드디스크에 데이터를 저장하는 RDB와는 달리 데이터를 RAM에 저장하는 것을 목적으로 한다. CPU가 바쁘지 않을 때 하드디스크에 데이터를 저장하기도 하지만 이는 백업을 위한 것으로 불시에 컴퓨터가 꺼졌을 때에 대비하는 것일 뿐이다. 또한 RDB 데이터 모델과는 달리 Undo와 Redo를 제공하고 있지 않아 데이터를 하드웨어에 저장하지 않은 몽고디비에서는 트렌젝션 관리가 되지 않는다. 이는 샤딩으로 분산 저장을 했을 때 어느 하나의 서버가 망가지면 시스템이 전체적으로 무너지게 된다는 문제가 생긴다.
Undo : 방금 전에 했던 작업을 취소하는 것.
Redo : 취소했던 작업을 다시 하는 것.
리플리카셋
이러한 샤딩의 문제점을 해결하는 방법이 바로 리플리카셋이다. 리플리카(=RAID)셋이란 각각의 서버를 복제하여 사용하는 것으로 최소 3개씩 복제한다. 만약 메인 서버인 프라이머리 서버에서 문제가 생기면 복제해둔 세컨더리 서버에서 데이터를 가져 올 수 있다.
예전에는 프라이머리 서버(Primary Server)를 마스터 서버(Master Server : 주인), 세컨더리 서버(Secondary Server)를 슬레이브 서버(Slave Server : 노예)라고 불렀지만 지금은 인권문제로 더이상 사용하지 않게 되었다.
데이터를 보관하고 있는 서버에서 데이터를 저장하는 명령어를 실행하여 바로 저장하는 것이 아니라 RDB의 Undo, Redo처럼 OPlog(Operation log: 오피로그)라는 저장 영역에 명령어를 저장한다. 명령은 실행하면 실패할 수 있지만 명령어 자제는 실패하지 않기 때문에 실패시에 대비할 수 있다. 또한 OPlog도 각각의 서버에서 갖고 있으며 서로 동기화하고 있다.
하트비트
OPlog가 데이터를 동기화하기 위해서 서로 데이터를 요청하는 것. 하트비트의 간격은 2초이다. 일방향으로 요청하는 것이 아니라 Thread가 만들어져 있어 서로 연결되어 있다.
리플리카셋의 문제점
리플리카셋는 데이터에 차이가 생기면 OPlog에서 명령어를 실행하여 데이터를 동기화할 수 있다. 만약 프라이머리 서버가 다운되더라도 세컨더리 서버가 프라이머리 서버의 역활을 교대한다. 하지만 이는 클라이언트의 요청 타이밍에 따라 큰 문제가 될 수도 있다. 이 문제를 해결하는 기술이 바로 저널링이다. 저널링은 기록을 보관하는 기술로 변경 사항을 반영하기 전에 변경 사항을 추적할 수 있게 데이터를 보관할 수 있다.