【Redis】-- 哨兵
文章目录
- 1. 哨兵
- 1.1 基本概念
- 1.2 选举原理
1. 哨兵
1.1 基本概念
Redis机制时通过独立的进程来实现的,和redis-server是不同的进程。
哨兵节点不负责存储数据,只是对其他的redis服务节点起到监控的作用。
如果是从节点挂了,没有关系~
1.2 选举原理
-
主观下线
哨兵节点通过心跳包,判断Redis服务器是否正在正常工作,如果心跳包没有如期而至,就认为该Redis节点主观下线了。此时一个哨兵节点收不到Redis服务器的心跳包,有可能是网络波动的原因,并不能断定这个Redis服务节点挂了。
-
客观下线
多个哨兵进行投票,一个哨兵节点一票,多个Redis都认为这个Redis服务节点挂了(达到了法定票数)就认为这个Redis服务节点挂了。 -
然后多个哨兵节点选出一个leader节点。
leader选举:
- 假设现在有三个哨兵1、2、3.。
- 假设哨兵1最先发现主节点是客观下线之后,立即给自己投了一票,并且向2、3发送了投票请求。
- 哨兵2、3比1慢了半拍,当他们还没有投出自己手中的票时,收到了拉票请求就会立即投出去。
- 如果哨兵节点收到了多个拉票请求,就会投给最先到达的。
看谁反应快,看谁网络时延小。
-
由这个leader节点负责选出一个从节点作为新的主节点。
选举新的master的标准:
- 比较优先级:每个Redis数据节点,都会在配置文件中有优先级的设置(slave-priority),优先级高的从节点,就会胜出。
- 比较offset:offset数值越大,说明从节点的数据和主节点越接近。
- 比较 runid:每个redis节点启动的时候随机生成一串数字(比较大小,大小全凭缘分)。
-
新的主节点指定好之后,leader就会控制整个节点,执行slave no one,成为master;再控制其他节点,执行slave of,让这些其他节点,作为新的主节点的从节点。
-
哨兵节点会自动的通知客户端程序,告知新的主节点是谁,并且后续客户端再进行写操作,就会针对新的主节点来进行操作。
注意事项:
- 哨兵节点不能只有一个,否则哨兵节点挂了会影响系统的可用性。
- 哨兵节点最好是奇数个(大部分情况3个就够了),方便选取leader,得票容易超出半数。
- 哨兵节点不负责存储数据。
- 哨兵+主从复制提高了可用性,不能解决数据极端情况下丢失的问题。