Redis スナップショットを作成するのに十分なメモリがあることの確認 - Amazon ElastiCache フォー・レディス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Redis スナップショットを作成するのに十分なメモリがあることの確認

バージョン 2.8.22 以降の Redis のスナップショットと同期

Redis 2.8.22 で分岐なしの保存プロセスが導入されました。これにより、同期および保存中にスワップを使用することなく、アプリケーションにより多くのメモリを割り当てて使用することができます。詳細については、「同期とバックアップの実装方法」を参照してください。

バージョン 2.8.22 以前の Redis のスナップショットおよび同期

Redis ElastiCache を使用する場合、Redis は多くの場合バックグラウンドの書き込みコマンドを呼び出します。

  • バックアップのためのスナップショットを作成するとき。

  • レプリカとレプリケーショングループ内のプライマリを同期させるとき。

  • Redis の AOF (Append-Only File) 機能を有効にするとき。

  • レプリカをプライマリに昇格するとき (プライマリ/レプリカの同期が実行される)。

Redis がバックグラウンドの書き込みプロセスを実行するときは、常に、このプロセスのオーバーヘッドに対応するのに十分なメモリが利用できる必要があります。十分なメモリを利用できない場合、このプロセスは失敗します。このため、Redis クラスターの作成時には、十分なメモリがあるノードインスタンスタイプを選択することが重要です。

バックグラウンド書き込みプロセスとメモリ使用率

バックグラウンド書き込みプロセスが呼び出されると、Redis は常にそのプロセスを生成 (フォーク) します (Redis はシングルスレッドであることを思い出してください)。1 つのフォークがデータをディスクの Redis .rdb スナップショットファイルに永続化します。もう 1 つのフォークは、すべての読み取りと書き込みのオペレーションを処理します。スナップショットがポイントインタイムスナップショットであることを保証するために、すべてのデータの更新と追加が、データ領域とは別の使用可能なメモリ領域に書き込まれます。

データをディスクに保持しながら、すべての書き込みオペレーションを記録するのに十分なメモリが使用できる限り、メモリ不足の問題は発生しません。次のいずれかに該当する場合は、メモリ不足の問題が発生する可能性があります。

  • アプリケーションで頻繁に書き込みオペレーションが実行され、新しいデータや更新されたデータを受け入れるために使用可能なメモリが大量に必要になる。

  • 新しいデータや更新されたデータを書き込むために使用できるメモリが少なすぎる。

  • ディスクに永続化するのに長時間かかる大規模なデータセットがあり、大量の書き込みオペレーションが必要になる。

次の図は、バックグラウンド書き込みプロセス実行時のメモリの使用を示しています。


					イメージ: バックグラウンド書き込み中のメモリ使用の図。

バックアップを実行する際のパフォーマンスへの影響については、「独自設計型クラスターのバックアップがパフォーマンスに与える影響」を参照してください。

Redis がスナップショットを実行する方法の詳細については、http://redis.io を参照してください。

リージョンとアベイラビリティーゾーンの詳細については、「リージョンとアベイラビリティーゾーンの選択」を参照してください。

バックグラウンド書き込み実行中のメモリ不足の回避

BGSAVE または BGREWRITEAOF のようなバックグラウンド書き込みプロセスが呼び出されると、プロセスの失敗を防ぐためには、処理中の書き込みオペレーションが消費する量以上のメモリが必要となります。最悪の場合のシナリオでは、バックグラウンド書き込みのオペレーション中にすべての Redis レコードが更新され、新しいレコードがキャッシュに追加されます。そのため、Redis バージョン 2.8.22 より前の場合は、reserved-memory-percent を 50 (50 パーセント) に設定し、Redis バージョン 2.8.22 以降の場合は 25 (25 パーセント) に設定することをお勧めします。

maxmemory 値は、データとオペレーションのオーバーヘッドで使用できるメモリを示します。デフォルトのパラメータグループの reserved-memory パラメータを変更することはできないため、クラスター用のカスタムパラメータグループを作成する必要があります。reserved-memory のデフォルト値は 0 です。この場合、Redis はすべての maxmemory をデータ用に消費でき、バックグラウンド書き込みプロセスなどの他の用途に使用できるメモリがほとんど残されない可能性があります。ノードインスタンスタイプごとの maxmemory 値については、「Redis のノードタイプ固有のパラメータ」を参照してください。

ボックスで reserved-memory パラメータを使用して、Redis のメモリ使用量を抑えることができます。

ElastiCache での Redis 固有のパラメータの詳細については、「Redis 固有のパラメータ」を参照してください。

パラメータグループの作成と変更については、「パラメータグループを作成する」と「パラメータグループを変更する」を参照してください。