레디 스 자습서 : 레디 스 지속성

레디 스 지속성 모드

RDB 스냅 샷

개요

기본적으로, 레디 스 데이터베이스 스냅 샷에서 dump.rdb라는 이름의 바이너리 파일에 저장됩니다. 당신은 레디 스를 설정할 수 있습니다 때 데이터 세트 저장 자동으로,이 조건이 만족을 "M이 변경 적어도이 데이터 세트 N 초".

또한 수동으로 저장하거나 BGSAVE를 호출하여 저장 레디 스 데이터 세트를 만들 수 있습니다. 예를 들어, 다음은 레디 스 때 조건 자동으로 데이터 세트 저장, "적어도 60 초 1000 키 변경되었습니다"충족 제공됩니다 :

저장 (60) 1000

이 방법은 영구적 인 스냅 샷 스냅 샷 생성이라고합니다.

때 스냅 샷

다음과 같은 경우는 메모리의 데이터의 레디 스 스냅 샷을 발생합니다

  • 사용자 bgsave 명령을 보내 (이 시간 레디 스가 자식 프로세스를 포크 것, 자식 프로세스가 하드 디스크의 파일을 생성에 대한 책임, 부모는 명령을 받아 계속 책임이있다)
  • 사용자가 명령 저장 전송 (명령 및 save 명령을 전송 한 후, 다른 bgsave, 시스템은 스냅 샷이 완료되기 전에 시스템이 더 이상 명령 뒤에 차단됩니다 save 명령 즉, 새 명령을 받게됩니다 생성,하지만 bgsave하지 않습니다)
  • 사용자 프로필 구성 이와 유사한 명령 1000 (60)를 저장
  • 단지 전화를 충족하기 위해, save 명령을 여러 구성 파일이있는 경우이 만족하는 경우 마지막 스냅 샷 성공 날짜 이후에, 의미 "를 60 초 이내에 서면 1000있다"이 조건은 시스템이 자동으로 bgsave는 호출 bgsave 명령
  • 사용자 종료를 보내, 시스템은 첫 번째 명령은 다음 클라이언트를 차단하고, 저장 서버를 종료합니다
  • 동기 명령의 주 서버 아키텍처는 복사 작업을 수행 할 때 주님은 서버에서 전송하는 경우 만 주 서버는 마스터 서버가 bgsave 작업을 수행 할 것이며, 더 bgsave 작동하지 않았다.

구성 스냅 샷

save 60 1000
stop-writes-on-bgsave-error no rdbcompression yes
dbfilename dump.rdb
dir ./

레디 스의 dump.rdb 필요 파일을 저장할 때 서버가 수행하는 다음 작업 : 레디 스 포크는 모두 부모와 자식 프로세스를 호출합니다.

자식 프로세스 데이터 세트는 임시 파일 RDB에 기록됩니다.

자식 프로세스가 새로운 RDB 파일의 작성을 완료 할 때, 레디 스 새로운 RDB의 RDB 파일로 원본 파일을 교체하고 이전 파일 RDB을 삭제합니다. 작업의이 방법은 레디 스가 쓰기 메커니즘에서 (기록 중 복사) 혜택을 복사 할 수 있습니다.

추가] 전용 파일 작업 (추가 전용 Fi를 제작, AOF)

개요

스냅 샷 기능 (경질 BLE) 매우 내구성이되지 않습니다 : 어떤 이유로 레디 스 다운 타임 발생하는 경우, 서버는 가장 최근에 기록 된, 그 데이터가 아직 스냅 샷으로 저장되지 않습니다 잃게됩니다. AOF 지속성 : 버전 1.1에서, 레디 스 완전히 내구성 영구적 인 방법을 추가합니다.

AOF 방법으로 구성 파일을 열 수 있습니다 :

appendonly 예

이제, 레디 스 변경 명령 ​​데이터 세트 (예 SET)을 수행 할 때마다에서,이 명령은 최종 AOF 파일에 추가한다. 레디 스 다시 시작할 때이 경우, 프로그램 파일 AOF 재 실행 명령에 의해 재구성 된 데이터 세트의 목적을 달성 할 수있다.

로그 재 작성

작업 AOF의 모드가 지속적으로 증가 쓰기 명령 때문에, 명령 파일의 끝에 추가되기 때문에, AOF 문서의 볼륨이 커지고 될 것입니다. 예를 들어, 당신은 당신이 100 레코드 (항목)를 사용하는 데 필요한 카운터, AOF 파일의 현재 값을 저장하기 때문에 그냥 카운터에 100 배 INCR를 호출하는 경우. 그러나 실제로 SET 명령은 카운터의 현재 값을 유지하는 하나의 충분한을 가지고 사용하고, 나머지 99 개 기록은 실제로 중복입니다.

