メニュー
Amazon ElastiCache
ユーザーガイド (API Version 2015-02-02)

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 パーセント) に設定することをお勧めします。詳細については、「予約メモリの管理 (Redis)」を参照してください。

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

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

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

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