1. 소개
Redis에서는 Redis의 고가용성을 보장하기 위해 일반적으로 클러스터 모드가 구축되는데, 이는 마스터-슬레이브 모드입니다. .
마스터-슬레이브 모드는 Redis의 고가용성을 보장할 수 있는데, Redis는 어떻게 마스터-슬레이브 서버의 데이터 일관성을 보장합니까? 다음으로 Redis 마스터(마스터)와 슬레이브(슬레이브) 동기화의 원리에 대해 간단히 이야기해 보겠습니다. .
2. 첫 번째 전체 동기화
Redis 서버가 처음으로 salveof 명령을 마스터 서버에 보내면 Redis 슬레이브 서버는 전체 동기화를 수행합니다. 아래:
- 슬레이브 서버는 psync 명령을 마스터에 전송하고(이때 psync ? -1이 전송됨) 데이터를 동기화해야 한다고 마스터에 알립니다.
- psync 명령을 받은 후 마스터는 BGSAVE 명령을 실행하여 RDB 파일의 스냅샷을 생성합니다.
- 생성 완료 후 RDB 파일이 슬레이브로 전송됩니다.
- 슬레이브가 파일을 수신하면 RDB 스냅샷을 로드하고 BGSAVE 실행 시 마스터의 상태와 일치하도록 데이터베이스 상태를 변경합니다.
- 마스터는 버퍼에 저장된 모든 쓰기 명령을 보내어 슬레이브에게 동기화할 수 있음을 알려줍니다.
- 슬레이브가 이러한 쓰기 명령을 실행하도록 합니다.
3. 슬레이브가 마스터와 동기화된 후 마스터가 이후에 간단한 세트 이름 redis와 같은 쓰기 작업을 수행하면 마스터가 현재 명령을 실행한 후 현재 명령은 데이터 일관성을 달성하기 위해 실행을 위해 슬레이브로 전송됩니다.
4. 재복사
슬레이브 연결이 끊겼다가 다시 연결되면 재동기화가 전체 동기화와 부분 동기화로 나누어집니다먼저 부분 동기화의 일반적인 방향을 살펴보겠습니다.
슬레이브의 연결이 끊어졌다가 다시 연결되면 psync 명령을 마스터로 보냅니다.
먼저 세 가지 측면을 소개하겠습니다.
- psync를 수신한 후 마스터는 +continue 응답을 반환하여 슬레이브가 부분 동기화를 수행할 수 있음을 나타냅니다.
- 마스터는 연결이 끊어진 후 슬레이브에 쓰기 명령을 보냅니다.
- 슬레이브는 쓰기 명령을 실행합니다.
- 실제로 슬레이브가 psync 명령을 마스터로 보낸 후에도 마스터는 다음 세 가지 사항을 기준으로 부분 동기화를 수행할지 여부를 판단해야 합니다.
서버 실행 ID
초기 동기화를 수행할 때 마스터는 슬레이브에 ID를 알려주고 슬레이브는 이를 기록합니다. 슬레이브의 연결이 끊어졌다가 다시 연결되면 해당 ID가 이에 속하는 것으로 확인되면 부분 재동기화를 시도합니다. 주인. 현재 연결된 마스터와 ID가 다를 경우 완전한 재동기화를 수행합니다.
복제 오프셋
복제 백로그 버퍼
슬레이브가 psync를 보낼 때 자체 오프셋도 마스터에 보냅니다. 슬레이브 오프셋 이후의 데이터가 여전히 버퍼에 있으면 +continue가 반환되어 슬레이브에 부분 재동기화를 수행하도록 알립니다.
슬레이브 오프셋 이후의 데이터가 더 이상 버퍼에 없으면 전체 재동기화가 수행됩니다.
위의 세 가지 사항을 결합하면 다음과 같이 요약할 수 있습니다.
- 슬레이브의 연결이 끊어졌다가 다시 연결되면 psync 명령이 마스터로 전송됩니다.
- 마스터는 먼저 서버 실행 ID를 판단합니다. 자신의 오프셋과 동일하면 오프셋을 판단합니다.
- 마스터는 자신의 오프셋이 슬레이브의 오프셋과 일치하는지 판단합니다.
- 일관되지 않으면 마스터는 버퍼로 이동하여 슬레이브의 오프셋 이후의 데이터가 존재하는지 확인합니다.
- 존재하는 경우 +continue 응답이 반환되어 슬레이브가 부분 동기화를 수행할 수 있음을 나타냅니다.
- 마스터는 연결이 끊어진 후 슬레이브에 쓰기 명령을 보냅니다.
- 슬레이브는 쓰기 명령을 실행합니다.
5. 마스터-슬레이브 동기화의 마지막 과정
6. 결론
최근 회사에서 필요해서 Redis 마스터-슬레이브 클러스터를 구축하고 센티넬을 사용했습니다. 마스터 스위치를 모니터링하고 구현합니다. 그래서 "Redis 설계 및 구현"을 기반으로 Redis의 마스터-슬레이브 원칙을 정리하여 인상을 깊게 했습니다.
추천 튜토리얼: "redis 튜토리얼"
위 내용은 Redis 마스터-슬레이브 동기화 원칙의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!