Redis的哨兵模式
1、什么是哨兵模式?
能够自动监控master是否发生故障,如果故障了会根据投票数从slave中挑选一个作为master,其他的slave会自动转向同步新的master,实现故障自动转义。
2、原理
sentinel会按照指定的频率给master发送ping请求,看看master是否还活着,若master在指定时间内未正常响应sentinel发送的ping请求,sentinel则认为master挂掉了,但是这种情况存在误判的可能,比如:可能master并没有挂,只是sentinel和master之间的网络不通导致,导致ping失败。
为了避免误判,通常会启动多个sentinel,一般是奇数个,比如3个,那么可以指定当有多个sentinel都觉得master挂掉了,此时才断定master真的挂掉了,通常这个值设置为sentinel的一半,比如sentinel的数量是3个,那么这个量就可以设置为2个。
选举过程:
1、第一个发现该master挂了的哨兵,会向每个哨兵发送命令,让对方选举自己成为领头哨兵
2、其他哨兵如何没有选举过他人,就会将这一票投给第一个发现该master挂了的哨兵
3、第一个发现该master挂了的哨兵如果发送有超过一般的哨兵投给自己,并且其数量也超过了设定的quoram参数,那么该哨兵就成了领头哨兵
4、如果多个哨兵同时参与这个选举,那么就会重复该过程,知道选出一个领头哨兵
5、选出领头哨兵后,就开始了故障修复,会从选出一个从数据库作为新的master
3、redis哨兵模式主从切换过程中还能正常提供服务吗
Redis Sentinel 模式下的主从切换过程可以保证服务的高可用性。在 Sentinel 模式下,Redis 集群会配置多个 Sentinel 实例,它们会监控主服务器和从服务器,并在主服务器出现故障时自动进行故障转移。
在主从切换过程中,Sentinel 会首先选举出一个新的主服务器,并将其他从服务器指向新的主服务器。这个过程通常是非常快的,一般在几秒钟内就可以完成。在此期间,客户端仍然可以向旧的主服务器发送请求,而旧的主服务器会在新的主服务器接管之前处理这些请求。
一旦新的主服务器接管了工作,它就会开始接收客户端的写请求,并将这些写请求同步到其他的从服务器。在这个过程中,如果有新的从服务器加入,它也会被同步到新的主服务器。
因此,在主从切换过程中,Redis 集群仍然可以正常提供服务,只是在切换的过程中可能会有一段时间无法处理写请求。但是,由于 Redis 的数据持久化机制,即使在主从切换的过程中有部分数据丢失,也只是暂时的,不会影响数据的完整性和一致性。
4、哨兵模式主从切换数据丢失问题
哨兵模式是一种高可用性(HA)的解决方案,通常用于构建分布式系统。在这种模式下,有一个主节点和多个从节点。主节点负责处理所有的写请求,而从节点则负责复制主节点的数据。当主节点发生故障时,哨兵模式会自动选举出一个新的主节点,从而保证系统的高可用性。
然而,哨兵模式也存在一个问题,那就是主从切换过程中可能会出现数据丢失。这是因为在主从切换的过程中,新的主节点需要从旧的主节点上同步数据,这个过程可能会导致一部分数据还没有被同步到新的主节点,这就可能导致数据丢失。
为了解决这个问题,我们可以采取一些措施来避免或者减少数据丢失。例如,我们可以配置哨兵模式,使得新选举出来的主节点在完成同步之前,不接受任何写请求。这样可以确保新的主节点不会接收到未同步的数据,从而避免了数据丢失。
此外,我们还可以配置哨兵模式,使得新选举出来的主节点在完成同步之后,再开始接受写请求。这样可以确保新的主节点已经完全同步了数据,从而避免了数据丢失。
总的来说,哨兵模式主从切换数据丢失的问题是可以通过合理的配置和管理来避免或者减少的。