이 상황을 처리하기 위해 레디 스 흥미로운 기능을 지원 : 당신은 수있는 서비스 클라이언트를 방해하지 않고, 재건 AOF 문서에

(재구성). 명령을 실행 BGREWRITEAOF, 레디 스 AOF는이 파일이 명령은 적어도 현재의 데이터 세트를 재구성하는 데 필요한 포함, 새로운 파일을 생성합니다. 수동으로 명령을 실행에 레디 스 2.2 BGREWRITEAOF의 필요성 레디 스 2.4, 자동 트리거 AOF 재 작성, 특정 정보는, 예를 들어 구성 파일 2.4를 참조하십시오 수 있습니다.

어떻게 내구성 AOF

얼마나 레디 스 먼저 데이터를 디스크에 fsync를합니다 구성하기 전에. 세 가지 방법이 있습니다 :

새 명령은 fsync를의 구현에 AOF 문서에 추가 될 때마다 : 매우 안전 매우 느린

fsync를 한 번 초당 : 충분히 빨리 (거의 영구적 인 사용 RDB), 실패의 경우 데이터 손실의 일초. 결코 fsync를 : 핸들 운영 체제에 데이터를 저장합니다. 빠르고 덜 안전한 선택.

fsync를하는 것이 좋습니다 (또한 기본) 조치는 초당 한 번,이 전략은 계정에 fsync를 속도와 보안을 할 수 있습니다.

파일이 수행하는 방법에 AOF 손상된 경우?

다음 다시 시작 레디 스에서 AOF 데이터의 일관성을 보장,이 파일을로드 거부합니다 파괴되지 않습니다 다운 타임 발생 AOF 파일 오류 (손상) 경우 프로그램이 쓰기 AOF 파일 될 때 서버가 종료 될 수 있습니다. 이 경우, 당신은 AOF 문서의 실수를 복구하려면 다음과 같은 방법을 사용할 수 있습니다 :

  1. 기존 AOF 파일에 대한 백업을 만듭니다.
  2. 의 공급 레디 스를 사용 레디 스 - 검사 - AOF 절차, 원본 파일 AOF 수리 : 레디 스 검사 - AOF -fi X
  3. 두 파일의 차이점을 볼 디 FF -u 대비 수리 파일 백업 AOF AOF 및 원본 파일을 사용하여 (선택 사항).
  4. 레디 스 서버 재시작, 대기 AOF 파일 서버 부하 수리 및 데이터 복구.

AOP 재 작성 원칙

레디 스 포크 ()를 실행, 지금은 모두 부모와 자식 프로세스를 가지고 : AOF 재 작성 및 RDB는 쓰기시 복사 메커니즘의 영리한 사용하는 한, 스냅 샷을 만들 수 있습니다.

새로운 자식 프로세스의 내용은 임시 파일에 기록 AOF 파일을 시작했다.

이러한 변화에도 기존 파일 중간 아래 재 작성의 종류, 기존 파일 AOF에 추가됩니다 동안 모든 새로운 쓰기 명령 실행의 경우, 부모 프로세스들은, 메모리 캐시에 축적하면서 AOF 여전히 안전합니다.

자식 프로세스가 완전히 재 작성 작업 인 경우, 새로운 AOF 파일의 끝에 캐시 메모리에 신호, 추가 데이터를 모두받은 후, 부모 프로세스를 부모 프로세스를 신호를 보냅니다.

해! 모든 명령은 새로운 AOF 파일의 끝에 직접 추가됩니다 후 지금 레디 스는 원자, 새로운 파일로 이전 파일을 교체합니다.

AOF 방법에 RDB 방식으로 전환하는 방법

2.2 이상 레디 스는 RDB에서 AOF로 전환하지 않고 다시 시작할 수 있습니다 : 최신 dump.rdb에 대한 백업 파일을 만듭니다.

안전한 장소에 백업.

다음 두 명령을 실행합니다 :

-redis는-CLI 사기꾼 Fi를 g appendonly 예-CLI 레디 스 사기꾼 Fi를 g "의"Save set 세트

쓰기 명령이 제대로 최종 AOF 파일에 추가되어 있는지 확인합니다.

