AWSのElasticache(Redis)のパラメーターmaxclientsの値が上限に達したときの対応方法

投稿者: Anonymous

Sidekiqを動かすためにAWSのElasticacheを使用しています。
Redisのバージョンは2.8.6です。

Redisの「(error) ERR max number of clients reached」というエラー対応に困っています。
コマンドライン操作で「FLUSHALL」を実行して、データを一旦クリアすることで対応しましたが、待機状態のジョブもリセットしてしまう結果となったので、ジョブのリセットを防ぐ良い解決策を知っている方がいればお教えください。

よろしくお願いします。詳細は下記にまとめました。

Redisのmaxclientsというパラメーターが上限値(65000)に達してしまった際に発生するエラーで、Sidekiqのダッシュボード画面の下部の「接続」という項目(※下図の赤枠箇所)が64999となり、Sidekiqの動作も止まってしまう。

Sidekiqのダッシュボード画面

Elasticacheのマニュアル(http://docs.aws.amazon.com/ja_jp/AmazonElastiCache/latest/UserGuide/CacheParameterGroups.Redis.html
によると、maxclientsの上限値は変更できないとのこと。

エラーへの対応として、Elasticacheをリブートして、コマンドライン操作で「FLUSHALL」を実行して、データを一旦クリアすることで対応。
(※Redisのコマンドライン操作で何を打ち込んでも、「(error) ERR max number of clients reached」のエラーが返ってきてしまい、「FLUSHALL」すらできなかったので、Elasticacheの再起動が必要だった。)
しかし、待機状態のジョブもリセットしてしまう結果となった。

解決

Elasticacheのパラメーターであるtimeoutの値がデフォルトだと0だったため、0より上の値に設定してあげたところ(とりあえず3600に設定)、接続(maxclients)の値も解放され、解決することができました。

timeoutの値が0だとアイドル状態のクライアントとの切断処理を行わないため、蓄積されていました。AutoScalingしたインスタンスからElasticache(Redis)に接続するときは注意が必要です。

デフォルトのパラメーターグループの値は編集できないので、新しくパラメーターグループを作成し、適用しました。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *