Redis - (error) NOAUTH Authentication required への対応

概要

経年運用し特にメモリも問題なかったRedisが突如接続エラーが発生したので
その際の対応をまとめました。

エラー内容

1
PHP Fatal error:  Uncaught exception 'RedisException' with message 'Failed to AUTH connection'

認証接続に失敗して Exception になっている。

Redisの設定周りで特にrequirepass を設定していないし
何故突然?という感じでした。

各環境でRedisの設定パスは異なると思いますが、自環境の場合以下です。
/etc/redis/6379.conf

以下のようにrequirepassはコメントアウトされている。

1
# requirepass

対応

  • process を kill する
    service redis restart のように redisを再起動しても状況は変わりませんでした。
1
2
3
# ps aux | grep 'redis' | grep -v 'grep'

root 12743 0.1 0.2 40604 2124 ? Ssl 10:50 0:00 /usr/local/bin/redis-server *:6379
  • 再度 redis を起動させる。

    1
    # service redis start
  • requirepass 設定

運用中でアプリケーション自体のソースをいじりたくなかったので
空のrequirepass を設定しました。

1
redis-cli> CONFIG SET REQUIREPASS ''

上記で取り急ぎ対応は問題なかったです。

総評

改めて利用する際には
認証設定をしてアプリケーションからも
passwordを指定して接続する仕組みが良いですね。

ただ何故急に発生したかは引き続き調査をしていきます。

理由がわかる方はコメントなどいただけましたら幸いです。

Use Redis via Python

Memorandum

The below codes is how to use redis via Python.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#!/usr/bin/python
# coding: UTF-8

import redis

r = redis.StrictRedis(host='localhost', port=6379)

# set/get string.
r.set('test1', 'aiueo')
r.expire('test1', 1000)
print r.get('test1') # aiueo

# set/get integer.
r.set('test2', 2)
print r.get('test2') # 2

# Check key exit.
print r.exists('test1') # True
print r.exists('test0') # False

# pattern match
keys = r.keys('test*')
if len(keys) > 0 :
for key in keys:
print '--------------------------------------------'
print key # test1, test2
print r.get(key) # aiueo, 2
print r.type(key) # Type : string, string
print r.ttl(key) # Expire : if not set, set "-1"

r.append('test1', '_kkkkkkk')
print r.get('test1') # aiueo_kkkkkkk

# delete cache.
r.delete('test1')
print r.exists('test1') # False

Thanks.