Redis 주종 동기 화
레 디 스 서버 가 여러 대 있 을 때 메 인 서버 와 여러 대가 서버 에서 있 을 것 이라는 것 을 잘 알 고 있 습 니 다.일반적으로 메 인 서버 는 쓰기 작업 을 하고 서버 에서 읽 기 작업 을 한다.
그렇다면 서버 에서 메 인 서버 와 데 이 터 를 어떻게 동기 화 하 느 냐 는 문제 가 있다.
이 문 제 는 바로 오늘 의 내용 을 통 해 주종 동기 화 를 통 해 해결 한 것 이다.
글 의 내용 은 여전히 비교적 건조 하 므 로 모두 가 마음 을 가 라 앉 히 고 집중 해서 보 는 것 을 건의 합 니 다.글 의 끝 은 모두 에 게 간단 한 총 결 과 를 하고 요약 할 것 입 니 다.
1.주종 동기 화 방법
만약 에 현재 Redis 서버 가 2 대 있다 면 주 소 는 각각 127.0.0.1:6379 와 127.0.0.1:12345 입 니 다.
우 리 는 127.0.0.1:12345 의 클 라 이언 트 에 명령 을 입력 합 니 다.
127.0.0.1:12345> SLAVEOF 127.0.0.6379
이렇게 127.0.0.1:12345 서버 는 127.0.0.1:6379 의 데 이 터 를 복사 합 니 다.전 자 는 서버,후 자 는 서버 를 위주 로 하 는 것 이다.위 와 같은 방식 으로 복사 하 는 것 외 에 설정 파일 의 slaveof 옵션 을 통 해 설정 할 수 있 습 니 다.
이 가능 하 다,~할 수 있다,...
ok,다음은 우리 가 계속 알 아 보 겠 습 니 다.
2.주종 동기 화 실현 과정
주종 동기 화 는 두 단계 로 나 뉜 다.동기 화 와 명령 전파 이다.
여기 서 미리 설명해 야 한다.Redis 2.8 버 전에 서 주종 복 사 를 할 때 상기 두 가지 절 차 를 순서대로 실행 하고 2.8 부터 명령 만 수행 하면 전 파 될 수 있다.다음 글 에서 도 왜 이러 는 지 설명 할 까요?
2.1 동기 화
서버 에서 메 인 서비스 에 대한 동기 화 작업 은 sync 명령 을 통 해 이 루어 져 야 합 니 다.다음은 sync 명령 의 실행 절차 입 니 다.
2.2 명령 전파
동기 화 작업 을 통 해 이때 주종 의 데이터베이스 상 태 는 사실 이미 일 치 했 지만 이런 일 치 된 상 태 는 고정불변 한 것 이 아니다.
동기 화 를 마 친 후 메 인 서버 에서 새로운 쓰기 명령 을 받 았 을 수도 있 습 니 다.이 명령 을 실행 한 후 메 인 데이터베이스 상태 가 일치 하지 않 습 니 다.
메 인 데이터베이스 상태 가 다시 일치 하도록 하기 위해 서 메 인 서버 는 서버 에서 명령 을 실행 하여 전파 작업 을 해 야 합 니 다.즉,방금 일치 하지 않 은 쓰기 명령 을 서버 에서 실행 하도록 보 내야 합 니 다.서버 실행 이 끝 난 후,주종 데이터베이스 상태 가 다시 일치 하 게 회복 되 었 다.
여기에 의문 하 나 를 삽입 방송 합 니 다.
위 와 같은 불일치 가 발생 한 후에 Redis 가 동기 화 작업 을 수행 하면 ok 이 아니 냐 는 독자 들 의 생각 이 있 는 지 모르겠다.
효과 적 으로 는 동기 화 를 회복 할 수 있 지만 필요 없다.동기 화 된 sync 명령 을 실현 하 는 것 은 자원 을 매우 소모 하 는 작업 이기 때문에 다음 그림 의 설명 을 보고 이해 할 것 이 라 고 믿 습 니 다.
동기 화 는 자원 을 매우 소모 하 는 작업 인 만큼 Redis 는 어떤 최적화 방법 이 있 습 니까?답 은 있 지.
2.3 최적화 판 동기 화 작업
위 에서 말 한 내용 을 기억 하 십 니까?2.8 버 전부터 주종 동기 화 는 명령 만 수행 하고 전파 하면 될 수 있 습 니 다.이것 도 sync 가 자원 을 비교적 소모 하기 때문에 채택 한 최적화 이다.
그럼 언제 이렇게 할 수 있 을까요?우 리 는 먼저 전제조건 을 살 펴 보 자.
주종 동기 화 실제 2 가지 상황:
만약 에 끊 기 는 동안 메 인 서버(이미 만 키 쌍 이 있 음)는 몇 개의 쓰기 명령 만 실 행 했 을 뿐 서버 에서 이 몇 개의 명령 을 보완 하기 위해 sync 를 다시 실행 하여 새로운 rdb 파일 을 생 성 하 는 것 도 매우 비효 율 적 이다.
이 문 제 를 해결 하기 위해 2.8 은 sync 명령 대신 psync 명령 을 사용 하여 동기 화 작업 을 수행 합 니 다.
psync 는 전체 동기 화 와 부분 동기 화 두 가지 모드 를 가지 고 있 습 니 다.
위의 소개 에서'일정한 조건 을 만족 시 키 자'는 것 이 나 타 났 는데 그것 은 또 무슨 조건 입 니까?사실은 편 이 량 의 비교 로 구체 적 으로 계속 아래 를 볼 수 있다.
2.4 부분 동기 화 실현
부분 중 동기 화 기능 은 다음 과 같은 세 부분 으로 구성 된다.
복 사 를 실행 하 는 마스터 서버 는 각각 복사 오프셋 을 유지 합 니 다.
예 를 들 어:
현재 메 인 서버 의 복사 오프셋 이 10000 이면 서버 에서 30 개의 바이트 데 이 터 를 전파 하고 종료 후 복사 오프셋 은 10030 입 니 다.
이 때 서버 에서 30 개의 바이트 데 이 터 를 받 지 못 하고 끊 겼 습 니 다.다시 연결 한 후에 도 서버 에서 의 복사 오프셋 은 10000 으로 메 인 데이터 가 일치 하지 않 음 을 설명 합 니 다.이 때 메 인 서버 에 psync 명령 을 보 냅 니 다.
그러면 메 인 서버 는 서버 에서 전체 동기 화 를 실행 해 야 합 니까?아니면 부분 동기 화 를 실행 해 야 합 니까?부분 을 다시 동기 화하 면 메 인 서버 는 어떤 데 이 터 를 서버 에서 동기 화 하 는 지 어떻게 알 수 있 습 니까?
다음 답 은 압축 버퍼 복사 와 관련 이 있 습 니 다.
2.4.2 압축 버퍼 복사
우선,압축 버퍼 를 복사 하 는 것 은 고정된 길이 이 고 먼저 나 오 는 대기 열 입 니 다.기본 값 은 1MB 입 니 다.
홈 서버 가 명령 전 파 를 할 때 서버 뿐만 아니 라 이 버퍼 에 도 명령 을 보 냅 니 다.
따라서 압축 버퍼 를 복사 하 는 구 조 는 다음 과 같다.
서버 에서 메 인 서버 에 psync 명령 을 보 낼 때 자신의 복사 오프셋 테이프 가 필요 합 니 다.메 인 서버 는 이 복사 오프셋 과 압축 버퍼 의 오프셋 을 복사 하여 비교 할 수 있 습 니 다.
압축 버퍼 를 복사 할 때 서버 에서 의 복사 오프셋+1 후의 데이터 가 존재 하면 부분 적 인 동기 화 를 진행 합 니 다.그렇지 않 으 면 전체 동기 화 를 진행 합 니 다.
2.4.3 run id
id 를 실행 하 는 것 은 첫 번 째 복 사 를 할 때 홈 서버 는 자신의 실행 id 를 서버 에서 보 내 저장 합 니 다.
서버 에서 끊 어 진 후 서버 에서 이 실행 id 를 방금 연 결 된 메 인 서버 에 보 냅 니 다.
현재 서버 의 실행 id 가 같 으 면 서버 가 끊 기기 전에 복사 한 서버 가 현재 서버 임 을 설명 합 니 다.메 인 서버 는 일부 동기 화 를 시도 할 수 있 습 니 다.다 르 면 서버 가 끊 기기 전에 복 사 된 서버 가 현재 서버 가 아니 라 메 인 서버 가 직접 완전 동기 화 를 실행 한 다 는 것 을 의미한다.
많은 필 묵 을 써 서 마침내 부분 을 다시 동기 화하 여 다 썼 고,마지막 으로 보조 기능 을 보충 하 였 다.
2.5 심장 박동 검사
방금 언급 한 바 와 같이 주종 동기 화 와 명령 전파 두 단계 가 있다.
동기 화가 완료 되면 메 인 서버 는 명령 전파 단계 에 들 어 갑 니 다.이 때 서버 에서 1 초 에 1 번 씩 메 인 서버 에 명령 을 보 냅 니 다.
REPLCONF ACK <replication_offset>
그 중에서 replicationoffset 은 서버 에서 현재 복사 오프셋 입 니 다.이 명령 을 보 내 는 데 는 주로 세 가지 역할 이 있 습 니 다.
드디어 마지막 내용 을 다 썼 습 니 다.몇 시간 이 지 났 습 니 다.본문 내용 을 정리 해 보 겠 습 니 다.
SLAVEOF 명령 을 보 내 면 주종 동기 화 를 할 수 있 습 니 다.예 를 들 어 SLAVEOF 127.0.0.6379
주종 동기 화 는 동기 화 와 명령 전파 두 단계 가 있다.
주종 동기 화 는 첫 번 째 복사 와 끊 긴 후 두 가지 상황 을 다시 복사 합 니 다.
2.8 버 전 은 sync 명령 대신 psync 명령 을 사용 하여 동기 화 작업 을 수행 합 니 다.동기 화(sync 명령)의 비효 율 적 인 조작 을 해결 하기 위해 서다.
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.더 많은 내용 을 알 고 싶다 면 아래 링크 를 보 세 요.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Redis 해시에 대한 완벽한 가이드변경 가능하므로 필요에 따라 쉽게 변경하고 업데이트할 수 있습니다. Redis 해시는 구조가 평평하므로 JSON에서와 같이 여러 수준을 가질 수 없습니다. redis 해시의 명명 규칙은 hash:key 로 입력되므로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.