반응형
SMALL
- 가용성: 일정 기간 동안 서비스를 정상적으로 사용할 수 있는 시간의 비율
- 가용성이 높은 시스템을 고가용성 시스템이라고 한다.
레디스에서의 복제 구조
복제본 노드를 추가하는 이유
- 마스터 데이터베이스가 다운되었을 때 대신 사용할 수 있다.
- 트래픽을 감소시키는 역할을 한다.
- 백업을 복제본에서 수행하면 백업 작업이 서비스에 미치는 영향을 최소화할 수 있다.
복제 구조 구성하기
- 복제본이 될 노드 B에서 REPLICAOF 커맨드를 입력해 마스터 노드의 정보를 입력하면 복제 연결이 시작된다.
- 가장 상위의 노드인 마스터 노드만 데이터를 업데이트하는 커맨드를 수행할 수 있다.
- 하위 복제본은 모두 읽기 전용으로 동작하기 때문에 데이터를 읽어가는 커맨드만 수행할 수 있다.
패스워드 설정
- requirepass 옵션을 이용해 패스워드를 설정할 수 있다.
- 비밀번호가 없으면 master에 연결해 데이터를 받아갈 수 없다.
복제 메커니즘
- REPLICAOF 커맨드로 복제 연결을 시도한다.
- 마스터 노드에서는 fork로 자식 프로세스를 새로 만든 뒤 RDB 스냅샷을 생성한다.
- (2)번 과정 동안 마스터 노드에서 수행된 모든 데이터셋 변경 작업은 레디스 프로토콜 형태로 마스터의 복제 버퍼에 저장된다.
- RDB 파일이 생성 완료되면 파일은 복제본 노드로 복사한다.
- 복제본에 저장됐던 모든 내용을 모두 삭제한 뒤 RDB 파일을 이용해 데이터를 로딩한다.
- 복제 과정 동안 버퍼링됐던 복제 버퍼의 데이터를 복제본으로 전달해 수행시킨다.
마스터 노드
디스크에 RDB 파일을 생성하는 로그를 확인할 수 있다.
복제본 노드
마스터로부터 RDB 파일을 읽어오고, RDB 파일을 로드하는 과정의 로그를 확인할 수 있다.
- REPLICAOF 커맨드로 복제 연결을 시도한다.
- 마스터 노드는 소켓 통신을 이용해 복제본 노드에 바로 연결하며, RDB 파일은 생성됨과 동시에 점진적으로 복제본의 소켓에 전송된다.
- (2)의 과정 동안 마스터 노드에서 수행된 모든 데이터셋 변경 작업은 레디스 프로토콜 형태로 마스터의 복제 버퍼에 저장된다.
- 소켓에서 읽어온 RDB 파일을 복제본의 디스크에 저장한다.
- 복제본에 저장된 모든 데이터를 모두 삭제한 뒤 RDB 파일 내용을 메모리에 로딩한다.
- 복제 버퍼의 데이터를 복제본으로 전달해 수행시킨다.
마스터 노드
디스크를 사용하지 않고 RDB 데이터를 보내는 로그를 확인할 수 있다.
복제본 노드
마스터로부터 디스크를 사용하지 않는 방식으로 RDB 파일을 읽어오고, RDB 파일을 로드하는 과정의 로그를 확인할 수 있다.
비동기 방식으로 동작하는 복제 연결
- 마스터에서 데이터를 입력하는 커맨드가 수행되면 레디스는 마스터 노드에서 커맨드를 처리한 이후 클라이언트에 OK를 보낸다.
복제 ID
- 모든 레디스 인스턴스는 복제 ID를 가지고 있다.
- 오프셋과 쌍으로 존재한다.
- 데이터가 수정되는 모든 커맨드를 수행할 때마다 오프셋이 증가한다.
- 복제 연결을 시작하면 복제본의 replication id는 마스터의 replication id로 변경된다.
- 오프셋은 복제본에서 마지막으로 수행된 마스터의 오프셋을 의미한다.
- 레디스에서 replication id의 오프셋이 같을 때 두 노드는 정확히 일치된 상태라는 것을 의미한다.
부분 재동기화
- 레디스는 부분 재동기화 기능을 사용해 안정적으로 복제 연결을 유지한다.
- 재연결되면 복제본은 PSYNC 커맨드를 호출해 자신의 replication id와 오프셋을 마스터에 전달한다.
Secondary 복제 ID
- 마스터 노드와의 복제가 끊어짐과 동시에 복제본은 새로운 복제 ID를 갖게 된다.
- 레디스가 2개의 복제 ID를 갖는 이유는 마스터로 승격되는 복제본 때문이다.
읽기 전용 모드로 동작하는 복제본 노드
- 버전 2.6 이후 레디스에서 복제를 구성하면 복제본은 기본으로 읽기 전용 모드로 동작한다.
- 이 설정은 replica-read-only 옵션을 이용해 제어된다.
유효하지 않은 복제본 데이터
- 복제본의 데이터와 마스터의 데이터가 정확하게 일치하지 않은 경우의 데이터를, 유효하지 않은 데이터라고 한다.
- 복제본의 동작 방식은 replica-serve-stale-data 파라미터를 이용해 제어할 수 있다.
- yes: 유효하지 않다고 판단될 때에도 클라이언트로부터 들어오는 모든 읽기 요청에 데이터를 반환한다.
- no: 일부 기본 커맨드를 제외한 모든 커맨드에 대해 SYNC with master in progress라는 오류를 반환한다.
백업을 사용하지 않는 경우에서의 데이터 복제
- 백업 기능을 사용하지 않는 마스터와 복제본 노드가 존재한다.
- 마스터 노드가 장애로 인해 종료됐지만, 레디스 프로세스를 자동 재시작하는 시스템에 의해 노드가 재부팅된다. 이때 메모리의 내용은 초기화된다.
- 복제본 노드에는 데이터가 존재하지만, 마스터 노드로의 복제 연결을 시도한다.
- 마스터에서 복제본으로 빈 데이터셋을 전달한다.
만약 백업을 사용했다면 백업 파일을 자동으로 읽어오기 때문에 데이터가 복원된다.
자동 재시작 기능을 사용하지 않았다면 연결 설정을 마스터에서 복제본 노드로 변경해 데이터를 계속 사용할 수 있다.
데이터의 안정성을 위해 복제 기능을 사용할 경우 백업 기능을 사용하는 것이 좋다.
그렇지 않을 경우, 마스터에서는 인스턴스의 자동 재시작을 활성화하지 않는 것이 권장된다.
반응형
LIST
'독서 > 개발자를 위한 레디스' 카테고리의 다른 글
[개발자를 위한 레디스] 10장 클러스터 (0) | 2024.12.07 |
---|---|
[개발자를 위한 레디스] 9장 센티널 (1) | 2024.12.02 |
[개발자를 위한 레디스] 7장 레디스 데이터 백업 방법 (0) | 2024.11.07 |
[개발자를 위한 레디스] 6장 레디스를 메시지 브로커로 사용하기 (0) | 2024.10.29 |
[개발자를 위한 레디스] 5장 레디스를 캐시로 사용하기 (0) | 2024.10.19 |