营口网站建设开发制作可以自己画设计图的app
营口网站建设开发制作,可以自己画设计图的app,施工企业项目负责人现场带班时间明显少于当月每项扣分,微商城开发公司有哪些比较好首发博客地址 https://blog.zysicyj.top/ 前面我们说过#xff0c;redis采用了读写分离的方式实现高可靠。后面我们说了#xff0c;为了防止主节点压力过大#xff0c;优化成了主-从-从模式 思考一个问题#xff0c;主节点此时挂了怎么办 这里主从模式下涉及到的几个问题redis采用了读写分离的方式实现高可靠。后面我们说了为了防止主节点压力过大优化成了主-从-从模式 思考一个问题主节点此时挂了怎么办 这里主从模式下涉及到的几个问题 主库真的挂了吗 我们应当选择哪个从库作为主库 怎样让其他从库知道新的主库信息呢 中断的数据如何恢复 哨兵机制就完美的解决了以上问题。 什么是哨兵机制 Redis引入哨兵Sentinel机制的主要目的是为了增强其高可用性和自动故障恢复能力。在分布式系统中特别是用作数据存储的数据库系统中保障高可用性是至关重要的以确保系统在面对节点故障等情况时能够继续提供服务。 以下是引入Redis哨兵机制的原因 故障检测和自动故障切换 哨兵允许您配置多个Redis节点并监视它们的运行状况。如果主节点Master出现故障哨兵可以自动检测到并执行故障切换将一个可用的从节点Slave晋升为新的主节点从而保证服务的可用性。 自动配置更新 当Redis节点的拓扑结构发生变化比如添加或移除节点时哨兵能够自动地通知客户端和其他Redis节点进行配置更新从而确保整个集群的正确配置。 监控和报警 哨兵不仅监视节点的健康状态还可以提供有关节点运行状况的信息例如主从复制是否正常、延迟情况等。这可以帮助管理员及时发现问题并采取措施。 无需人工干预的恢复 哨兵允许自动故障切换这意味着当主节点出现问题时系统可以自动将一个从节点提升为新的主节点而无需管理员手动介入从而缩短恢复时间。 Redis引入哨兵机制使得在分布式环境中更容易实现高可用性和故障恢复而无需太多手动操作。哨兵机制可以确保Redis集群在节点故障时继续提供稳定的服务对于那些对于高可用性要求较高的应用场景非常有用。 哨兵机制的基本流程 哨兵其实就是一个运行在特殊模式下的Redis进程其随着主从实例同时运行。 那么哨兵负责哪些活呢主要是以下三点 监控 选主选择主库 通知 哨兵机制的三项任务与目标 监控 Redis哨兵的监控流程涉及多个步骤用于实时监控Redis集群中各个节点的状态并采取必要的措施来确保集群的可用性和稳定性。 节点发现和配置 哨兵通过配置文件指定要监控的主节点和从节点。启动哨兵后它会连接到指定的节点并获取有关其他节点的信息形成一个初始的监控拓扑。 心跳检测 哨兵会定期向监控的节点发送PING命令来检测节点是否存活。这些节点可以是主节点、从节点或其他哨兵节点。如果哨兵在一定时间内没有收到响应它会认为节点不可用。 节点状态变更 当哨兵连续多次无法连接到一个节点时它会将该节点标记为主观下线。当多个哨兵都将节点标记为主观下线时这个节点会被认为是客观下线。 故障判断和选举 当主节点被标记为客观下线时哨兵会执行故障判断。它会从剩余的健康主节点中选举一个作为新的主节点并将该信息广播给其他哨兵和客户端。故障判断的逻辑考虑了多个因素包括优先级、最近一次复制偏移量等。 自动故障切换 如果主节点被标记为客观下线哨兵会通知从节点晋升为新的主节点。同时哨兵会更新其他从节点的配置使其复制新的主节点。这确保了即使主节点发生故障集群仍然可以继续提供服务。 监控从节点 哨兵还会监控从节点的状态包括从节点是否与主节点保持同步以及从节点的复制延迟情况。如果从节点无法同步或者复制延迟过高哨兵会将其标记为不健康。 节点恢复 如果一个节点从客观下线状态恢复哨兵会将其标记为健康并将其重新纳入集群中。从节点恢复后它会重新同步主节点的数据。 配置更新 如果集群的拓扑发生变化例如添加或移除节点哨兵会自动更新配置以便客户端能够正确连接到集群。 事件通知 哨兵通过发布订阅机制向订阅者通常是客户端发送有关集群状态变化的消息。这使得应用程序能够根据实时的集群状态做出相应的决策。 持续监控 哨兵会持续地监控集群中的节点定期执行心跳检测、状态更新和故障判断以确保集群的稳定运行。 主观下线与客观下线 在Redis的哨兵监控机制中有两个关键概念主观下线Subjective Down和客观下线Objective Down。这些概念帮助哨兵判断节点的可用性和故障状态。 主观下线Subjective Down 主观下线是指单个哨兵节点认为一个特定的Redis节点主节点、从节点或其他哨兵不可用。主观下线是一种主观的判断是基于单个哨兵节点的观察结果得出的。当一个哨兵无法连接到某个Redis节点它会将该节点标记为主观下线。多个哨兵节点可能会对同一个节点发出主观下线标记。 客观下线Objective Down 客观下线是指在整个哨兵集合中达成一致认为某个特定的Redis节点不可用。客观下线是一种更客观的判断需要多个哨兵节点共同达成一致。当多个哨兵节点都主观下线同一个Redis节点时这个节点会被认为是客观下线。 举例说明 假设有三个哨兵节点Sentinel A、Sentinel B 和 Sentinel C以及一个主节点 Master 和一个从节点 Slave。如果 Sentinel A 无法连接到 Master 节点它会将 Master 标记为主观下线。同样地如果 Sentinel B 也无法连接到 Master 节点它也会将 Master 标记为主观下线。但这还不足以让 Master 被认为是客观下线。 当 Sentinel A 和 Sentinel B 都主观下线了 Master 节点并且他们相互通信时发现了这个情况他们就会在达成一致意见后将 Master 节点标记为客观下线。这时整个哨兵集合达成一致认为 Master 节点已下线。 客观下线是一个更严格的判断需要多个哨兵节点一致认为某个节点不可用才会触发后续的故障判断和自动故障切换等动作。这种机制确保了在一个哨兵节点认为某节点下线时不会立即触发故障切换以避免误判造成不必要的切换。只有多个哨兵节点一致认为节点下线才会触发后续的故障处理流程。 客观下线的判断 如何选定新主库 在Redis Sentinel模式中当主节点Master发生故障导致下线后哨兵会通过选举过程选择一个新的主节点Master来取代原来的主节点。选定新主库的过程如下 主观下线和客观下线判断 当哨兵节点主观下线单个哨兵认为不可用一个主节点时如果多数哨兵都主观下线了同一个主节点那么这个主节点会被标记为客观下线多数派共识。 选举新主节点 当一个主节点被标记为客观下线后哨兵节点会开始选举一个新的主节点。选举过程如下 哨兵会在所有没有下线的从节点Slaves中选择一个作为新主节点。 哨兵会选择一个延迟最小、复制偏移量最大的从节点作为新主节点。这确保了新主节点是最接近原主节点的从节点。 如果没有合适的从节点哨兵会选择一个具备最高优先级的从节点将其升级为主节点。如果优先级相同那么哨兵会选择一个复制偏移量最大的从节点。 故障转移和切换 一旦新主节点被选定哨兵会发起故障转移操作。旧主节点会变成新主节点的一个从节点。其他从节点会重新配置指向新的主节点。这个过程会保证尽量不丢失数据并且保证整个集群的高可用性。 选定新主库的过程是一个由哨兵节点协同工作的流程确保了在主节点故障的情况下尽可能地选择一个合适的从节点作为新的主节点实现集群的高可用性和数据完整性。 新主库的选择 如何配置哨兵 哨兵配置文件 在Redis 6.x版本中哨兵的配置文件名称默认为redis-sentinel.conf。 配置变化 Redis 6.x版本引入了一些新的哨兵配置选项以适应新的功能和改进。以下是一些常见的配置选项 sentinel monitor mymaster 127.0.0.1 6379 2 # 监控名为 mymaster 的主节点2表示至少需要2个哨兵同意主观下线才会执行故障转移
sentinel down-after-milliseconds mymaster 5000 # 主观下线判定为5秒无响应
sentinel parallel-syncs mymaster 1 # 执行故障转移时同时同步的从节点数量
sentinel failover-timeout mymaster 10000 # 故障转移超时时间为10秒
sentinel auth-pass mymaster mypassword # 主节点的访问密码启动哨兵节点 在Redis 6.x版本中启动哨兵节点的命令为 redis-server /path/to/redis-sentinel.conf --sentinel 查看哨兵状态 使用以下命令查看Redis 6.x版本哨兵节点的状态 redis-cli -p 26379sentinel master mymaster # 查看主节点的信息sentinel slaves mymaster # 查看从节点的信息sentinel sentinels mymaster # 查看其他哨兵节点的信息 哨兵是如何互相发现的 我们查看配置可以看到我们并没有配置从节点的哨兵我们只配置了主节点地址。 那么哨兵之间是如何互相发现通信的呢 在Redis Sentinel哨兵集群中哨兵节点之间通过发布订阅机制来互相发现和通信。这种方式使得哨兵节点能够监控主节点和从节点的状态并进行故障检测和故障转移。 以下是哨兵集群如何通过发布订阅机制互相发现的工作流程 初始连接 在启动时每个哨兵节点会尝试连接到指定的主节点。这些哨兵节点通过配置文件中的sentinel monitor命令指定要监控的主节点信息。 Sentinel命令发布 当一个哨兵节点成功连接到主节点后它会开始定期向主节点发送PING命令以确保主节点处于活跃状态。如果哨兵节点检测到主节点不可用它会将一个switch-master命令发布到频道中通知其他哨兵节点。 发布订阅机制 Redis的发布订阅机制允许一个节点发布者向一个或多个节点订阅者广播消息。在哨兵集群中每个哨兵节点都订阅了一个名为__sentinel__:hello的频道用于接收其他哨兵节点发送的信息。 发现其他哨兵节点 当一个哨兵节点成功连接到主节点后它会向__sentinel__:hello频道发布一个Hello消息其中包含它自己的信息如IP地址和端口号。其他哨兵节点通过订阅这个频道可以获取所有其他哨兵节点的信息。 收集哨兵信息 每个哨兵节点通过订阅__sentinel__:hello频道收集到其他哨兵节点的信息。这使得每个哨兵节点都知道了集群中其他哨兵节点的存在。 故障检测和转移 当一个哨兵节点检测到主节点不可用时它会通过发布switch-master命令来通知其他哨兵节点。这个命令包含了新的主节点信息以及在执行故障转移时需要的其他信息。其他哨兵节点收到这个命令后会进行判断并可能发起故障转移。 通过以上机制哨兵节点可以相互发现和通信共同监控主节点和从节点的状态并在主节点下线时协同执行故障转移操作。这种发布订阅机制确保了哨兵集群中节点之间的实时信息传递和协作。 由哪个哨兵执行主从切换 客观下线具体判断流程 故障检测 哨兵节点定期向集群中的所有主节点和从节点发送PING命令来检测节点的可用性。如果一个哨兵节点连续一定次数没有收到节点的回复就会将该节点标记为可能进入客观下线状态。 Quorum判断 在判断一个节点是否客观下线时需要考虑Quorum的概念。Quorum是指一个最小的投票数当达到或超过这个投票数时哨兵认为节点可能进入客观下线状态。Quorum的值通常设置为哨兵节点数量的一半加一。 投票过程 当哨兵节点开始怀疑某个节点可能客观下线时它会向其他哨兵节点发送一个SENTINEL is-master-down-by-addr命令询问其他哨兵节点是否也认为该节点客观下线。其他哨兵节点会对此做出回应根据回应的数量来判断是否达到Quorum。 达到Quorum 如果收到的回应数量达到或超过Quorum那么哨兵节点就会认为该节点进入客观下线状态。这表示集群中有足够多的哨兵都认为该节点可能下线进而触发后续的主从切换流程。 执行后续操作 一旦一个节点被认为客观下线哨兵节点将开始执行故障转移操作选择新的主节点并开始同步数据。这将最终导致一个新的主节点被选出从而实现高可用性。 选举Leader流程 Redis Sentinel哨兵是用于监控和管理Redis主从复制以及自动故障切换的工具。当主节点失效时哨兵会协调选择一个从节点作为新的主节点这涉及到选举Leader的过程。详细流程如下 监控主节点 哨兵持续监控Redis主节点的状态包括主节点是否在线主从复制是否正常以及哨兵和其他节点的通信情况。 检测主节点失效 当哨兵检测到主节点失效例如无法响应PING命令它会将主节点标记为“主观下线”。 广播主观下线状态 一旦主观下线状态被确认哨兵会广播该信息给其他哨兵和节点告知主节点已经“主观下线”。 投票 当其他哨兵收到关于主观下线状态的广播时它们会进行投票来决定是否需要进行领导者选举。 选举Leader 如果多个哨兵都认为主节点失效它们将进入领导者选举过程。选举过程使用了Raft算法的变体。 提议投票 在选举过程中哨兵会提议自己作为领导者然后请求其他哨兵投票支持。 投票表决 哨兵在收到提议后会表决是否支持该提议。通常哨兵会投票给具有最高配置版本号的提议者。 Quorum判断 在选举过程中哨兵需要收集足够数量的投票达到Quorum大多数的支持才能选举成功。 选出新领导者 如果某个哨兵获得足够多的投票超过了Quorum那么它将被选为新的领导者。 通知其他节点 新选出的Leader会向其他哨兵和节点广播其成为领导者的消息确保集群中的所有节点都知道领导者的变更。 故障切换 一旦新的Leader选举完成哨兵会协调进行故障切换将一个从节点提升为新的主节点使整个集群继续正常运行。 恢复正常状态 一旦故障切换完成新的主节点将开始处理客户端请求集群会恢复到正常运行状态。 需要注意的是Redis Sentinel的选举Leader过程受到Paxos算法和Raft算法等分布式一致性算法的影响以保证在主节点失效时能够选择合适的节点作为新的主节点从而保持数据的一致性和高可用性。 TIP 如果哨兵集群只有 2 个实例此时一个哨兵要想成为 Leader必须获得 2 票而不是 1 票。所以如果有个哨兵挂掉了那么此时的集群是无法进行主从库切换的。因此通常我们至少会配置 3 个哨兵实例。 要保证所有哨兵实例的配置是一致的尤其是主观下线的判断值 down-after-milliseconds。 本文由 mdnice 多平台发布
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/85139.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!