1. Replication : 확장의 시작과 한계


Redis 를 처음 도입해서 단일 Master 노드로 시작했을 때 받을 수 있는 기본적인 질문은, Redis 서버가 뻗으면 어떡할건데? 다. 이는 SPOF 라는 운영 상 큰 리스크를 가지게 되므로, 당연한 질문이라고 볼 수 있다.

이러한 리스크에서 벗어나기 위해 생각한 해결책이 바로 Master 의 Replication 노드를 두어 운영하는 것이다.

1.1. Replication 연결과 동기화의 비용


Slave 노드를 띄우고 replicaof <Master IP> <Port> 명령을 입력하는 순간, 내부에서는 다음과 같은 작업이 시작된다.

  1. Master: 현재 메모리에 있는 모든 데이터를 디스크(RDB 파일)로 덤프(Dump)하기 위해 fork()를 실행
  2. Disk I/O: 생성된 RDB 파일을 디스크에 씀 (Diskless 옵션도 있지만 메모리를 더 씀)
  3. Network: RDB 파일을 Slave에게 전송
  4. Slave: 받은 파일을 로드하여 자신의 메모리를 채움

1.1.1. 위험 포인트 1: fork()와 메모리 2배 (Copy-on-Write)