2

redisに接続するnodejsアプリを構築しています。これは、ローカルの redis インスタンスで動作します。現在、ioredisnodejs アプリから 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 エラーを修正する最善の方法は何ですか?

4

4 に答える 4