AOF는 기능까지 첫 번째 명령이 열립니다 : 파일이 초기 AOF이 완료 될 때까지 작성 될 때까지 레디 스 요청 명령을 계속 처리 및 최종 AOF 파일에 추가 기입 명령을 시작합니다 후 레디 스는 차단됩니다.

RDB를 폐쇄하는 제 명령 실행 기능. 이 단계는 당신이 선호하는 경우, 당신은 또한 RDB를 사용하고 동시에 지속성 기능 AOF 수 있으며, 선택 사항입니다.

중요 :에 redis.conf에 AOF 기능을 열 것을 잊지 마세요! 이 CONFIG SET 설정을 구성하여 잊어되기 전에 그렇지 않으면, 서버를 재시작 한 후, 프로그램은 원래의 구성에 따라 서버를 시작합니다.

AOF와 RDB 사이의 상호 작용

2.4 이상 레디 스, 처리 BGSAVE 실행의 버전 번호, BGREWRITEAOF 수행 될 수 없다. 반대로, BGREWRITEAOF 실행의 과정에서, 당신은 BGSAVE을 수행 할 수 없습니다. 동시에이 방지 두 레디 스 백그라운드 프로세스 디스크 I / O 작업의 많은.

BGSAVE 수행, 사용자가 명시 적 BGREWRITEAOF 명령을 호출하는 경우, 서버는 사용자가 OK 상태에 응답하고, 사용자 정보를 통보, BGREWRITEAOF이 실행 될 예정되었습니다 완료 BGSAVE되면, BGREWRITEAOF 공식적으로 시작됩니다. 레디 스를 시작하면 RDB AOF 지속성과 지속성이 열린 경우 AOF는 일반적으로 가장 완료 데이터를 저장 한 파일 때문에, 프로그램은 데이터 세트를 복원하는 AOF 파일의 사용에 우선 순위를 부여합니다.

AOF VS RDB

RDB 영구적 인 방법은 지정된 시간에 데이터의 스냅 샷을 저장할 수 이격 될 수있다.

AOF 원래 데이터를 복원하려면 다음 명령을 다시 실행합니다 서버 다시 시작, AOF 명령이 추가 프로토콜을 저장하는 서버에 각 쓰기 작업 기록 AOF에 또한 파일 .Redis의 끝으로 각 쓰기 작업을 레디 스 지속 배경 파일은 그래서 다시 AOF

파일 크기가 너무 큰되지 않습니다.

당신은 당신의 데이터가 서버가 실행되는 시점에 존재하려면, 당신은 어떤 영구적 인 방법을 사용할 수 없습니다.

레디 스 파일 데이터 세트 AOF 정상적인 상황에서 저장된 원래 데이터를 복원 우선 순위로드 AOF 파일을 다시 시작할 때 당신은 또한 동시에 지속성 열린 두 종류,이 경우, RDB 파일을 저장 할 수있는 것보다 전체 데이터 세트에.

가장 중요한 것은 우리가 시작하는 영구적 인 방법을 RDB 할 수는 RDB와 AOF 지속성 다양한 방법을 이해하는 것입니다 :

RDB의 장점과 단점

이점

매일 지난 30 일을 유지하면서 RDB는 같은 당신이 시간의 각에 지난 24 시간에 데이터를 저장할 수있는 등의 백업 데이터 세트에 대한 데이터 세트, 이상적이었다 시간에 어떤 점을 보유하고 매우 컴팩트 한 파일입니다 데이터는 데이터의 다른 버전으로 복원 할 수있는 문제가 요구에 따라 설정 한 경우에도 그래서.

RDB 재해 복구 용 소형 단일 용이하게 (암호화 있음) 다른 원격 데이터 센터 또는 아마존 S3에 전송 된 파일, 이상적이다.

를 유일한 부모의 요구에 저장이 할 수있는 RDB RDB 파일은 자식 프로세스 포크입니다, 모든 아이에 의해 수행 된 작업은, 부모는 RDB 영구적 인 방법은 레디 스의 성능을 극대화 할 수 있도록, 다른 IO 작업을 수행 할 필요가 없습니다 .

AOF, 대용량 데이터 세트를 복원 RDB 방법과 비교하여 빠른.

결점

이 사건은 당신의 RDB 당신을 위해하지 않은 이상 말을 누락 된 데이터의 레디 스 사고 (예 : 정전) 작동을 중지하십시오. 당신이 (시점 저장 다른 예를 들어 구성 할 수 있지만, 5 분마다 데이터 세트 (100)이있다 쓰기 작업)은 일반적으로 매 5 이상 분, 당신은 몇 가지를 잃을 수 있습니다 계획되지 않은 다운 타임 레디 스의 경우에, 저장 전체를 할 것, 완전한 레디 스 전체 데이터 세트가 상대적으로 무거운 작업입니다 저장하는 것입니다 데이터 분.

