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

Redis 主从、哨兵和分片集群简单介绍

Redis 主从集群架构

单节点 redis 并发能力有上限,要进一步提高 redis 并发能力,就要搭建主从集群,实现读写分离

主从同步原理 

Replicaition id:每台 master 机器都一个 repl_id,是数据集的表示,若 salve 的 repl_id 与 master 的一样,则表示它们属于同一个集群

offset:偏移量,表示 master 在 repl_backlong 的位置。而同步时 salve 也会保存一个 offset,若 master 的 offset 大于 salve 的 offset,则表示 salve 的数据落后于 master,需要进行更新

主从同步方式

全量同步

Redis 主从、哨兵和分片集群

2023-04-27 09:16·爱做梦的程序员

Redis 主从集群架构

单节点 redis 并发能力有上限,要进一步提高 redis 并发能力,就要搭建主从集群,实现读写分离

主从同步原理

Replicaition id:每台 master 机器都一个 repl_id,是数据集的表示,若 salve 的 repl_id 与 master 的一样,则表示它们属于同一个集群

offset:偏移量,表示 master 在 repl_backlong 的位置。而同步时 salve 也会保存一个 offset,若 master 的 offset 大于 salve 的 offset,则表示 salve 的数据落后于 master,需要进行更新

主从同步方式

全量同步

执行时机

  1. salve 第一次连接 master 时;
  2. slave 断开时间太久,repl_backlog 中的 offset 已经被覆盖

执行过程

  1. salve 向 master 发送 offset、repl_id,master 判断该 repl_id 为空或与自己的不同,则进行全量同步
  2. master 调用 bgsave 命令异步生成 RDB 文件,同时把生成 RDB 文件过程中接收到命令写入 repl_baklog 缓冲区 中,
  3. master 生成完 RDB 文件后,把 RDB 文件和 repl_baklog 缓冲区中的命令一并发送给 salve;
  4. slave 根据命令和 RDB 文件进行数据同步即可;

 

 

增量同步

执行时机

  • salve 断开又恢复,并且能在 repl_backlog 中找到 offset

执行过程

  1. salve 向 master 发送 offset、repl_id,master 判断该 repl_id 与自己的相同,则进行增量同步
  2. master 根据 salve 发送过来的 offset,读取 repl_backlog 位于 offset 后的命令,发送给 salve;
  3. salve 根据接收的命令进行同步即可;

 区别:

全量同步: master 执行 bgsave 命令,生成 RDB 文件发送给 slave,并将后续的命令存储在 repl_backlog 中,持续发送给 slave

增量同步: master 获取 slave 发送的 offset,将 repl_backlog 中 offset 之后的数据发送给 slave 进行同步

 优化:

  1. 使用无磁盘复制,将数据流直接读入网络 IO 中;
  2. 适当控制 Redis 内存的使用量,避免生成的 RDB 文件过大;
  3. 当 slave 宕机时,要尽快进行恢复,避免进行全量复制
  4. 可以使用 主-从-从 的链式模式,减少 master 的压力;

Redis 哨兵 

哨兵作用

服务状态监控:sentinel 不断监控 Redis 集群中 master 和 salve 的状态;

自动故障转移:当 master 宕机后,sentinel 会在所有的 slave 中选举出一个 master,当宕机后的机器恢复后,也以新选择的 master 为主

通知:sentinel 充当 Redis 的客户端服务发现来源,当集群发送故障时,会把最新的消息发送到客户端

服务状态监控 

sentinel 基于心跳的机制来判断 master 或者 slave 是否正常工作,每隔1秒向集群中的每个实例发送 ping 命令

  • 若该实例没有在规定的时间范围内得到 pong 响应,则认为该机器 主观下线
  • 若超过指定数量(quorum)台 sentinel 没有在规定的时间范围内得到该实例 pong 响应,则认为该机器 客观下线,quorum 的值最好超过 sentinel 机器数的一半

自动故障转移 

选举原则

  1. 判断 salve 和 master 断开时间的长短,若超过 10 * down-after-milliseconds ,则该 slave 不会被选举为 master
  2. 判断 salve-priority 的大小,最小则优先级越高,但该值为 0 却不会被选到;
  3. 判断 offset 的大小,offset 值越大表示数据越新;
  4. 判断 salve 的 id 大小,id 越小,节点的优先级越高;

选举过程

  1. 向某个选举为 master 的 salve 机器发送 salve of one
  2. 向所有的机器发送 salve of 新 master
  3. 最后更改宕机的 master 配置,添加 slave of 新master

 

 Redis 分片集群

