redis简单的主从复制在生产的环境下可能是不行的,因为从服务器只能读不能写,如果主服务器挂掉,那么整个缓存系统不能写入了。redis自带了sentinel(哨兵)机制可以实现高可用。
redis-sentinel集群
哨兵机制的主要功能
- 不断监控主服务器和从服务器的是否正常运行;
- 出现问题是可以自动报告;
- 当一个节点出现问题可以进行故障转移,主服务器故障可以通过投票机制选出新的主服务器;
- 自动发现主服务器和从服务器;
redis-sentinel基本介绍
- redis-sentinel是一个单独的进程,可以通过配置文件sentinel.conf单独启动,也可以在启动redis-server是指定--sentinel启动;
配置redis-sentinel
- redis的源码中有一份sentinel.conf文件可以用来配置redis-sentinel。
- 使用哨兵机制集群redis实例如果需要配置密码,那么主从服务器的密码需要保持一致,否则故障切换可能出错。
# redis.conf
masterauth ‘123‘ # 主服务器密码
requirepass ‘123‘ # 本身的密码
# sentinel.conf
port 26379 # 端口
# 格式为 sentinel <选项的名字> <服务器的名字> <选项的值>
# 配置sentinel去监听名为mymaster的服务器,ip加端口,判断失效需要2个sentinel才能进行故障迁移;
sentinel monitor mymaster 127.0.0.1 6379 2
# 如果3000ms没有反应就认为mymaster挂掉
sentinel down-after-milliseconds mymaster 3000
# 设置故障转移时,同时有多少个从服务器对新主服务进行同步,越少需要的时间越长,但越多,同步时从服务器不能工作;
sentinel parallel-syncs mymaster 1
# failover超时时间,即触发failover切换操作后,如果10000ms还没有任何的failover故障切换即认为失败
sentinel failover-timeout mymaster 10000
# 设置前后台运行yes表示后台运行
daemonize yes
#指定工作目录
dir "/home/redis/sentinel-work"
# 默认情况下sentinel只能访问本地主机,设置为no后禁用保护模式
protected-mode no
# 指定日志文件
logfile "/home/redis/sentinellog/sentinel.log"
#redis主节点密码
sentinel auth-pass mymaster 123456
- 注意
- 没有的文件目录需要主动创建,否则启动失败;
- 可以在不同的服务器上启动多个sentinel,它们的配置相同,都去监视主服务器的redis。
启动redis-sentinel
redis-server /path/sentinel.conf --sentinel
# 可以使用supervisor对redis-sentinel进行管理,将sentinel设置为前台运行
使用redis-cli查看redis-sentinel的状态
# 登录
redis-cli -h 192.168.1.20 -p 26379
# 命令参考:http://www.redis.cn/topics/sentinel.html
python连接redis集群
- redis使用sentinel模式后,原来的python连接redis方案由于主从服务器可能发生切换变得不可用了。
import redis
r2 = redis.StrictRedis() # 如果该实例死机将变得不可用
- 使用Sentinel对象
import redis
from redis.sentinel import Sentinel
# 创建一个连接对象,连接所有的哨兵,其会自动发现redis实例
sentinel = Sentinel([(‘192.168.1.20‘, 26379)], socket_timeout=0.5)
# 获取主服务器进行写入
master = sentinel.master_for(‘mymaster‘, socket_timeout=0.5, db=1)
w_ret = master.set(‘foo‘, ‘bar‘)
# 获取从服务器进行读取
slave = sentinel.slave_for(‘mymaster‘, socket_timeout=0.5, db=1)
r_ret = slave.get(‘foo‘)
# master和slave的用法和前面的redis对象一样了,不过slave只能读不能写
原文地址:https://www.cnblogs.com/cwp-bg/p/9264169.html
时间: 2024-10-10 12:48:16