哨兵(sentinel)是一个分布式系统,用于对主从结构中的每台服务器进行监控,当出现故障的时候通过投票机制去选举出一个新的master并将所有的slave连到新的master.
主要的作用就是:监控、通知(提醒)、自动故障转移。
需要注意的是:哨兵也是一台redis服务器,只是不去提供数据服务。通常哨兵配置数量为2n+1
使用Redis集群的时候,最容易出现的问题就是master宕机,那么一但master宕机谁去完成他的工作,不然没有写服务只有读服务,那肯定是不可以的。所以我们需要找到一个新的slave并且通知所有的slave有新的master完成了,然后启动这个master并且去做一全量复制或者是部分复制,这一系列的操作需要"Redis哨兵"去完成。
我们先去整理一下做这些操作可能会出现的问题有那些:
1.谁来确认master是宕机了(master闪连了一下我们就立刻找到新的master吗显然是不行的)宕机的标准
2.找一个新的master(谁来去找?怎么个找法)
3.找到了新的master之后修改完配置了,原来的master恢复正常了怎么办?
Linux 系统下在redis根目录sentine1.conf 进行配置(我们来看一下文件内有那些内容)
port 26379
#哨兵的端口号
dir /tmp
#工作信息存储目录
sentinel monitor mymaster 127.0.0.1 6379 2
#mymaster主的自定义名称 主节点的ip 端口号 这个2是多少个哨兵认为他宕机才会选举(通常是哨兵数量一半+1个)
sentinel down-after-milliseconds mymaster 30000
#30000(毫秒) master30秒未连接认定为宕机
sentinel parallel-syncs mymaster 1
# 1 配置新的master上了之后有几条线在做数据同步
sentinel failover-timeout mymaster 180000
#180000(毫秒) 配置数据同步在180秒内完成才算同步有效
启动顺序 master-slave1-slave2-sentinel1-sentinel2-sentinel3
启动后可以关掉master进行测试
哨兵的工作原理:
监控阶段同步各个节点的状态信息(同步master、slave、sentinel节点信息)
通知阶段各个sentinel节点检测完状态会通知全部的哨兵节点目前正常(类似一个哨兵的朋友圈保证信息对等)
故障转移阶段如果通过同步检测如果半数哨兵觉得master宕机就说明master真的挂了根据在线的、响应快的与原master断开时间短、优先级原则(优先级、offset、runid)的节点成为新的master。(先将slave断开原master然后成功启动新master)
以上属于个人理解如果有错误欢迎指点