主从和哨兵解决了高并发高可用的问题,但是有两个问题没有解决:

  1. 海量数据存储;
  2. 高并发写入;

分片集群的特征

  1. 拥有多个 master,每个 master 可以存储不同的信息;
  2. 每个 master 拥有多个 salve
  3. master 之间通过心跳来监控健康状态;
  4. 客户端可以访问任意节点,但最后都会被路由到正确的节点;

散列插槽

Redis 分片集群把每个 master 映射到不同的散列插槽中

会根据 key 的有效部分来计算插槽的位置,所以 key 不是跟节点绑定,而是跟插槽绑定

  1. 将 16384 个插槽分配到不同的实例上;
  2. 根据 key 的有效部分取 hash 值,对 16384 取余即可;
  3. 余数作为插槽,寻找查找对应的实例即可;
  4. 若有效部分的余数相同,则可以实现把同类的信息放到同一个 master 节点上;

 

相关文章:

Redis 主从、哨兵和分片集群简单介绍

Redis 主从集群架构 单节点 redis 并发能力有上限,要进一步提高 redis 并发能力,就要搭建主从集群,实现读写分离 主从同步原理 Replicaition id:每台 master 机器都一个 repl_id,是数据集的表示,若 salv…...

群晖NAS+DMS7.0以上版本+无docker机型安装zerotier

测试机型:群晖synology 218play / DSM版本为7.2.1 因218play无法安装docker,且NAS系统已升级为7.0以上版本,按zerotier官网说法无法安装zerotier, 不过还是可以通过ssh终端和命令方式安装zerotier。 1、在DSM新建文件夹 用于存放zerotier脚…...

Pinia持久化存储插件 pinia-plugin-persist

