この記事では、Azure Managed Redis で発生する可能性がある実際のデータ損失または認識されるデータ損失を診断する方法について説明します。
注
このガイドのトラブルシューティング手順には、Redis コマンドを実行してパフォーマンス メトリックを監視する手順が含まれています。 詳細については、「 関連コンテンツ」の記事を参照してください。
部分的なキーの損失
Azure Managed Redis では、キーをメモリに格納した後にキーがランダムに削除されることはありません。 有効期限ポリシー、削除ポリシー、または明示的なキー削除コマンドにより、キーが削除されます。 CLI を使用してこれらのコマンドを実行 します。 Azure Managed Redis インスタンスのプライマリ ノードに書き込まれたキーは、レプリカですぐに使用できない場合があります。 データは、プライマリからレプリカに非同期的に非ブロッキング方式でレプリケートされます。
キャッシュからキーが消えた場合は、次の原因を確認してください。
| 原因 | 説明 |
|---|---|
| キーの有効期限 | タイムアウトが設定されているため、キーは削除されます。 |
| キーの強制削除 | メモリが少ない場合、キーは削除されます。 |
| キーの削除 | クライアントは、明示的な削除コマンドを実行してキーを削除します。 |
| 非同期レプリケーション | データ レプリケーションの遅延のため、レプリカではキーを使用できません。 |
キーの有効期限
Azure Managed Redis では、そのキーのタイムアウトが経過すると、キーが自動的に削除されます。 Redis キーの有効期限の詳細については、EXPIRE コマンドのドキュメントを参照してください。 SET、SETEX、GETSET、およびその他の *STORE コマンドを使用して、タイムアウト値を設定することもできます。
有効期限が切れたキーの数を確認するには、 INFO コマンドを使用します。
Stats セクションに、有効期限が切れたキーの総数が示されます。
Keyspaceセクションでは、タイムアウトがあるキーの数と平均タイムアウト値について詳しく説明します。
# Stats
expired_keys:46583
# Keyspace
db0:keys=3450,expires=2,avg_ttl=91861015336
キャッシュの診断メトリックを調べて、キーが見つからないときと削除されたキーの急増との間に相関関係があるかどうかを確認します。
キーの強制削除
Azure Managed Redis には、データを格納するためのメモリ領域が必要です。 必要に応じ、メモリを解放するためのキーが削除されます。 INFO コマンドの used_memory または used_memory_rss の値が、構成されている maxmemory 設定に近づくと、Azure Managed Redis はキャッシュ ポリシーに基づいて、メモリからのキーの強制削除を開始します。
INFO コマンドを使用して、削除されたキーの数を監視します。
# Stats
evicted_keys:13224
キーの削除
Redis クライアントは 、DEL または HDEL コマンドを実行して、Azure Managed Redis からキーを削除します。
INFO コマンドを使用して、削除操作の数を追跡します。
DEL または HDEL コマンドが実行された場合は、Commandstatsセクションに一覧表示されます。
# Commandstats
cmdstat_del:calls=2,usec=90,usec_per_call=45.00
cmdstat_hdel:calls=1,usec=47,usec_per_call=47.00
非同期レプリケーション
Azure Managed Redis で高可用性を有効にすると、サービスによってプライマリ ノードと少なくとも 1 つのレプリカが作成されます。 システムは、バックグラウンド プロセスを使用して、プライマリからレプリカに非同期的にデータをコピーします。 詳細については、 Redis レプリケーションのドキュメント を参照してください。
レプリケーションは瞬時に行われないため、クライアントが Redis に頻繁に書き込む場合、部分的なデータ損失が発生する可能性があります。 たとえば、クライアントがキーを書き込んだ後、バックグラウンド プロセスでキーをレプリケートする前にプライマリ ノードが失敗した場合、レプリカが新しいプライマリになるとキーは失われます。
大部分または完全なキーの損失
ほとんどのキーまたはすべてのキーがキャッシュから消える場合は、次の原因を確認してください。
| 原因 | 説明 |
|---|---|
| キーのフラッシュ | 誰かがキーを手動で消去しました。 |
| Redis インスタンスのエラー | Redis サーバーは使用できません。 |
キーのフラッシュ
クライアントは FLUSHDB または FLUSHALL コマンドを呼び出して、Redis インスタンスからすべてのキーを削除できます。 キーがフラッシュされているかどうかを確認するには、 INFO コマンドを使用します。
Commandstats セクションには、FLUSHコマンドが実行されるかどうかを示します。
# Commandstats
cmdstat_flushall:calls=2,usec=112,usec_per_call=56.00
cmdstat_flushdb:calls=1,usec=110,usec_per_call=52.00
Redis インスタンスのエラー
Redis は、インメモリ データ ストアです。 データは、Redis キャッシュをホストする物理マシンまたは仮想マシン (VM) にとどまります。 Azure Managed Redis キャッシュは、既定でゾーン回復性キャッシュを提供することで、データ損失に対する高い回復性を提供します。 このキャッシュ内のプライマリ シャードが失敗すると、レプリカ シャードが自動的に引き継ぎ、データを処理します。 これらの VM は、障害と更新のために別々のドメインに存在するため、両方が同時に使用できなくなる可能性が最小限に抑えられます。 大規模なデータ センターの停止が発生した場合でも、VM は一緒にダウンする可能性があります。 このようなまれなケースでは、データが失われます。
Redis データの永続化と geo レプリケーションを使用して、これらのインフラストラクチャの障害からデータをより適切に保護します。