当前位置: 首页 > news >正文

Redis高可用之Sentinel哨兵模式

一、背景与简介

        Redis关于高可用与分布式有三个与之相关的运维部署模式。分别是主从复制master-slave模式、哨兵Sentinel模式以及集群Cluster模式。

        这三者都有各自的优缺点以及所应对的场景、对应的业务使用量与公司体量。

 1、主从master-slave模式

   【介绍】

            这种模式可以采用一主一从、一主多从、以及树形结构的嵌套复制结构都是支持的。

   【优点】

            1、配置以及运维相对简单,可以支持读写分离,master节点负责写操作、slave负责进行读操作,同时slave作为master节点数据的一个备份,避免由于master节点挂掉,整个服务不可用。

    【缺点】

           1、master节点发生故障时需要人工进行介入,增加运维成本。通知客户端修改master的IP地址与端口,让slave节点顶上来作为主节点。那么之前的slave节点变成了主节点,等之前的old-master节点恢复后,反过来作为之前slave节点的从节点。 即使你可以把这个故障切主的过程进行自动脚本化,但是怎么确保多个slave中选择哪个slave成为新的主节点以及各种异常情况都能hold得住?  自己写的这个脚本就会变得很复杂。

          2、切主暂且不说自动化脚本还能解决,但是你让业务方切换IP+端口这个事情万万是不能被接受的用到这个Redis的地方太多了,你想改也改不过来,改了要发新配置代码,还有就是怕漏改。即使你使用Nacos等配置中心,也是一件让人头疼的事情

        基于以上的几点考虑,官方推出了哨兵Sentinel模式,将这个过程自动化。切换流程不需要我们自己编写脚本,哨兵模式会可靠地帮我们完成这个故障切换过程,同时客户端也无须改变任何IP端口,无感进行故障切换。

     【适应的公司体量】      小公司、创业公司或者业务量不是特别大的公司

2、哨兵Sentinel模式

    【介绍 】

             哨兵Sentinel模式其实是将master-slave主从模式故障切换从人工介入换成了自动化切换的过程,哨兵节点会高效、快速、可靠的从剩余的slave节点中选择出1个合适的节点作为新的master主节点,之后将剩余的slave节点切主到这个新的master节点。同时,客户端要获取master节点信息要通过连接sentinel来获取master的IP和端口,这样每次切主的过程,程序会自动完成,无感迁移。

     【优点】

            1、官方原生支持高可用方案,比第一种master-slave手动写切换脚本以及通知业务方更换IP+端口更加方便、可靠、稳定

     【缺点】

            1、虽然哨兵解决了高可用问题,但是无法解决高容量、高并发的需求。 因为一个哨兵始终只是维护master-slave的高可用而已,不能解决高并发、高容量问题。 这个后续的Cluster集群模式可以来解决。

             2、切主的过程,可能会存在客户端短时间内连接不上master的情况,这个时间取决于故障迁移恢复时间。因为master节点挂了,哨兵在做故障迁移没结束之前,哨兵存储的master的信息还是挂掉的IP+端口,自然客户端继续连接挂掉的主机IP+端口就无法进行正常数据读写。 

    【适应的公司体量】    稍微有点业务体量与规模的公司

3、集群Cluster模式

   【介绍】

            集群Cluster模式支持分布式部署,采用虚拟槽的设计思路,将存储的key进行CRC16($key)%16383的方式对数据进行分片存储和读取。 一共存在0-16383的slot虚拟槽位, 一个虚拟槽位slot理论上可以支持一个master+N个slave的主从架构模式。 那就是理论上可以支持16383个master+slave的主从架构模式, 这样的量就已经很牛逼了。  

          同时集群模式本身就支持高可用,一旦slot节点的master-slave主从结构的主节点挂了,那么会从它所属的slot的master-slave主从结构中进行重新切主操作。

          不过官方推荐整个Redis集群不超过1000个节点。 想想一下,就算是1000个,如果按照一台服务器16G内存的情况计算,如果一半的内存进行存储也就是8G,整个集群的容量高达80TB。 这种基本上除了一线互联网大厂能玩得转,我看其它公司也没这个运维能力以及需求量了。

    【优点】

           1、支持高容量、高并发访问量的需求,官方原生支持、可靠稳定

           2、同时支持高可用模式,自动切主,实现故障迁移。  虽然故障迁移期间,客户端也可能会出现无法正常访问Redis集群的情况,但是只会影响落到这个slot的这些key, 其它的key还是能正常访问的,具体还得按照实际情况计算,节点越多,单个slot故障影响越小,可能只存在20-30%无法访问,可以理解只是挂了部分。但是,哨兵模式切主过程中产生不可用的情况就不一样,哨兵模式是故障迁移期间整体100%都无法访问。

    【缺点】

          1、对公司运维团队要求很高,运维成本高、同时成本也会变高

   【适应的公司体量】  一线或者二线的互联网大厂

