一般的な Databases for Redis エラーを回避するにはどうすればよいですか?
Databases for Redis は、メモリー内のデータベースです。 これは、データの受け入れ、処理、および保管の方法が従来の永続データベースとは異なります。 以下の情報では、発生する可能性がある一般的なエラー、それらのエラーのいくつかの理由、およびそれらのエラーを修正するために適用できる解決策を中心に説明します。
エラー: Connection to master lost
メッセージ
Databases for Redis は、2 つのメンバー (マスターとレプリカ) と 3 つの標識を使用して機能します。 以下の理由が、 connection to master lost
メッセージの原因である可能性があります。
a. 1 秒当たりの入出力操作 (IOPS) が低いため、マスターはビジーで、標識に応答していません。これにより、このエラー・メッセージが LogDNAに返されます。
b. ネットワーク待ち時間が原因で、標識はマスターと通信できません。
c. 定期保守アクティビティー。
d. マイナー・バージョンのアップグレード。
ソリューション
以下の解決策を試行して、エラーを修正してください。
a. ディスク・サイズを増やします。 1 GB は 10 IOPS に相当します。
b. 専用リソースの割り振りのために、分離されたコンピュートに移動します。
c. RAM サイズを増やします。
d. RETRY ロジックが必要であるため、これが実装されていることを確認してください。
e. レプリカは、数秒後に自動的にマスターにプロモートされます。
f. Redis インスタンスに memory eviction
ポリシーまたは TTL
ポリシーを実装します。
IBM® Cloud Databases は、マスター・ノード上でアクティビティーを実行しません。 必要に応じて、すべてのアクティビティーがレプリカ・ノードで完了し、マスターにプロモートされます。 データベースは、レプリカ・プロモーションが行われる前に、マスター・ノードを見つけるために 30 秒待機するように設定されています。
エラー: 非同期 AOF fsync に時間がかかりすぎています (ディスクがビジーですか?)
AOF は付加専用ファイルです。 これは、永続設定がオンの場合に Redis 永続ディスクに書き込まれるログです。
Redis は、AOF および RDB ファイルを使用して、スナップショット作成用のログおよび RDB を書き込みます。
このエラーが表示される理由には、以下のようなものがあります。
a. IOPS が不十分であるため、 Redis はディスクに書き込むことができません。
b. バッチの実行と同時に Databases for Redis バックアップが実行されている可能性があります。
c. アプリケーションが Redis インスタンスに対して不明な API 呼び出しを行っている可能性があります。
メトリックに使用される PSYNC を除き、インスタンス内の他の API は要求されません。
ソリューション:
以下の解決策を試行して、エラーを修正してください。
a. ディスク・サイズを増やします。 ボールパークの推奨は、予想される量より 30% 多い量です。
b. Redis が最大容量に達している場合は、単一の Redis インスタンスを複数のインスタンスに分割し、アプリケーション・アーキテクチャーを調整します。
c. パーシスタンスが不要な場合は、それをオフにします。 代わりにキャッシュ・モードに変更してください。
ディスク・サイズはスケールダウンできませんが、メモリーはスケールダウンできます。 Redis はメモリー内のデータ・ストアであるため、インスタンスのメモリーを縮小する前に、進行中のデータ・サイズを評価することをお勧めします。これは、大幅に縮小するとエラーになる可能性があるためです。
エラー: インスタンスのスケーリングが停止しているか、予想よりも長い時間がかかっています
IBM Cloudを使用すると、データのニーズの増大に応じてインスタンスをスケーリングまたはサイズ変更できます。 UI、CLI、および API からの自動スケーリングと手動スケーリングを提供します。 ただし、インスタンスのサイズを変更する際には注意してください。 スケーリングに予想より長い時間がかかっている場合は、以下のいずれかの理由が考えられます。
a. インスタンスは既に最大のインスタンス (コア * 図) にあり、ワークロードを現在に移動するために使用できるより大きなクラスターはありません。 この場合、新しいクラスターが形成され、インスタンスが移動されます。これには数分かかることがあります。
b. メモリーが大幅に削減されました (例えば、16 GB RAM から 10 GB RAM に削減されました)。 ただし、データ・ストア・サイズ (ディスク) は、例えば 11 GB など、それよりも大きくなります。 このような場合、ディスクからデータを読み取るための十分なスペースが RAM にないため、形成が滞る可能性があります。
ソリューション:
以下の解決策を試行して、エラーを修正してください。
a. Redis は、その 1 次操作用に単一スレッド化されています。 使用するコア数が少なくなり、メモリーが増えることが予想されます。 これにより、クラスターの可用性が向上します。
b. 入出力のニーズに応じて、RAM とディスクを増やします。
c. RAM を大幅に削減しないでください。 徐々に減分することをお勧めします。
Redis が固有のプロセスを実行するためのウォーターマーク・メモリーが残っていることを確認します。
エラー: READONLY 読み取り専用スレーブに対して書き込みを行うことはできません。
Databases for Redis には、マスターとレプリカの 2 つのノードがあります。 ユーザーはマスター・ノードにのみ接続でき、レプリカ・ノードは高可用性を確保するために使用されます。高可用性は通常、ユーザーがアクセスできません。 ただし、リモート接続の場合と同様に、レプリカがマスターにプロモートされる場合に切り替えが発生する可能性があります。 ノードが正しく構成されている場合、一時的なサービスの停止が発生する可能性があり、その他の影響は予期されません。
a. IOPS が低いため、マスターはビジーで、標識に応答しません。これにより、このエラー・メッセージが LogDNAに返されます。
b. ネットワーク待ち時間が原因で、標識はマスターと通信できません。
c. 定期保守。
d. マイナー・バージョンのアップグレード。
ソリューション:
以下の解決策を試行して、エラーを修正してください。
a. 再試行および再接続のロジックをアプリケーション設計に組み込みます。 ioredis
や noderedis
などのライブラリーを使用できます。 詳しくは、 Redis に関するブログ投稿 を参照してください。
b. 特定のクライアントには、再試行および再接続のロジックが組み込まれています。 これらのクライアントも利用できます。
c. 再試行および再接続のロジックは、すべてのクラウド・サービスに対して強くお勧めします。