1、pinia-plugin-persist 作用 pinia-plugin-persist是一个Pinia持久化存储插件,用于将Pinia状态存储到本地持久化存储中,例如localStorage或sessionStorage。 2、安装和使用pinia-plugin-persist 有时候需要把pinia中的数据持久化存储(存到…...

链家JAVA笔试题

单选题 1、在Java中下列关于自动类型转换说法正确的是( )。 A. 基本数据类型和String相加结果一定是字符串型 B. char类型和int类型相加结果一定是字符 C. double类型可以自动转换成int D. char int double “ ”结果一定是double 参考答案&am…...

当试图回复传入消息时,消息应用程序会闪烁

问题描述: Actual Results: Unable to reply for incoming message as Messaging app flickers and closes. Expected Results: User should be able to send reply for incoming messages. Reproduction Steps: Stay in home screen. Receive an incoming mes…...

Hubery-个人项目经历记录

研究生期间很有幸的进入到了崔老师的组,从此也就进入到了分析人体生理信号的领域,充满挑战的同时也充满了乐趣。借着CSDN整理一下近几年来参与的项目,这里蕴含着我各种美好的回忆,也作为一个展示自己的平台吧。博客中很多结果只给…...

Ubuntu18.04 安装 qt 5.15.2

一.安装qt 1.下载 在线安装包 使用国内镜像源在线安装QT(2023.3.25更新)_qt国内镜像-CSDN博客 2.安装 (1)QT库安装: 注意:我安装时 勾选 Qt Design studio 会导致报错,直接不勾选。 注意:Qtcreator 无…...

【Linux Shell】6. echo 命令

文章目录 【 1. 显示普通字符串 】【 2. 显示转义字符 】【 3. 显示变量 】【 4. 显示换行 】【 5. 显示不换行 】【 6. 显示命令执行结果 】 Shell 的 echo 指令用于字符串的输出。命令格式: echo string【 1. 显示普通字符串 】 #!/bin/bashecho "It is a …...

Dell 机架式服务器 - 高级定制服务

Dell 机架式服务器 - 高级定制服务 1. Dell Technologies2. 机架式服务器 - 高级定制服务2.1. Servers & Storage (服务器及存储) -> Servers2.2. Rack Servers (机架式服务器)2.3. Shop2.4. PowerEdge Rack Servers (PowerEdge 机架式服务器)2.5. PowerEdge R760 Rack …...

C++ 中关键字 Static

1、什么是static? static 是C中很常用的修饰符,它被用来控制变量的存储方式和可见性。由关键字static修饰类中成员,成为类的静态成员。类的静态成员为其所有对象共享,不管有多少对象,静态成员只有一份存于公用内存中。静态…...

系统学习Python——警告信息的控制模块warnings:警告过滤器-[重写默认的过滤器]

分类目录:《系统学习Python》总目录 Python应用程序的开发人员可能希望在默认情况下向用户隐藏所有Python级别的警告,而只在运行测试或其他调试时显示这些警告。用于向解释器传递过滤器配置的sys.warningoptions属性可以作为一个标记,表示是否…...

C++力扣题目-- 二叉树层序遍历

102.二叉树的层序遍历(opens new window)107.二叉树的层次遍历II(opens new window)199.二叉树的右视图(opens new window)637.二叉树的层平均值(opens new window)429.N叉树的层序遍历(opens new window)515.在每个树行中找最大值(opens new window)116.填充每个节点的下一个右…...

前端实现回车键触发搜索

前端实现回车键触发搜索 前言实现方法1. html里可以用 form 来实现2. 非form中的input 前言 搜索框是个常见的功能,除了用现有的ui组件库,有的时候必须要自己封装,所以涉及到点击按钮搜索和回车搜索都要实现 实现方法 1. html里可以用 for…...

k8s yaml文件pod的生命周期

Pod是k8s中最小限额资源管理组件,也是最小化运行容器化的应用的资源管理对象。 Pod是一个抽象的概念,可以理解为一个或者多个容器化应用的集合。 在一个pod当中运行一个容器是最常用的方式。 在一个pod当中同时运行多个容器,在一个pod当中…...

MPEG4Extractor

1、readMetaData 必须要找到 Moov box,找到 Mdat box或者 Moof box,并且创建了 ItemTable 大端 box 分为 box header 和 box content: box header由8个字节组成,前面四个字节表示这个box 的大小(包含这个头的8字节&a…...

我在工作一年时怎么都看不懂的编程写法。今天手把手教给你

作为一名程序员,你一定遇到或亲自写过这样的代码。有人将它形象的形容为shi山,或者被戏称为“面向保就业编程”。 以下面这个代码为例,其中的问题也显而易见,当越来越多的条件判断时,代码会变得非常臃肿,难…...

ThinkPHP5多小区物业管理系统源码(支持多小区)

基于 ThinkPHP5 Bootstrap 倾力打造的多小区物业 管理系统源码,操作简单,功能完善,用户体验良好 开发环境PHP7mysql 安装步骤: 1.新建数据库db_estate,还原数据db_estate.sql 2.修改配置文件:application/database.php 3.运…...

2024 年 API 安全:预测和趋势

随着技术以前所未有的速度不断进步,API(应用程序编程接口)安全性的复杂性也随之增加。随着 API 在现代应用程序和服务中的激增,组织将需要更好地了解其 API 环境以及 API 给运营带来的风险。 到 2024 年,预计几个关键…...

3D模型UV展开原理

今年早些时候,我为 MAKE 杂志写了一篇教程,介绍如何制作视频游戏角色的毛绒动物。 该技术采用给定的角色 3D 模型及其纹理,并以编程方式生成缝纫图案。 虽然我已经编写了一般摘要并将源代码上传到 GitHub,但我在这里编写了对使这一…...

SPL-cmcRVFL+

吐槽 作者未提供代码,还有图1敢再糊点吗?...

Vue3+TS+Vite 构建自动导入开发环境

关注⬆️⬆️⬆️⬆️ 专栏后期更新更多前端内容 在一个使用 Vue 3、Vite 和 TypeScript 的项目中,配置 unplugin-auto-import 和 unplugin-vue-components 插件可以极大地提高开发效率,因为它们可以自动导入 Vue 相关的 API 和 Vue 组件,从而减少了手动导入的需要。 文章目…...

长期使用外接键盘,外物压着自带键盘,容易导致华硕飞行堡垒FX53VD键盘全部失灵【除电源键】

华硕飞行堡垒FX53VD键盘全部失灵【除电源键】 前言一、故障排查二、发现问题三、使用方法总结 前言 版本型号: 型号 ASUS FX53VD(华硕-飞行堡垒) 板号:GL553VD 故障情况描述: 键盘无法使用,键盘除开机键外…...

JavaScript-循环嵌套断点调试-笔记

1.do...while循环 do while语法结构&#xff1a; 循环初始值&#xff1b; do{ //代码&#xff1b; 增量&#xff1b; }while(循环条件)&#xff1b; <script> // 输出十句 &#xff1a; 你好世界 var …...

1042: 数列求和3 和 1057: 素数判定 和 1063: 最大公约与最小公倍

1042: 数列求和3 题目描述 求1-2/33/5-4/75/9-6/11...的前n项和&#xff0c;结果保留3位小数。 输入 输入正整数n(n>0)。 输出 输出一个实数&#xff0c;保留3位小数&#xff0c;单独占一行。 样例输入 5 样例输出 0.917 #include<stdio.h> int main(){in…...

[足式机器人]Part2 Dr. CAN学习笔记-动态系统建模与分析 Ch02-8 Bode Plot伯德图

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-动态系统建模与分析 Ch02-8 Bode Plot伯德图 Bode Plot 手绘技巧与应用...

Java 将Excel转换为TXT文本格式

TXT文件是一种非常简单、通用且易于处理的文本格式。在处理大规模数据时&#xff0c;将Excel转为TXT纯文本文件可以提高处理效率。此外&#xff0c;许多编程语言和数据处理工具都有内置的函数和库来读取和处理TXT文件&#xff0c;因此将Excel文件转换为TXT还可以简化数据导入过…...

什么事“网络水军”?他们的违法活动主要有四种形式

我国治理网络水军&#xff0c;包括造谣引流、舆情敲诈、刷量控评、有偿删帖等各类“网络水军”等违法犯罪活动已经许久。 日前&#xff0c;官方召开新闻发布会&#xff0c;公布了相关的一些案件进程&#xff0c;今年已累计侦办相关案件339起&#xff0c;超过历年的全年侦办案件…...

授权策略(authorize方法)

authorize方法&#xff08;授权策略的使用示例&#xff09; $this->authorize(destroy, $status) 要实现这个功能&#xff0c;你需要执行以下步骤&#xff1a; 1、创建一个授权策略&#xff1a; 在Laravel中&#xff0c;授权策略是用于定义用户对特定操作的权限的类。你可…...

FFmpeg获取音视频流信息

文章目录 前言一、需求二、源码三、运行结果 前言 本文记录用 FFmpeg 获取视频流音频流的信息&#xff08;编码格式、分辨率、帧率、播放时长…&#xff09;&#xff0c;所用的工程基于上个博客编译成功的工程&#xff1a;使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c 一、需求…...

编程语言的走向又将如何呢?

编程语言的未来&#xff1f; 随着科技的飞速发展&#xff0c;编程语言在计算机领域中扮演着至关重要的角色。它们是软件开发的核心&#xff0c;为程序员提供了与机器沟通的桥梁。那么&#xff0c;在技术不断进步的未来&#xff0c;编程语言的走向又将如何呢&#xff1f; 1. 更…...

勘察设计人才网/seo资源网站排名

写在前面&#xff1a;分享技术&#xff0c;共同进步&#xff0c;有不足请见谅&#xff0c;相关意见可评论告知 编程路漫漫&#xff0c;学习无止尽&#xff01; 文章目录HTTP前言请求消息数据格式Requestrequest对象和response对象的原理request功能&#xff1a;获取请求头数据其…...

在局域网内访问本机的asp网站/东莞网站推广排名

class type type()函数既可以返回一个对象的类型&#xff0c;又可以创建出新的类型,原型为&#xff1a; type(object) -> the objects type type(name, bases, dict) -> a new type 要创建一个class对象&#xff0c;type()函数依次传入3个参数&#xff1a; class的名…...

直播类网站怎么做/上海seo推广整站

Mysql动态生成字母固定位数的随机数在日常测试工作中&#xff0c;经常需要在短时间内构造大量的测试数据&#xff0c;如果只是几条数据&#xff0c;可以直接insert,但是如果要上万条呢&#xff0c;最近接到一个测试任务&#xff0c;就是模拟第三方&#xff0c;全量获取数据&…...

网站建设阶段要做什么/优秀网站网页设计图片

上周一直在看CTE因为里面都是一个表&#xff0c;或者说看的基本上都是可以拿来直接用SQL自己可以描述的&#xff0c;但是看到的代码的程序自己还是没有看太懂&#xff0c;只是能猜&#xff0c;有不确定性。 今天上午闲来测试了一下下&#xff1a; use TESTDBgo/*--------------…...

计算机网络技术网站开发与设计/营销工具

前言 转眼&#xff0c;2013年已经过去两个月了。没有像玛雅人预言的那样&#xff0c;我们还在2013的空气中活着。 回首2012&#xff0c;又是忙 碌的一年。 和时间赛跑 这段主题叫与时间赛跑。结束了寒假在提高班的学习&#xff0c;3月份学校开学。作为一个生科的孩子&#xff…...

wordpress 录音/核心关键词举例

1、你是如何理解测试的&#xff1f; &#xff08;1&#xff09;软件测试属于软件开发中的一个环节&#xff0c;测试就是对一个结构进行校验的作用&#xff1b; &#xff08;2&#xff09;按照我个人的理解&#xff0c;测试就是一种思想&#xff0c;软件测试只不过是把测试思想…...