redis 使用哨兵模式的方法在以前的博文中有介绍过,那么如果我们 Django 的系统用 cache 和 celery 连接的 redis 是哨兵模式,使用方法是怎么样的呢?
一起来看一下 demo 吧。
注意:celery 仅在 4.2 版本以后才支持 redis 使用哨兵模式。
以下是用到的 依赖的版本情况:
celery==4.2.0
Django==2.1
django-redis==4.10.0
django-sentinel==0.1.0
redis==3.2.0
基础信息
master name 为 ‘mymaster’
redis 哨兵的 ip 和 port 分别是:
192.168.1.1:26379
192.168.1.2:26379
192.168.1.3:26379
密码为:‘mypassword’
缓存
Django 使用缓存用到的依赖是 django-sentinel,推荐还有一个类似的包,但是我测试的过程中发现不可用,可能是姿势不对,但我用这个依赖测试成功,所以这里给出 demo。
# settings.py
# django-sentinel==0.1.0
LOCATION = "mymaster/192.168.1.1:26379,192.168.1.2:26379,192.168.1.3:26379/1"
REDIS_PASSWORD = "mypassword"
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": LOCATION,
"OPTIONS": {
"PASSWORD": REDIS_PASSWORD,
"CLIENT_CLASS": "django_sentinel.SentinelClient",
"CONNECTION_POOL_KWARGS": {"max_connections": 100}
}
}
}
设置好之后可以通过 shell 进行 cache 的验证,先 set 再 get,或者 set 之后直接去 redis 里 get。
celery
首先将 celery 版本升级为 4.2 或者 4.2 以后。
这里说个插曲,项目之前用的是 djcelery,但是 djcelery 最高版本为 3.x,不支持使用哨兵模式,所以得升级 celery 使用。
然后在 settings.py 里设置参数:
# setting.py
# celery==4.2.0
# Django==2.1
BROKER_BACKEND = 'redis'
MASTER_NAME = "mymaster"
CELERY_BROKER_URL = "sentinel://:mypassword@192.168.1.1:26379/1;sentinel://:mypassword@192.168.1.2:26379/1;sentinel://:mypassword@192.168.1.3:26379/1"
CELERY_BROKER_TRANSPORT_OPTIONS = {"master_name": MASTER_NAME}
CELERY_RESULT_BACKEND = 'sentinel://:mypassword@192.168.1.1:26379/2;sentinel://:mypassword@192.168.1.2:26379/2;sentinel://:mypassword@192.168.1.3:26379/2'
CELERY_RESULT_BACKEND_TRANSPORT_OPTIONS = {"master_name": MASTER_NAME}
然后启动 celery 发现 celery 正常运行则 OK。