redis哨兵
作用: 看护redis实例进程,进行自动故障转移. 保证高可用.
功能:
- Monitoring: 监控. 使用心跳技术, 定时询问. 使用另外的端口跟哨兵通讯.
- Notification: 通知.
- Automatic failover: 自动故障转移.
- Configuration provider: 提供配置.
解析: redis哨兵其实就是一个应用程序. redis-sentinel
配置(跟redis配置基本一样):
bind 127.0.0.1 # 哨兵启动绑定的Ip
port 26380 # 哨兵监听的端口
daemonize yes # 是否以守护进程的方式启动
logfile /var/log/redis-sentinel.log
#mymaster: sentinel监控的redis主从名称
#127.0.0.1 6380 主从服务器中任意一台机器地址
#2: 将这个主服务器判断为失效至少需要2个哨兵同意
sentinel monitor mymaster 127.0.0.1 6380 2
#down-after-milliseconds: 认为服务器已经断线所需的毫秒数。
sentinel down-after-milliseconds mymaster 30000
sentinel parallel-syncs mymaster 1
#failover-timeout: 故障转移的缓冲时间
sentinel failover-timeout mymaster 180000
启动: redis-sentinel sentinel.conf
注意:
1.至少要开启三个哨兵.
2.最好运行在不同的机器.
3.多于指定数量的哨兵认为故障, 才发生故障转移.
使用哨兵操作redis
配置哨兵列表
REDIS_SENTINELS = [
(‘127.0.0.1’, ‘26380’),
(‘127.0.0.1’, ‘26381’),
(‘127.0.0.1’, ‘26382’),
]
REDIS_SENTINEL_SERVICE_NAME = ‘mymaster’
使用哨兵返回redis服务器对象
from redis.sentinel import Sentinel
- 创建哨兵对象
_sentinel = Sentinel(REDIS_SENTINELS) - 使用哨兵对象返回master redis服务对象
redis_master = _sentinel.master_for(REDIS_SENTINEL_SERVICE_NAME) - 使用哨兵对象返回slave redis服务对象
redis_slave = _sentinel.slave_for(REDIS_SENTINEL_SERVICE_NAME)
使用redis服务器对象操作redis
redis_master.set(‘a’, 100)
print(redis_slave.get(‘a’))
.redis分布式集群
1.官方提供的分布式集群方案.
2.跟redis主从不同, 分布式集群中的每台redis只保存部分数据.
3.集群方案中已经有哨兵机制, 不需要我们自己配置.
注意:
1.主redis至少要三台以上. 一般开启6个redis实例
2.k-v存储在哪台redis, 由集群决定.
3.不支持事务
4.不支持多键操作,如mset
连接集群客户端命令:
redis-cli -c -p
集群对象操作redis
配置集群列表
REDIS_CLUSTER = [
{‘host’: ‘127.0.0.1’, ‘port’: ‘7000’},
{‘host’: ‘127.0.0.1’, ‘port’: ‘7001’},
{‘host’: ‘127.0.0.1’, ‘port’: ‘7002’},
]
创建集群对象
from rediscluster import StrictRedisCluster
redis_cluster = StrictRedisCluster(startup_nodes=REDIS_CLUSTER)
使用集群对象操作redis数据库
- 可以将redis_cluster就当作普通的redis客户端使用
redis_cluster.set(‘a’, 100)