Database/Redis

[Redis] Replication 전체 동기화, 부분 동기화 방식

꽁담 2020. 3. 11. 01:46

Redis Replication 복제 방식


Redis 에서는 복제 방식으로 '전체 동기화' 와 '부분 동기화' 를 제공하고 있습니다.



전체 동기화 (Full synchronization)


복제 순서

1. 마스터는 자식 프로세스를 생성합니다.

2. 자식 프로세스는 백그라운드로 데이터를 RDB 파일로 백업합니다.

3. 백업하는 동안 마스터에 새로 들어온 명령은 처리 후 복제 버퍼에 저장합니다.

4. RDB 파일 백업이 완료되면, 마스터는 파일을 복제서버로 전송합니다.

4. 복제 서버는 파일을 받아 디스크에 저장하고 메모리로 로드합니다.

5. 마스터는 복제버퍼에 저장된 명령을 복제서버에 전송합니다.


특이사항

1. 마스터가 다운되는 경우 복제서버는 1초마다 마스터에 접속을 시도합니다.

2. 마스터가 살아나면 복제서버는 복제 순서에 따라 Sync 합니다.

3. 특정 버전 이상부터는 RDB 파일을 만들지 않고 복제할 수 있습니다.


RDB 파일을 만들지 않고 복제하는 방법

 

 RDB 파일을 만들지 않는 redis.conf 파라미터

 마스터 서버

 * 2.8.18 버전 이후 가능

 * repl-diskless-sync [ yes | no ] 에서 값을 yes 로 설정

 * repl-diskless-sync 값이 yes 인 경우 소켓을 통해서 복제서버에 직접 쓰는 동기화를 진행

 복제 서버

 * 6.0 버전 이후 가능

 * repl-diskless-load [ disabled | on-empty-db | swapdb ] 에서 값을 swapdb 로 설정

  - disable : diskless 기능을 사용하지 않습니다.

  - on-empty-db : 복제서버에 키가 없을 경우 diskless 기능을 사용하지 않습니다. 데이터가 있으면 rdb 파일을 생성합니다.

  - swapdb : 복제서버에 키 여부와 상관없이 diskless 로 동작합니다.



부분 동기화 (Partial resynchronization)


마스터서버와 복제서버는 각 서버의 replication ID 와 offset 을 가지고 있습니다.

네트워크 끊어지면 마스터 서버는 복제서버에 전달할 데이터를 backlog-buffer 에 저장합니다.

다시 연결되었을 때 backlog-buffer 가 넘치지 않았으면 offset 을 비교하여 그 이후부터 동기화를 진행합니다.

backlog-buffer 크기는 redis.conf 파일의 repl-backlog-size 파라미터로 설정됩니다.


backlog-buffer 가 넘치게 되는 경우 다시 연결되었을 때 전체 동기화를 진행합니다.