二、哨兵Sentinel-简单实验

1、主从配置是Sentinel、Cluster的基础

        例如存在A节点作为master节点,存在2个slave节点分别是A1、A2.

        那么在A1、A2分别执行

slaveof $master_ip $master_port

        即可完成A作为master节点,A1、A2作为其slave节点的一主两从的拓扑结构。

        这个过于简单就不再演示,今天重点做Sentinel哨兵的故障模拟和迁移实验

2、环境搭建与测试

1、环境介绍

        我们准备3个sentinel节点, 以及一个一主两从的结构。 让这个3个sentinel哨兵节点对整个一主两从进行监听与负责故障转移。

hostnameIP端口角色备注
s1192.168.32.326379sentinel哨兵节点
s2192.168.32.226379sentinel哨兵节点
s3192.168.32.426379sentinel哨兵节点
master192.168.32.76379master节点
slave1192.168.32.56379slave节点主节点是master
slave2192.168.32.66379slave节点主节点是master

        docker-compose.yaml文件内容如下:

version: "3"
services:s1:image: redis:5.0hostname: s1volumes:- "./redis-sentinel-26379.conf:/data/redis-sentinel-26379.conf"entrypoint: [ "tail", "-f", "/dev/null" ]s2:image: redis:5.0hostname: s2volumes:- "./redis-sentinel-26379.conf:/data/redis-sentinel-26379.conf"entrypoint: [ "tail", "-f", "/dev/null" ]s3:image: redis:5.0hostname: s3volumes:- "./redis-sentinel-26379.conf:/data/redis-sentinel-26379.conf"entrypoint: [ "tail", "-f", "/dev/null" ]master:image: redis:5.0hostname: masterentrypoint: ["tail", "-f", "/dev/null"]slave1:image: redis:5.0hostname: slave1entrypoint: ["tail", "-f", "/dev/null"]slave2:image: redis:5.0hostname: slave2entrypoint: ["tail", "-f", "/dev/null"]
2、Sentinel哨兵的配置文件

redis-sentinel-26379.conf:

port 26379
daemonize yes
logfile "26379.log"
dir /data/
sentinel monitor mymaster master 6379 2  #Sentinel监控集群别名mymaster,监控的master这个用的host别名,可以写IP形式: 192.168.32.7,  6379是端口, 2是指投票个数
sentinel down-after-milliseconds mymaster 3000
sentinel failover-timeout mymaster 180000
 3、首先启动1主2从结构
docker-compose up -d --build #启动所有容器# master节点
docker-compose exec master bash #进入master容器
redis-server &> /dev/null &  #运行redis-server进入后台# slave1节点
docker-compose exec slave1 bash #进入slave1容器
redis-server &> /dev/null &  #运行redis-server进入后台
redis-cli  #进入控制台
slaveof master 6379  #切主
info replication #查看主从复制情况# slave2节点
docker-compose exec slave2 bash #进入slave2容器
redis-server &> /dev/null &  #运行redis-server进入后台
redis-cli  #进入控制台
slaveof master 6379  #切主
info replication #查看主从复制情况

  查看master节点的集群节点信息: info replication

可以看到存在2个slave节点,分别是192.168.32.5(slave1)、192.168.32.6(slave2)正常连接运行

4、依次启动s1、s2、s3的Sentinel节点
redis-sentinel redis-sentinel-26379.conf  #后台运行sentinel节点程序
5、通过Sentinel API命令查看当前的master信息
sentinel masters

 查询结果如下:

6、模拟master节点故障,将master容器进行docker-compose stop操作

再次进入s1 sentinel节点运行redis-cli,  执行sentinel masters指令查看当前master的信息:

此时可以看到,本来master是192.168.32.7是主节点,后来模拟故障将这个节点进行stop操作。此时故障迁移已经完成, 从192.168.32.5、192.168.32.6选择了192.168.32.5做为新的master节点.

同时我们进入192.168.32.5(slave1)查看当前info replication信息:

7、恢复刚才的master容器,此时slave1再运行info replication会多出从节点

从slave1节点运行info replication,此时可以看到192.168.32.7从一开始的主节点反过来变成了slave1的从节点, slave1已经变成了新的master主节点:

