在Redis主从系统中使用哨兵

一、什么是哨兵

        Redis的哨兵(Sentinel)是Redis分布式系统中的一种特殊角色,用于监控和管理Redis主从复制架构中的主节点(master)和从节点(slave)。

        哨兵的主要功能是确保Redis系统的高可用性。它通过持续监控Redis节点的状态,并在发现节点故障或下线时自动执行故障转移操作,将从节点提升为新的主节点,以确保服务的连续性。当原始的主节点恢复正常时,哨兵还可以将其重新加入到集群中作为从节点。

哨兵的工作模式如下:

  1. 监控:每个哨兵定期向Redis节点发送心跳检查,以确保节点的健康状态。
  2. 故障检测:如果一个哨兵在一段时间内无法与主节点通信,它将判断主节点宕机,并开始选举新的主节点。
  3. 故障转移:哨兵会选举一个从节点作为新的主节点,并通过发送命令通知其他节点更新配置。
  4. 通知:哨兵会通知客户端Redis节点的变化,使客户端能够连接到新的主节点。
  5. 自动故障恢复:当原主节点恢复时,哨兵会将其重新加入集群作为从节点,保持主从复制的正常工作。

        通过使用哨兵,Redis可以在主节点故障时自动实现故障转移,提供高可用性和容错能力,同时减少了手动干预的需求。哨兵可以监控多个Redis节点,并支持多个哨兵组成的集群,以提供更高的可靠性和扩展性。

二、使用哨兵

(1)搭建主从复制服务

启动一个一主二从的redis系统,启动参考:Linux下使用命令行和配置文件两种方式实现主从复制-CSDN博客

主数据库启动在6381端口,从数据库启动在6382 6383端口。

查看主从复制配置信息:

 (2)配置哨兵

建立一个配置文件,如 sentinel.conf 内容如下:

#zy-master表示要监控的主数据库名字,可以自定义
sentinel monitor zy-master 127.0.0.1 6381 1
port 26380

(3)启动哨兵

redis-sentinel sentinel.conf

启动后,哨兵会输出如下内容:

 (4)验证哨兵的作用(停止6381节点)

杀死主库的服务,即关闭运行在6381端口的实例

等待指定事件后(可以配置,默认30秒),哨兵会输出如下内容:

 

 到 6383 的实例中查看,可以看到已经成为了主节点:

 (5)重新启动6381节点

 再次查看6383的主从复制信息:

 三、原理

1.下线检测

哨兵和主数据库的连接建立完成后,哨兵会定时执行下面3个操作:

  1. 心跳检查(Heartbeat Checks):哨兵会定期向主数据库发送心跳检查,以确保主数据库的健康状态。这样可以及时发现主数据库是否仍然正常工作。

  2. 主观下线检测(Subjective Down Detection):如果哨兵在一定时间内无法与主数据库进行通信,它会认为主数据库发生了故障,并将其标记为主观下线(Subjectively Down)状态。哨兵会将这一信息传播给其他哨兵和相关节点。

  3. 客观下线检测(Objective Down Detection):当多个哨兵都将主数据库标记为主观下线状态后,它们将进行投票并达成共识,确认主数据库的客观下线(Objectively Down)状态。这时哨兵会执行故障转移操作,选择一个从数据库提升为新的主数据库。

sentinel monitor zy-master 127.0.0.1 6381 1

 这里的最后一个参数 1 就是最低通过票数

 如果配置成 2 ,就表示至少要有两个Sentinel节点认为该主数据库主观下线时,当前哨兵节点才会认为该主数据库客观下线。需要进行故障恢复。但是故障恢复需要由一个领头的哨兵来完成,这样可以保证同一时间只有一个哨兵节点来进行故障恢复。

2. 哨兵的部署

        哨兵以独立进程的方式对一个主从系统进行监控,监控的效果好坏取决于哨兵的视角是否具有代表性,如果一个主从系统配置的哨兵较少,哨兵对整个系统的判断的可靠性就会降低。极端情况下,当只有一个哨兵时,哨兵本身就可能会发生单点故障。整体来讲,相对稳妥的哨兵部署方案是使得哨兵的视角尽可能地与每一个节点的视角一致,即:

(1)为每个节点(无论是主库还是从库)都部署一个哨兵

