AOF Multi-Part

Redis Server 教育
Redis Server Course
Redis 定期点検/技術支援
Redis Technical Support
Redis エンタープライズサーバ
Redis Enterprise Server

AOF Multi-Part

역사 歷史 History

AOF는 레디스 버전 1.2에 도입되었다. AOF는 text format으로 쓰여진다. 이후 7.0이 나오기 전까지 appendonly.aof 한 파일로 유지되었다. 버전 4.0에 aof-use-rdb-preamble 파라미터가 추가되어 AOF Rewrite시 RDB format(binary)으로 저장할 수 있게 되었다. 이후 증가분은 text로 저장된다.
레디스 7.0에서 AOF가 여러 파일로 저장되는 것으로 변경되었다.

한 파일로 관리하는 것의 단점

한 파일로 관리할 때는 다음과 같이 3단계(step)로 처리된다. Rewrite 중심으로 설명.

  • Step 1: 자식(child) 프로세스를 생성(fork)한다.
    자식 프로세스는 생성 시점 기준으로 메모리에 있는 전체 데이터를 temp aof 파일을 만들어 쓴다.
    부모 프로세스는 새로 입력되는 데이터를 자신의 AOF 파일에 쓰고, 자식 프로세스에 보낸다.
    자식 프로세는 데이터를 받아 보관한다.
  • Step 2: 자식 프로세스가 메모리에 있는 데이터를 다 쓴 다음, 부모 프로세스에게 더 이상 데이터를 보내지 말도록 "stop" 메시지를 보내고, 새로 받은 데이터를 temp aof에 추가한다.
    다 썼으면 파일을 닫고(close) 파일명을 부모 프로세스에게 알린다. 자식 프로세스는 종료한다.
    이 사이 부모 프로세스는 새로 입력되는 데이터를 AOF 파일에 쓰고 버퍼에 보관한다.
  • Step 3: 부모 프로세스는 자식 프로세스로 부터 파일명을 받아 Step 2에서 버퍼에 보관한 데이터를 temp aof 파일에 쓴다.
    부모 프로세스가 쓰던 appendonly.aof 파일을 삭제하고 temp aof 파일을 appendonly.aof로 이름을 변경한다. 이후 부터 appendonly.aof 파일에 입력 데이터를 쓴다.

정리하면
1) aof rewrite 시 입력되는 데이터는 부모 프로세스에서도 쓰고, 자식 프로세스에서도 쓴다. 이중으로 쓰는 것이다.
2) 한 파일로 관리하기 때문에 처리가 복잡하다.
3) 한 파일에 binary와 text가 같이 저장된다.

여러 파일로 관리(Multi-Part)하는 방법 方法 Method

이러한 단점을 개선하기 위해서 여러 파일로 쓰는 방법으로 변경했다.

  • Step 1: 자식 프로세스는 메모리에 있는 전체 데이터를 temp rdb 파일에 쓴다.
    부모 프로세스는 incr 파일에 새로 입력되는 데이터를 쓴다. 새로 입력되는 데이터를 자식 프로세스에 보낼 필요가 없다. Rdb 파일과 incr 파일이 다른 파일이 때문이다.
  • Step 2: 자식 프로세스는 temp rdb 파일을 다 쓰면 부모 프로세스에게 알린다. 자식 프로세스는 종료한다.
  • Step 3: 부모 프로세스는 자신의 rdb 파일을 지우고 temp rdb 파일을 정식 이름으로 변경한다.

이러한 단점을 개선하기 위해서 여러 파일로 쓰는 방법으로 변경했다.

  • 파일명 예)
    appendonly.aof.1.base.rdb
    appendonly.aof.1.incr.aof
    appendonly.aof.manifest
  • AOF 목록 파일(메니페스트) 내용
    $ cat appendonly.aof.manifest
    file appendonly.aof.1.base.rdb seq 1 type b
    file appendonly.aof.1.incr.aof seq 1 type i
    base 파일은 aof-use-rdb-preamble
    yes: appendonly.aof.1.base.rdb (binary format)
    no: appendonly.aof.1.base.aof (text format)
  • AOF 파일이 여러 개이므로 이를 관리하기 위해서 별도의 디렉터리를 만들었다.
    redis.conf: appenddirname "appendonlydir"
    디렉터리 명만 가능하다. 패스(path)는 포함할 수 없다.
    지정한 dir 아래에 만들어진다. 미리 만들 필요 없다.

<< AOF Backup AOF Multi-Part AOF Timestamp >>

Email 返事がかかってなれば、メールでお知らせします。

혹시 처음이세요?
레디스게이트에는 레디스에 대한 많은 정보가 있습니다.
레디스 소개, 명령어, SQL, 클라이언트, 서버, 센티널, 클러스터 등이 있습니다.
혹시 필요한 정보를 찾기 어려우시면 redisgate@gmail.com로 메일 주세요.
제가 찾아서 알려드리겠습니다.
 
close
IP를 기반으로 보여집니다.