三、总结

        选择简单主从模式、哨兵模式、或者集群模式,可以根据自己公司的业务量以及运维团队规模进行评估,选择合适的方案。 高可用一直和成本成反比关系,想要高可用那么付出的成本要变高,无论是运维成本还是资金成本, 反之,如果降低成本,那么可用性就会降低。

        公司体量还很小,处于起步阶段,推荐简单主从模式基本上够用了,成本也不会很高。

        如果已经稍微上规模了,还是推荐使用哨兵模式,这样故障迁移的过程就会自动化,无须人工介入更加稳定。

        如果已经是发展到哨兵模式都无法满足业务需求了,再考虑使用Cluster集群模式,能够满足更高容量、高并发访问量的需求。

       上面的这些模式都是基于IDC自己运维的机房或者自行搭建的机房环境,如果上云,自己想追求高可用性和可靠性,但是又没那么多运维精力的话,可以直接买云厂商的Redis服务即可,付钱买服务即可。

相关文章:

Redis高可用之Sentinel哨兵模式

一、背景与简介 Redis关于高可用与分布式有三个与之相关的运维部署模式。分别是主从复制master-slave模式、哨兵Sentinel模式以及集群Cluster模式。 这三者都有各自的优缺点以及所应对的场景、对应的业务使用量与公司体量。 1、主从master-slave模式 【介绍】 这种模式可以采用…...

AI “自主运行”的计算机概念正逐渐成为现实

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…...

数据库系统概论期末经典大题讲解(用关系代数进行查询)

今天也是结束的最为密集的考试周,在分析过程中自己也有些许解题的感悟,在此分享出来,希望能帮到大家期末取得好成绩。 一.专门的关系运算 1.选择(σ) 选择操作符用于从关系中选择满足特定条件的元组 例如,…...

算法通关村第十六关-黄金挑战滑动窗口与堆的结合

大家好我是苏麟 , 今天带来一道小题 . 滑动窗口最大值 描述 : 给你一个整数数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 题目 : …...

基于jsp的搜索引擎

摘 要 随着互联网的不断发展和日益普及,网上的信息量在迅速地增长,在2004年4月,全球Web页面的数目已经超过40亿,中国的网页数估计也超过了3亿。 目前人们从网上获得信息的主要工具是浏览器,搜索引擎在网络中占有举足轻…...

【Altium designer 20】

Altium designer 20 1. Altium designer 201.1 原理图库1.1.1 上划岗 在字母前面加\在加字母1.1.2 自定义快捷键1.1.3 对齐1.1.4 在原有的电路图中使用封装1.1.5 利用excel创建IC类元件库1.1.6 现有原理图库分类以及调用1.1.7 现有原理图库中自动生成原理图库 1.2 绘制原理图1.…...

Proteus仿真--基于1602LCD与DS18B20设计的温度报警器

本文介绍基于1602LCD与DS18B20设计的温度报警器设计(完整仿真源文件及代码见文末链接) 仿真图如下 其中温度传感器选用DS18B20器件,主要用于获取温度数据并上传,温度显示1602LCD液晶显示器,报警模块选用蜂鸣器&#…...

Clickhouse Join

ClickHouse中的Hash Join, Parallel Hash Join, Grace Hash Join https://www.cnblogs.com/abclife/p/17579883.html https://clickhouse.com/blog/clickhouse-fully-supports-joins-full-sort-partial-merge-part3 总结 本文描述并比较了ClickHouse中基于内存哈希表的3种连接…...

Arduino驱动STS35数字温度传感器(温湿度传感器)

目录 1、传感器特性 2、硬件原理图 3、控制器和传感器连线图 4、驱动程序 STS35瑞士Sensirion公司新推出的温度传感器,STS35提供了一个完全校准、线性和供电电压补偿的数字输出&...

一起学docker系列之十八Docker可视化工具 Portainer:简介与安装

目录 前言1 简介2 安装过程2.1 创建docker容器数据卷2.2 构建运行protainer容器 3 Portainer 软件详细说明与界面导览3.1 查看本地Docker情况3.2 操作功能3.3 创建容器3.4 部署容器 4 Portainer的优势结语参考地址 前言 Docker作为容器化解决方案的热门工具,其可视…...

【数据结构】线段树

目录 1.概述2.代码实现2.1.聚合操作——求和2.2.聚合操作——求和、求最小值、求最大值 3.应用4.与前缀和之间的区别 更多数据结构与算法的相关知识可以查看数据结构与算法这一专栏。 1.概述 (1)线段树 (Segment Tree) 是一种二叉树形数据结构&#xff…...