RDB는 몇 밀리 초 이내에 레디 스 발생할 수 있습니다 데이터 세트가 포크 프로세스가 매우 시간이 많이 소요되는 경우, 상대적으로 큰 경우, 하드 디스크에 데이터 세트를 저장하기 위해 자주 포크의 자식 프로세스를 필요로 할 수있는 클라이언트 요청을하지 응답. 데이터 세트가있는 경우 거대한 낮은 CPU 성능은 이러한 상황이 1 초 AOF도 포크에 필요한 마지막됩니다 좋은 상황이 아니라 주파수는 데이터 세트의 내구성을 향상시키기 위해 조정할 수있는 로그 파일을 다시 작성합니다.

AOF의 장점과 단점

장점 -

AOF는 사용이 더 내구성 레디 스를 만들 것입니다 : 당신은 fsync를 다른 전략을 사용할 수 없음 fsync를 초당 fsync를 때마다 초당 기본으로 fsync의 fsync와 전략을 사용하여 작성, 레디 스 성능은 fsync를가한다 (여전히 아주 좋은 것입니다. 처리를위한 백그라운드 스레드 주 스레드)가 클라이언트 요청을 처리하기 위해 노력할 것입니다, 실패의 경우, 당신은 데이터를 1 초 최대를 잃게됩니다.

AOF 파일은 수도 있습니다 (디스크 공간, 등, 아래로 작성하는 과정 가득) 경우에도 어떤 이유로, 완전한 쓰기 명령 때문에 쓰기 추구하지 않는, 로그 파일 만 추가하면되지이다 도구를 사용 AOF 레디 스 검사는 - 이러한 문제를 해결합니다.

레디 스 AOF가 AOF의 재 작성 백그라운드에서 자동으로, 너무 큰 파일 크기가 될 수 있습니다 경우 : 명령을 덮어 쓰기 한 후 새 파일 데이터의 최소 세트를 포함 AOF 현재 컬렉션을 복원하는 데 필요한. 전체 작업 때문에 새로운 레디 스 AOF 파일을 만드는 과정에서 절대적으로 안전하다 다시 작성 명령도 중단 재 작성 AOF 파일을 기존 손실되지 않습니다 동안, 기존의 파일 AOF의 내부에 추가 할 것 . 새로운 AOF 파일이 생성되면, 레디 스 새 파일 AOF AOF 파일에 기존의 전환과 새로운 AOF 파일 추가 작업을 시작합니다.

AOF는 AOF 파일의 내용 분석 (구문 분석)에 대한 파일을 매우 쉽게 사람을 읽을 수 있도록 쓰기 작업이 매우 용이도, 형식 레디 스 프로토콜을 저장하기 위해 모든 쓰기 작업이 데이터베이스에서 수행 질서 정연하게 파일을 저장합니다. 수출 (수출) AOF 파일은 매우 간단합니다 : 당신이 조심 FLUSHALL는하지만, 명령을 실행하지 않은 경우 예를 들어, 한 AOF 파일이 덮어되지 않았기 때문에, 너무 오래 서버가 파일의 제거 FLUSHALL 명령 AOF 끝을 중지하고 다시 시작 레디 스, 당신은 FLUSHALL 실행하기 전에 상태로 설정 데이터를 복원 할 수 있습니다.

단점 -

동일한 데이터 세트의 경우, 볼륨 RDB 파일보다 일반적으로 AOF 볼륨 이상을 파일.

fsync를 전략 사용에 따르면, AOF 속도는 RDB보다 더 느려질 수 있습니다. 일반적으로, 두 번째 성능 당 fsync를 매우 높은 여전히, 그리고 가까운 fsync를도 높은 부하에서 고속으로 AOF 속도와 RDB 수 있습니다. 거대한 쓰기로드를 처리 할 때 그러나, RDB는 최대 지연 시간 (대기 시간) 더 많은 보장을 제공 할 수 있습니다.

레디 스 데이터 백업

이 작은 미리 휴가를 읽고에서, 마음에 다음과 같은 문장을 계속 : 확인 데이터 디스크 오류, 데이터가 사라지게 할 수있는 문제의 종류에 의해 전체 백업 노드 실패를 확인, 어떤 백업은 매우 위험합니다.

