フェイルオーバー後に Amazon ElastiCache for Redis (クラスターモード無効) クラスターで「READONLY You can't write against a read only replica」(READONLY 読み取り専用レプリカに書き込むことはできません) というエラーが表示されるのはなぜですか?
簡単な説明
プライマリノードが Amazon ElastiCache クラスターのレプリカノードにフェイルオーバーした場合、レプリカは受信リクエストを処理するプライマリノードの役割を果たします。ただし、次のシナリオでは、 READONLY エラーが発生します。
- アプリケーションノードの DNS キャッシュは、トラフィックを古いプライマリノードにルーティングします。
解決方法
1. クラスタがクラスターモードが無効になっていることを確認します。これを行うには、次を実行します。
ElastiCache コンソールを開き、[Redis clusters] (Redis クラスター) を選択します。クラスタのクラスターモードがオフになっていることを確認します。
注:****クラスターモードがオンの場合は、「ElastiCache for Redis を使用しています。Redis クライアントの読み込みリクエストが常にシャードのプライマリノードから読み取られるか、シャードのプライマリノードにリダイレクトされる理由は何ですか? 」を参照してください。
2. 書き込みコマンドをノードエンドポイントではなくプライマリエンドポイントに送信していることを確認します。書き込みコマンドがプライマリノードに送信されることを検証するには、次のいずれかを実行します。
オプション 1
redis-cli を使用して Redis クラスターに接続し、更新されたキーに対してget key コマンドを実行します。次に、コマンド出力を検証して、最後のコマンドの後にキー値が更新されたことを確認します。
例えば、次のコマンドは key1 の値を hello に設定します。
set key1 "hello"
OK
キーが正しく設定されていることを確認するには、 get コマンドを実行します。
get key1
"hello"
オプション 2
redis-cli を使用して Redis クラスターに接続し、 MONITOR コマンドを実行します。クラスターに送られるすべてのコマンドが一覧表示されます。単一の MONITOR クライアントを実行すると、スループットが 50% を下回る場合があることに注意してください。
3. DNS キャッシュの問題を回避するには、アプリケーションで使用する Redis クライアントライブラリのガイドラインに従って、アプリケーションで再試行ロジックを有効にします。