(2)使每个哨兵与其对应的节点的网络环境相同或相近。

同时设置quorum(最低通过票数)的值为 N/2 + 1 (N为哨兵数量),这样使得只有大部分哨兵节点同意后才会进行故障恢复。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/29187.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

语言模型的自洽性思维链推理技术

论文标题:Self-Consistency Improves Chain of Thought Reasoning in Language Models 论文链接:https://arxiv.org/abs/2203.11171 论文来源:ICLR 2023 一、概述 尽管语言模型在一系列NLP任务中展现出了显著的成功,但它们在推理能…

听GPT 讲K8s源代码--pkg(四)

/pkg/controlplane、/pkg/credentialprovider、/pkg/kubeapiserver是Kubernetes中的三个核心包,它们分别实现了不同的功能。 /pkg/controlplane包 /pkg/controlplane是Kubernetes的一个包,它包含了控制平面组件的实现,例如API Server、Contro…

Flask_自定义flask的cmd命令

创建自定义命令 from flask import Flaskapp Flask(__name__)app.cli.command() def hello():"""命令说明写这里"""print("hello python")if __name__ __main__:app.run() 执行flask --help 可以在命令查看定义的命令 注意事项&a…

请问如何用oracle触发器实现不允许新增/删除表/增加/减少/修改字段类型

请问如何用oracle触发器实现不允许新增/删除表/增加/减少/修改字段类型 给本帖投票 56211打赏收藏 分享 转发到动态举报 写回复 性能测试中发现oracle11g数据库每天22点,oralce进程CPU占用率突增>> 11 条回复 切换为时间正序 请发表友善的回复… 发表回复 microsof…

C++ 第三讲

1 >手动封装一个顺序栈类(数据元素为整形),要求私有成员属性:堆区空间的指针,用于存放数据,和一个指向栈顶元素的变量 main.cpp #include "zuoye.h"int main() {//实例化对象My_stack Stck;My_stack &st Stck;//入栈Stck…

数字图像学笔记 —— 19.肤色检测

文章目录 什么是肤色检测需要使用OpenCV函数颜色空间转换颜色范围位运算 什么是肤色检测 在没有AI之前,肤色检测是计算机视觉的一项常见任务。其根本思路是划定一个颜色区域,只要属于该颜色区域的像素就认为属于肤色。但是这种方法的精确度不高&#xf…

ubuntu中下载、构建、使用raylib

目录 先决条件 [1]下载raylib方式一方式二 构建 [1]使用终端中使用Clion中使用 先决条件 [1] ubuntu系统上需要先安装GCC, make(或者cmake)和git (下载raylib) 执行下面的命令可以安装GCC,make,cmake,git sudo apt install build-essential git #build-essential是一套工具集…

leetcode 445. Add Two Numbers II(两数相加)

用链表代表2个数字,这2个数字相加的和用链表返回。 最高位在链表的head. 思路: 1.链表逆序 数字相加是从低位到高位的,然而链表中的数字是从高位指向低位。 所以涉及到链表的逆序。 逆序之后只需从head到tail把两个链表的数字相加&#x…

Windows安装激活注意事项

选择语言、版本(Windows 10指的是专业版本)和体系结构(32位/64位),这里自行根据情况选择(如果机器预装的是Windows 10家庭中文版则选择家庭中文版,如果预装的是专业版则选择Windows 10。这样原先…

使用IDEA构建jar然后转执行程序exe的爬坑

https://download.csdn.net/download/leoysq/87939492 构建jar

划片机的作用将晶圆分割成独立的芯片

划片机是将晶圆分割成独立芯片的关键设备之一。在半导体制造过程中,晶圆划片机用于将整个晶圆切割成单个的芯片,这个过程被称为“晶圆分割”或“晶圆切割”。 晶圆划片机通常采用精密的机械传动系统、高精度的切割刀具和先进的控制系统,以确保…

018 - STM32学习笔记 - SPI读写FLASH(三)- 写入字符串、小数与整数

018 - STM32学习笔记 - SPI访问Flash(三)- 写入字符串、小数与整数 上节对Flash的跨页写入数据进行了完善,但是数据写入都是以Byte数组的方式进行写入,这节分别进行字符串的写入和小数整数的写入,本节内容对SPI的函数…