上一篇文章的内容是redis的主从复制,当一个主结点挂后,从节点可以通过执行命令 replicaof no one 主节点的切换,这里我们主要是实现自动切换,采用哨兵机制(Redis Sentinel)
Redis Sentinel是一个分布式系统,Sentinel运行在有许多Sentinel进程互相合作的环境下,它本身就是这样被设计的。有许多Sentinel进程互相合作的优点如下:
sentinel 的配置文件位置:在redis的源码目录
port 26379 //端口 sentinel monitor mymaster 127.0.0.1 6381 2 //监控一个叫做mymaster的主节点,地址是 127.0.0.1 端口号是6379,并且有2个仲裁机器(有两个sentinel判定redis挂了,redis就会认为是挂了) sentinel down-after-milliseconds mymaster 60000 // 这个时间内一旦我们不能收到回复,主节点将发现失败。
1.修改端口
2. 指定主节点
# 启动redis的命令 redis-server ./6379.conf start|start|stop #启动命令 redis-sentinel ./26379 ps -fe | grep sentinel kill -9 进程
启动6379(主节点)
启动6380
启动6381
启动sentinel集群
启动26379
启动26380
启动26381
从配置文件中可看出: 每个sentinel几点之间是保持通信的,与主节点通过发布订阅的模式进行通信,主节点上有从节点和sentinl的信息
在主节点上执行请阅命令
SENTINEL masters 展示监控的主节点和它们的状态列表
SENTINEL master 展示指定的主节点的信息
SENTINEL salves 展示这个主节点的从节点,以及它们的状态
SENTINEL sentinels 展示这个主节点的sentinel实例,以及它们的状态
SENTINEL get-master-addr-by-name 返回主节点的IP和端口号。如果这个主节点的一次故障转移正在进行,就返回提升的从节点的IP和端口号
n/2+1的sentinel几点在60秒内没有收到主节点的消息,则判定主节点挂了,然后再从节点中选举一个从节点升级为主节点,然后进行数据同步
我们停止6379redia实例, 观察sentinel的输出日志
查询目前的主节点