Python3 Django 之 Redis缓存使用哨兵模式
Redis的哨兵(sentinel) 系统用于管理多个 Redis 服务器,该系统执行以下三个任务:
监控(Monitoring):哨兵(sentinel) 会不断地检查你的Master和Slave是否运作正常。
提醒(Notification):当被监控的某个 Redis出现问题时, 哨兵(sentinel) 可以通过 API 向管理员或者其他应用程序发送通知。
自动故障迁移(Automatic failover):当一个Master不能正常工作时,哨兵(sentinel) 会开始一次自动故障迁移操作,它会将失效Master的其中一个Slave升级为新的Master, 并让失效Master的其他Slave改为复制新的Master; 当客户端试图连接失效的Master时,集群也会向客户端返回新Master的地址,使得集群可以使用Master代替失效Master。
哨兵(sentinel) 是一个分布式系统,你可以在一个架构中运行多个哨兵(sentinel) 进程,这些进程使用流言协议(gossipprotocols)来接收关于Master是否下线的信息,并使用投票协议(agreement protocols)来决定是否执行自动故障迁移,以及选择哪个Slave作为新的Master。
每个哨兵(sentinel) 会向其它哨兵(sentinel)、master、slave定时发送消息,以确认对方是否活着,如果发现对方在指定时间(可配置)内未回应,则暂时认为对方已挂(所谓的“主观认为宕机” Subjective Down,简称sdown)。
若哨兵集群中的多数sentinel报告某一master没响应,系统才认为该master彻底死亡(即:客观上的真正down机,Objective Down,简称odown),通过一定的vote算法从剩下的slave节点中选一台提升为Master。
1、哨兵结构示例图:
2、Master切换示例图:
Django环境连接redis sentinel模式
依赖的版本情况:
pip3 install django==2.2.27 #我在django3以上版本测试未成功
pip3 install django-sentinel==0.1.0
master name 为 mymaster
redis 哨兵的 ip 和 port 分别是:
192.168.1.1:26379
192.168.1.2:26380
192.168.1.3:26381
密码为:admin
Django中使用缓存配置
Django 使用redis缓存用到的依赖是 django-sentinel,这里给出 settings.py 配置示例:
# settings.py
# django-sentinel==0.1.0
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": "mymaster/192.168.1.1:26379,192.168.1.2:26380,192.168.1.3:26381/0",
"OPTIONS": {
"PASSWORD": "admin",
"CLIENT_CLASS": "django_sentinel.SentinelClient",
"CONNECTION_POOL_KWARGS": {
"max_connections": 100
}
}
}
}
SESSION_ENGINE = 'django.contrib.sessions.backends.cache'