redisに接続するnodejsアプリを構築しています。これは、ローカルの redis インスタンスで動作します。現在、ioredis
nodejs アプリから AWS の k8s の redis クラスターに接続するために使用しています。これが私が持っているものです。
const Redis = require("ioredis");
this.redis = new Redis({
port: 6379, // Redis port
host: rhost, // Redis host
password: password
});
this.redis.on('connect', () => {
console.log('connected to redis')
})
connected to redis
メッセージがログに出力されるので、クラスターに正常に接続したようです。ただし、redis オブジェクトを使用しようとするたびに、MOVED エラーが発生します。
UnhandledPromiseRejectionWarning: ReplyError: MOVED 5011 <ip address>:6379
at parseError (/node_modules/ioredis/node_modules/redis-parser/lib/parser.js:179:12)
at parseType (/node_modules/ioredis/node_modules/redis-parser/lib/parser.js:302:14)
接続は私のローカルで機能します。ただし、AWS ではそうではありません。Redis.Cluster
の代わりにオブジェクトを使用してスワップしようとしましたRedis
が、アプリをデプロイした後、アプリケーションがハングし、接続イベントが発生しません。close
とイベントが無限にループしているreconnecting
ようです。
私の理解では、これはクラスター内のノード間のリダイレクトの問題です。おそらく、マスター/スレーブ構成に問題があります。エラーは AWS の構成の問題ですか? Redis.Cluster
プレーンなRedis
インスタンスの代わりにオブジェクトを使用する必要がありますか? MOVED エラーを修正する最善の方法は何ですか?