>데이터 베이스 >Redis >Redis 클러스터 데이터를 동기화하는 방법

Redis 클러스터 데이터를 동기화하는 방법

(*-*)浩
(*-*)浩원래의
2019-06-17 13:14:299235검색

Redis는 mysql처럼 위치를 복사하는 개념이 없기 때문에 슬레이브와 마스터의 연결이 끊겼다가 다시 연결되면 마스터의 전체 스냅샷이 찍히고 슬레이브의 모든 데이터가 지워지며, 전체 메모리 테이블이 재설정되어 Salve가 복구될 수 있으며, 데이터가 매우 느려지고 마스터에도 부담이 됩니다.

Redis 클러스터 데이터를 동기화하는 방법

Redis의 마스터-슬레이브 복제 전략은 영구 rdb 파일을 통해 구현됩니다. 프로세스는 먼저 rdb 파일을 덤프한 다음 rdb 파일을 덤프하는 것입니다. 전체 금액을 슬레이브에 전송한 후, 덤프된 작업을 슬레이브에 실시간으로 동기화합니다. 슬레이브 서버를 마스터 서버의 정확한 복제본으로 만듭니다. 다음 기능은 공식 문서인 ReplicationHowto에 언급되어 있습니다: (권장 학습: Redis 비디오 튜토리얼)

마스터는 여러 슬레이브를 지원하며 슬레이브는 다른 슬레이브의 연결을 다음과 같이 수락할 수 있습니다. 따라서 슬레이브 마스터는 마스터-슬레이브 다중 레벨 구조를 형성합니다. 복제 기능은 마스터 서버를 차단하지 않습니다. 하나 이상의 슬레이브 서버가 초기 동기화를 진행 중이더라도 마스터 서버는 계속해서 명령 요청을 처리할 수 있습니다. 복제 기능은 슬레이브 서버를 차단하지 않습니다. redis.conf 파일에 해당 설정이 지정되어 있는 한 서버는 슬레이브 서버가 초기 동기화를 진행 중이더라도 이전 버전의 데이터 세트를 사용하여 명령 쿼리를 처리할 수 있습니다. . 그러나 이전 버전의 데이터 세트가 서버에서 제거되고 새 버전의 데이터 세트가 로드되는 동안 연결 요청은 차단됩니다. 예를 들어, 슬레이브는 데이터 중복성을 위해 사용될 수 있으며, 시간이 많이 걸리는 명령(예: 정렬)은 마스터 차단을 방지하기 위해 특정 슬레이브에 전송될 수도 있습니다. . , 슬레이브 서버는 마스터의 구성 파일에서 save 지시문을 주석 처리하면 되는 지속성 작업을 수행합니다.

Redis는 비동기 복제를 사용합니다.

Redis의 마스터-슬레이브 복제는 두 단계로 나누어집니다:

1) 동기화 작업: 슬레이브 서버의 데이터베이스 상태를 업데이트합니다. 마스터 서버 현재 데이터베이스 상태입니다.

2) 명령 전파: 마스터 서버의 데이터베이스 상태가 수정되어 마스터 서버와 슬레이브 서버의 데이터베이스 상태가 일치하지 않는 경우 마스터 서버와 슬레이브 서버를 일관된 상태로 되돌립니다.

Sync

클라이언트가 SLAVEOF 명령을 슬레이브 서버로 보내고 슬레이브 서버가 마스터 서버를 복사하도록 요구할 때 슬레이브 서버는 먼저 동기화 작업을 수행해야 합니다. 즉, 슬레이브 서버의 데이터베이스 상태를 주 서버의 현재 데이터베이스 상태로 업데이트해야 합니다.

슬레이브 서버에서 마스터 서버로의 동기화 작업은 마스터 서버에 SYNC 명령을 전송하여 완료해야 합니다. #🎜 🎜##🎜🎜 #

서버에서 마스터 서버로 SYNC 명령을 보냅니다. SYNC 명령을 받은 마스터 서버는 BGSAVE 명령을 실행하고 백그라운드에서 RDB 파일을 생성한 후, 지금부터 실행되는 모든 쓰기 명령을 버퍼에 기록한다. 마스터 서버의 BGSAVE 명령이 실행되면 마스터 서버는 BGSAVE 명령에 의해 생성된 RDB 파일을 슬레이브 서버로 전송합니다. 슬레이브 서버는 RDB 파일을 수신하여 로드하고 자신의 데이터베이스 상태를 데이터베이스 상태로 업데이트합니다. 마스터 서버가 BGSAVE 명령을 실행했습니다. 마스터 서버는 버퍼에 기록된 모든 쓰기 명령을 슬레이브 서버로 전송하고, 슬레이브 서버는 이러한 쓰기 명령을 실행하여 자신의 데이터베이스 상태를 마스터 서버 데이터베이스의 현재 상태로 업데이트합니다.

Redis 관련 기술 기사를 더 보려면

Redis 데이터베이스 사용 튜토리얼

열을 방문하여 알아보세요!

위 내용은 Redis 클러스터 데이터를 동기화하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.