

DjangoにてRedisをフェイルオーバーしたいのですが、その具体的な方法が分かりません…。

現状では下記のように設定しております

  * Redisをセッションバックエンドとして指定
  * Redisのサーバーを二つ用意し、マスタスレーブ構成にする。
  * SentinnelにてRedisはマスタに障害が発生した際にはスレーブがマスタに自動昇格

settings.pyは以下のように設定しております

[code]

    CACHES = {
        'default': {
            'BACKEND': 'redis_cache.RedisCache',
            'LOCATION':[
                "127.0.0.1",
                "IPofSlave"
            ],
            'OPTIONS': {
                'PASSWORD': "xxxxxxxx",
                'DB': 0,
            }
        }
    }
    SESSION_ENGINE = 'django.contrib.sessions.backends.cache'
    SESSION_CACHE_ALIAS = "default"
    
[/code]

Djangoは基本的にはマスタのみを使い、マスタに障害が発生した際にはスレーブに接続が行くようにしたいのですが、その具体的な方法が分かりません…。

どなたかご存知であればご教示いただけますでしょうか。  
どうぞよろしくお願いいたします。


CC BY-SA 4.0
2015-12-08T01:59:18.950
19746
2020-06-15T05:04:50.707
2019-04-30T20:27:32.510
29826
9078
question
python django redis
DjangoにてRedisをフェイルオーバーしたい


Django標準の `django.contrib.sessions.backends.cache` ではなく、 `django-redis` 及び
`redis-py-cluster` というライブラリを組み合わせることで可能なようです。

[django-redis documentation](http://niwinz.github.io/django-redis/latest/)

手元では試せていませんが、Redisクラスタを構築出来た例がIssueにコメントされています。

>
[code]

>       'default': {
>         'BACKEND': 'django_redis.cache.RedisCache',
>         'LOCATION': 'redis://XXX.YYY.ZZZ.cache.amazonaws.com/0',
>         'OPTIONS': {
>           'REDIS_CLIENT_CLASS': 'rediscluster.RedisCluster',
>           'CONNECTION_POOL_CLASS':
> 'rediscluster.connection.ClusterConnectionPool',
>           'CONNECTION_POOL_KWARGS': {
>             'skip_full_coverage_check': True # AWS ElasticCache has disabled
> CONFIG commands
>           }
>         }
>       }
>     }
>  
[/code]

>
> [Redis Cluster support. · Issue #208 · niwinz/django-
> redis](https://github.com/niwinz/django-redis/issues/208)


CC BY-SA 4.0
2019-04-30T20:27:11.780
54615
2019-04-30T20:27:11.780
29826
19746
answer