Redis永続化方式-RDBとAOFの構成とrewriteメカニズム

2630 ワード

冒頭
本論文では,Redisデータの永続化−RDBとAOFの簡単な紹介と密接に関連し,redisデータの永続化がどのように構成されるか,および前の論文に存在する問題について主に紹介する.
本文
redisのコア構成構成はredisである.conf、本稿はredis-4.0.6バージョンに基づいて説明します.
RDBデータ永続化構成
デフォルトでは、redisのRDBデータの永続化はオンです.redisでconfには、次のデフォルト構成があります.
save 900 1
save 300 10
save 60 10000

#      (     ),    :
# save  

構成の説明:
例えばsave 60 10000は、60 s以内に10000 keyが変更された場合、スナップショットを保存し、新しいスナップショットを生成するたびに、以前の古いスナップショットを上書きすることを示す.
補足:
  • redis-cli SHUTDOWNコマンドによりredisを停止し、redisは終了するとメモリ内のデータを直ちに完全なrdbスナップショット
  • を生成する.
  • は、saveまたはbgsaveコマンドを手動で呼び出し、rdbスナップショット生成
  • を同期または非同期で実行することができる.
  • 上の3行の配置注釈を削除するか、RBD持続化
  • を閉じることができる.
    AOFデータ持続化構成
    AOFは永続化され、デフォルトではオフになっています.開くconf、次の構成を見つけます.
    appendonly no #    yes      AOF
    
    appendfilename "appendonly.aof" # aof    
    
    # appendfsync always
    appendfsync everysec #   
    # appendfsync no
    

    AOF永続化をオンにすると、redisは書き込みコマンドを受信するたびに、オペレーティングシステムcacheに書き込み、一定時間おきにfsyncを書き込みます.これは、上記のappendfsync構成に対応します.
    fsyncの3つのポリシー
    appendfsync always :             fsync; 
    appendfsync everysec:        fsync; 
    appendfsync no :     fsync,          
    

    AOFのrewriteメカニズムについて
    redisにはキャッシュ淘汰ポリシーがあるため、データが自動的に期限切れになり、ユーザーによって自発的に削除される可能性があり、redisのデータが少なくなる可能性があります.
    しかし、データは削除されたものの、その対応する書き込みログはまだAOFログファイルの中にあり、AOFログファイルが一つなので、このファイルはどんどん大きくなっていきます~~
    だからrewriteがこの問題を解決するために、AOFは自動的にバックグラウンドで一定時間おきにrewrite操作をします.
    例えば、ログには100 wのデータが格納されている書き込みログがあり、redisメモリのデータは10 wしかありません.
    AOFは、現在のメモリの10 wのデータに基づいて新しいログファイルを構築し、以前の古いログファイルを上書きします.
    補足:
  • redis 2.4以降、自動的にrewrite操作
  • が行う.
  • はredisにあります.confでは、rewriteポリシー
     auto-aof-rewrite-percentage 100 
     auto-aof-rewrite-min-size 64mb
     
     #            
            rewrite   ,        128 MB
                     100%(       ),         300MB
           64 MB(       )   ,     64 MB,     rewrite
    
  • を構成することができる
  • もしredisがAOFファイルを書き込む時、機械がダウンタイムしてAOFファイルが破損する可能性がある場合、redis-check-aof--fixコマンドで破損したAOFファイル
  • を修復することができる.
    rewriteプロセス
  • redis forkサブプロセス
  • サブプロセスは、現在のメモリのデータに基づいて、新しい一時的なAOFファイルへのログの書き込みを開始する
  • .
  • redisメインプロセスは、クライアントの新しい書き込み操作を受信すると、新しいログをメモリに書き込み、古いAOFファイル
  • に書き込む.
  • サブプロセスが新しいログファイルを書き終えた後、redisメインプロセスはメモリの新しいログを新しいAOFファイルの
  • に再追加する.
  • 古いログファイル
  • を新しいログファイルで置き換える
    その他
  • AOFとRDBの両方がオープンしている場合、redisが再起動するときは、データが比較的完全な
  • であるため、AOFによるデータ復旧が優先される.
  • RDBスナップショットを生成するとき、redisはAOF rewrite
  • を実行しない
    まとめ
    実践は真理を検証する唯一の基準であり、実践に着手してこそ、redisがどのようにデータ回復をしたのかを本当に体得することができる.また、rdbスナップショットファイルとaofログファイルを手帳で開き、中に何が保存されているのかを見ることもできる.