王道数据结构课后代码题p175 06.已知一棵树的层次序列及每个结点的度,编写算法构造此树的孩子-兄弟链表。(c语言代码实现)

/* 此树为 A B C D E F G 孩子-兄弟链表为 A B E C F G D */ 本题代码如下 void createtree(tree* t, char a[], int degree[], int n) {// 为B数组分配内存tree* B (tree*)malloc(sizeof(tree) * n);int i 0;i…...

filter过滤器

package com.it.filter;import javax.servlet.*; import javax.servlet.annotation.WebFilter;import java.io.IOException;WebFilter(urlPatterns"/*") public class DemoFilter implements Filter {Override // 初始化的方法 只要调用一次public void init(Filte…...

MES物料的动态批次管理漫谈

在制造企业中,原辅材料占产品制造总成本基本在60%以上,特殊材料加工企业可能达到80%以上,按“2/8管理原则”管理好物料就基本做好制造企业的成本管理,这也许是很多企业向“数字化转型”的一个主要原因,希望借助数字信息…...

【爬虫逆向分析实战】某笔登录算法分析——本地替换分析法

前言 作者最近在做一个收集粉币的项目,可以用来干嘛这里就不展开了😁,需要进行登录换算token从而达到监控收集的作用,手机抓包发现他是通过APP进行计算之后再请求接口的,通过官网分析可能要比APP逆向方便多&#xff0…...

vue3使用动态component

使用场景: 多个组件通过component标签挂载在同一个组件中,通过触发时间进行动态切换。vue3与vue2用法不一样,这里有坑! 使用方法: 1.通过vue的defineAsyncComponent实现挂载组件 2.component中的is属性 父组件&am…...

单机游戏推荐:巨击大乱斗 GIGABASH 中文安装版

在泰坦之中称霸天下吧!《GigaBash 巨击大乱斗》是一款多人战斗擂台游戏,有着受特摄片启发的巨型怪兽,具有传奇色彩的英雄,震天动地的特别攻击,以及可以完全摧毁的擂台场景。 ​游戏特点 怪物大解放 多达10个独特的角…...

计算机系统启动过程

计算机系统启动过程 阅读笔记: 《计算机体系结构基础(第三版)》-- 胡伟武 第7章:计算机系统启动过程分析 系统启动的整个过程中, 计算机系统在软件的控制下由无序到有序, 所有的组成部分都由程序管理, 按照程序的执行发挥各自的功…...

DedeCms后台文章列表文档id吗?或者快速定位id编辑文章

我们在建站时有的时候发现之前的文章有错误了,要进行修改,但又不知道文章名,只知道大概的文章id,那么可以搜索到DedeCms后台文章列表文档id吗?或者快速定位文章id方便修改? 第一种方法:复制下面…...

【开发问题解决方法记录】03.dian

登录提示 ERR-1002 在应用程序 "304" 中未找到项 "ROLE_ID" 的项 ID。 一开始找错方向了,以为是代码错误,但是后来在蒋老师的提醒下在共享组件-应用程序项 中发现设的项不是ROLE_ID而是ROLEID,怪不得找不到ORZ 解决方法…...

QT之QString

QT之QString 添加容器 点击栅格布局 添加容器,进行栅格布局 布局总结:每一个模块放在一个Group中,排放完之后,进行栅格布局。多个Group进行并排时,先将各个模块进行栅格布局,然后都选中进行垂直布…...

常见的几种计算机编码格式

前言: 计算机编码是指将字符、数字和符号等信息转换为计算机可识别的二进制数的过程,正因如此,计算机才能识别中英文等各类字符。计算机中有多种编码格式用于表示和存储文本、字符和数据,实际走到最后都是二进制,本质一…...

3D旋转tab图

上图 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>3D旋转tab图</title><style>* {margin: 0;padding: 0;}body {height: 100vh;background: linear-gradient(to top, #29323c, #…...

openGL 三:矩阵和向量

1.使用glm数学库进行矩阵和向量的计算 2.位置坐标可以看做一个向量 3.向量的移动&#xff0c;缩放&#xff0c;旋转&#xff0c;都是可以通过和矩阵的计算得出 4.向量的缩放乘一个44的矩阵 5.注意事项&#xff08;有些版本的glm::mat4 不是默认构建一个单位44的矩阵&#xff09…...

Socket和Http的通讯原理,遇到攻击会受到哪些影响以及如何解决攻击问题。

德迅云安全-领先云安全服务与解决方案提供商 Socket和HTTP通信原理&#xff1a; Socket通信原理&#xff1a; Socket是一种应用程序编程接口&#xff08;API&#xff09;&#xff0c;用于在单个进程或多个进程之间进行通信。它提供了一种灵活的、异步的通信方式&#xff0c;使…...

【springboot】整合redis

1.前提条件:docker安装好了redis确定redis可以访问 可选软件: 2.测试代码 (1)redis依赖 org.springframework.boot spring-boot-starter-data-redis (2)配置redis &#xff08;3&#xff09; 注入 Resource StringRedisTemplate stringRedisTemplate; 对键进行操作 –o…...

回溯和分支算法

状态空间图 “图”——状态空间图 例子&#xff1a;农夫过河问题——“图”状态操作例子&#xff1a;n后问题、0-1背包问题、货郎问题(TSP) 用向量表示解&#xff0c;“图”由解向量扩张得到的解空间树。 ——三种图&#xff1a;n叉树、子集树、排序树 ​ 剪枝 不满住条件的…...

深入理解:指针变量的解引用 与 加法运算

前言 指针变量的解引用和加法运算是非常高频的考点&#xff0c;也是难点&#xff0c;因为对初学者的不友好&#xff0c;这就导致了各大考试都很喜欢在这里出题&#xff0c;通常会伴随着强制类型转换、二维数组、数组指针等一起考查大家对指针的理解。但是不要怕&#xff0c;也许…...

Docker 镜像构建的最佳做法

一、镜像分层 使用docker image history命令&#xff0c;可以看到用于在镜像中创建每个层的命令。 1、 使用docker image history命令查看创建的入门镜像中的层。 docker image history getting-started 您应该得到如下所示的输出&#xff1a; IMAGE CREATED…...

工作上Redis安装及配置

下载redis软件 第一步&#xff1a;解压压缩包 tar -zxvf redis-7.0.14.tar.gz 第二步&#xff1a;移动redis存放目录&#xff08;结合个人需求而定&#xff01;&#xff09; redis-7.0.14&#xff1a;解压后的文件路径 /usr/local&#xff1a;移动后的文件路径 mv redis-7.0.…...

app下载安装官方网站/什么是软文营销

WinCE中触摸屏驱动开发详解 收藏 1.触摸屏驱动程序的模型 1.1 分层触摸屏驱动层序结构 本触摸屏驱动采用分层驱动程序结构&#xff0c;其驱动模型如下图所示&#xff0c;这种结构将驱动程序代码区分为上层模型设备驱动层(MDD),下层是依赖平台的驱动层(PDD)。其中MDD层通常无需修…...

上饶网站开发/网站 推广

一、请问什么是方法重载&#xff1f; 答&#xff1a;重载方法必须满足的条件是&#xff1a;在同一个类中&#xff0c;方法名相同&#xff0c;参数签名&#xff08;方法的参数类型、个数、顺序&#xff09;不同&#xff0c;方法的返回类型可以不相同&#xff0c;方法的修饰符可…...

天水做网站的公司/网站建设合同模板

相信很多从事js开发的朋友都或多或少了解一些有关js闭包&#xff08;closure&#xff09;的知识。 本篇文章是从小编个人角度&#xff0c;简单地介绍一下有关js闭包&#xff08;closure&#xff09;的相关知识。目的是帮助一些对js开发经验不是很多的朋友&#xff0c;使他们可以…...

电子商务网站建设及推广方案论文/怎样查询百度收录和排名情况

1(癌症)0&#xff08;非癌症&#xff09;1&#xff08;预测为癌症&#xff09;True Positive False Positive0&#xff08;预测为非癌症&#xff09;False Nagative True Negative判断癌症病人的分类器好坏标准&#xff1a; 1.准确率&#xff08;Precision&#xff09; 预测…...

什么网站可以查房屋建筑面积/百度seo快速排名

奋斗的小孩系列 FPGA学习altera系列: 第十一篇 流水灯设计 作者:奋斗的小孩 郝旭帅(转载请注明出处) 大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分。大侠可以关注FPGA技术江湖,在“闯荡江湖”、"行侠仗义"栏里获取其他感兴趣的资源,或者一起煮酒言欢…...

dreamweaver网页设计期末考试/电脑系统优化软件

​刚换了一台新电脑&#xff0c;可是收藏夹都在之前的电脑上&#xff0c;是不是再一个一个找到网站收藏&#xff1f;答&#xff1a;当然不是&#xff01;&#xff01;&#xff01;你遇到的问题我们优秀的浏览器开发工程师门早就已经想到啦&#xff0c;效率君给你提供两种解决方…...