RDB 파일이 생성되면, 그것은 변경하지 않습니다 : 서버가 실행되는 동안 RDB 파일의 복사본을 만들 수 있기 때문에 데이터 백업을 위해 레디 스은 매우 친절하다. 서버가 새 RDB 파일을 생성 할 때, 첫 번째 콘텐츠 파일은 원자 임시 파일 RDB 원래 파일을 대체 완전한 쓰기 임시 파일, 프로그램을 사용하는 경우에만 (2)의 이름을 임시 파일에 저장됩니다.

파일 복사 RDB가 절대적으로 안전 때마다 그이 의미합니다.

폴더 RDB, RDB와 다른 폴더에 매일 백업 파일에 파일을 백업 시간 다시 당, 반복적 인 작업 (cron 작업)를 만듭니다.

예를 들어, 지난 48 시간 이내에 시간마다 스냅 샷을 유지할 수 있습니다, 당신은 마지막을 유지할 수 있습니다 : 스냅 샷 백업은 적절한 날짜와 시간 정보 때마다 오래된 스냅 샷을 삭제하려면 Fi를 차 명령을 사용하여,주기적인 작업 스크립트를 수행하여 있는지입니다 1 ~ 2 개월의 일상 스냅 샷.

하루에 한 번 적어도, RDB는 레디 스 서버를 실행하는 물리적 시스템 이상 백업에 적어도 외부로 데이터 센터를 백업하거나 것입니다.

#! /bin/bash
PATH=/usr/local/bin:$PATH
redis-cli SAVE
date=$(date +"%Y%m%d")
cp /var/lib/redis/6379/dump.rdb /data01/cache_backup/$date.rdb
echo "done!"

재해 복구

기본적으로 재해 복구 데이터 백업 레디 스 및 다른 외부 백업 데이터 센터의 복수를 전송합니다. 재해 복구가 될 수 있습니다

심각한 문제는 데이터가 안전한 상태에 여전히 그래서, 실행 및 기본 데이터 센터의 스냅 샷을 생성 레디 스합니다.

많은 사용자가 기업이기 때문에 다음의 도입은 실용적이고 저렴한 재해 복구 백업 방법의 일부 그래서 레디 스, 그들은 많은 돈이 낭비 많지 않아 :

아마존 S3, S3 및 기타 유사한 서비스는 재해 복구 시스템을 구축 할 수있는 좋은 장소입니다. 가장 쉬운 방법은 매 시간 또는 매일 백업 암호화 S3로 전송을 RDB하는 것입니다. 데이터의 암호화 (대칭 암호화 모드) GPG -c 명령을 수행 할 수 있습니다. 여러 가지, (예를 들어, 조직의 가장 중요한 사람에게 암호를 복사 할 수 있습니다) 갈 안전한 장소로 암호를 설정해야합니다. 데이터 파일을 저장하기 위해 여러 스토리지 서비스를 사용하면 데이터 보안을 향상시킬 수 있습니다.

스냅 완전한 SCP (조립 SSH)를 사용하여 전송 될 수있다. 다음은 간단하고 안전한 배송 방법 : 그래서 당신이 할 수있는, 아주 멀리 가까운 VPS 설치 SSH를 데이터 센터를 구입 암호없는 SSH 클라이언트 키를 생성하고, VPS의 authorized_keys 파일에 키를 추가 VPS이 스냅 샷 백업 파일 전송. 위해서는 적어도 두 개의 서로 다른 업체에서 최고의 데이터 보안을 달성하기에 어디에 데이터 재해 복구를 위해 각 구매는 VPS.

신중하게 처리하지 않을 경우 재해 복구 시스템의 이러한 유형은 매우 쉽게 실패하는 것을 주목해야한다. 볼륨 및 최소한 원래 볼륨 스냅 샷 파일이든, 당신은 파일 전송이 완료되면, 백업 파일 전송이 동일 확인해야합니다. 당신이 VPS를 사용하는 경우, 당신은 또한 확인할 수 있습니다 확인에 SHA1 파일 및 문서를 비교하여 완전한 전송 여부.

또한, 당신은 또한 별도의 경보 시스템이 필요하고, 컨베이어 (전송) 백업 실패를 보내는 책임이 때 당신을 말할 수 있습니다.

게시 된 682 개 원래 기사 · 원 찬양 1391 · 조회수 1,710,000 +

추천

출처blog.csdn.net/itcast_cn/article/details/104773744