标签:monitor 表示 pass prot pre 相同 redis集群 ret ted
redis简单的主从复制在生产的环境下可能是不行的,因为从服务器只能读不能写,如果主服务器挂掉,那么整个缓存系统不能写入了。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-server /path/sentinel.conf --sentinel
# 可以使用supervisor对redis-sentinel进行管理,将sentinel设置为前台运行
# 登录
redis-cli -h 192.168.1.20 -p 26379
# 命令参考:http://www.redis.cn/topics/sentinel.html
import redis
r2 = redis.StrictRedis() # 如果该实例死机将变得不可用
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只能读不能写
redis基础之redis-sentinel(哨兵集群)(六)
标签:monitor 表示 pass prot pre 相同 redis集群 ret ted
原文地址:https://www.cnblogs.com/cwp-bg/p/9264169.html