redis主从复制、哨兵、集群

news2025/1/15 20:59:34

在实际的生活环境中,如果只使用一个redis进行读写操作,那么面对庞大的访问人群是崩溃的,所以可以有几个redis,一个用来做主机,提供修改数据操作,而这个主机用来控制其他redis,即将更新的发送,保证一致性,而其他的redis只能是读操作,无法进行更改数据!

所以大致为一个redis用来写,其他redis复制主redis,但是用户只能读不能写!

那么如何配置呢?


1.在redis.conf中添加 replicaof 主机的ip 端口号

例:

2.在从机中的redis.conf中添加masterauth "主机redis的密码"

例:

如果在运行中想更改关系,比如

A有两个小弟B,C,我们现在让C的主机变为B,可直接使用命令

slaveof 新主库IP 新主库端口

不过如果出现宕机等重启情况,C的主机还是A

因为命令并未更改redis.conf中的配置

从 变为主

slaveof no one

将当前从机变为主机


复制的原理

slave启动,数据清零 当从机的redis启动时,会把自身体的数据清空

首次连接,全量复制 第一次连接会将主机所有数据打包发给从机

保持通信  在每个周期从机给主机发送包保持连接

每次快照,更新从机

从机下线重连,重连续传  master和slave中都有一个offset,根据判断offset来确定从哪个节点重新传输。

缺点:实际中有许多从机,导致主机IO量大,存在复制延时

master挂了后,不能出现临时master替补,无法进行实时操作

由此引入哨兵

哨兵的作用:

1.监控redis的运行状态,包括master和slave

2.当master down机后,自动将slave切换master

保证读写功能稳定

功能

主从监控 消息通知 故障转移 配置中心

哨兵配置sentinel.conf

启动

redis-sentinel sentinel.conf(文件名) --sentinel

相关问题

如果master宕机两台数据能否访问?

不能,此时需通过哨兵选择新的master后才可以继续访问

之前down机的master恢复后,还会不会是老大?

不会,变为slave,只能读不能写


哨兵流程

哨兵监控多个redis运行

当哨兵发现master超过配置的时间未响应包时,便会投票认为该masterdown机

当哨兵投票个数超过指定时,便认为该master宕机

由哨兵组选出一个哨兵将该master移出,并在slave中选出新的master

选新master流程为:

从master下的slave中按条件挑选

权限高>偏移量大(之前复制master的数据最多,完整性最好)>id号

选出的slave 执行slaveof no one变换为master

将原master下的slave归并到新的master,

当已下线的master上线时,新master对其发送slaveof指令将其变为slave。

集群哨兵+主从复制:并不能保证数据的不丢失,所以引出了redis集群

redis集群:提供多个redis节点间共享数据的程序集,支持多个master

用处:

支持多个master,一个down机可用其他master继续修改数据

无需哨兵功能

客户端只需连接集群中某个节点

通过redis槽位实现数据的分布式存储


分片的方法:

取余分片:通过哈希函数转换成值再对某数取余,得到存放位置

缺点,如果出现down机等情况会导致数据混乱,因为取余的数字发生改变

一致性哈希算法:将所有节点和键值对映射到一个环形的哈希空间中,通常是一个虚拟的圆环。这个圆环的范围是从0到最大哈希值。每个节点被映射到环上的一个点,而键值对也被映射到环上的相应位置。当查找一个键时,算法会沿着圆环顺时针方向查找最近的一个节点,然后将键值对存储在这个节点上。

优点:加入和删除节点只会影响哈希环中顺时针方向的相邻节点

缺点:存在数据倾斜的情况(某个点数据特别多)


CRC16算法

产生的hash值有16bit(65536个),但为什么用16384呢?

1.槽位为65536会导致发送的ping包过大

2.redis集群主节点不可能超过1000个,所以够用

3.槽位越小,节点少情况下方便压缩,容易传输

redis集群不保证数据一致性(因为一个redis收到命令后会异步同步给其他redis,此过程中可能出现down机导致数据不一致)

防止路由失效加-c

info replication 查看当前redis的主从关系

cluster failover 主从关系调整

redis-cli -a 密码 --cluster add-node 新机:端口 旧机:端口

redis-cli -a 密码 --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点ID

reshard(重新分派槽号)各个主机都分部分坑位给新的节点,故新节点槽位段数会有多个。

删除节点 redis-cli -a 密码 --cluster del-node Ip:从机ip+端口 从机6388节点ID

在集群条件下不能进行set等多元素操作,因为操作数据必须在同一个槽中。

可以通过分组进行多组操作

例: mset k1{x} v1  k2{x} v2 这里{x}表示为一个名为x的分组

cluster keyslot 键名 查看该键在哪个槽位

感谢观看!!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C/C++ - 编码规范(USNA版)

[IC210] Resources/C Programming Guide and Tips 所有提交的评分作业(作业、项目、实验、考试)都必须使用本风格指南。本指南的目的不是限制你的编程,而是为你的程序建立统一的风格格式。 * 这将有助于你调试和维护程序。 * 有助于他人&am…

号外!号外!全网第一手Android P刘海屏适配大揭秘,唯一Kotlin算法

如下图所示: 4.2.适配刘海屏 在刘海屏调试打开之后,浏览应用的所有页面,测试所有遮挡问题,或者是下移导致的问题,对有问题的页面进行布局适配。适配方案如下: Google 提供的适配方案,可以设置…

基于Vue-cli脚手架搭建项目使用ElementUI组件

项目结构 node_modules 项目依赖的外部组件文件放在此处,例如vue public index.html是对外提供的唯一的html文件 src assets 存放静态文件 例如图片 css js等文件 components 里面存放的是组件 App.vue是组件 main.js是项目配置文件 package.json存放的是项目依赖的…

1.树莓派4b+ubuntu18.04(ros版本melodic)+arduino mega自制两轮差速小车,实现建图导航功能

第一篇先介绍材料准备、环境配置和ros的安装 1.材料准备 1.树莓派4b,8g版本 2.arduino mega 3.MG310编码电机*2 4.雷达ydlidar X3 5.Tb6612电机驱动板 6.12v电池 7.ubuntu18.04ros melodic版本 2.环境配置 树莓派安装ubuntu18.04版本 ubuntu18.04版本的镜像可以…

访问网站时IP被屏蔽是什么原因?

在互联网使用中,有时我们可能会遇到访问某个网站时IP地址被屏蔽的情况。IP地址被网站屏蔽是一个相对常见的现象,而导致这种情况的原因多种多样,包括恶意行为、违规访问等。本文将解释IP地址被网站屏蔽的常见原因,同时,…

HarmonyOS-MPChart根据y轴刻度绘制渐变色曲线

本文是基于鸿蒙三方库mpchart(OpenHarmony-SIG/ohos-MPChart)的使用,自定义绘制方法,绘制一条颜色渐变的曲线。 mpchart本身的绘制功能是不支持颜色渐变的曲线的,只支持渐变色填充大块颜色。那么当我们的需求曲线根据…

【Linux】IP协议、以太网帧格式

目录 网络层IP协议协议头格式网段划分分类划分法特殊的 IP 地址IP 地址的数量限制私有 IP 地址和公有 IP 地址路由路由表生成算法 数据链路层以太网以太网帧格式认识 MAC 地址ARP协议ARP数据报格式 ARP 协议的工作流程ARP欺骗 DNShosts 文件域名的层级关系域名服务器分类域名解…

【计算机网络篇】数据链路层(12)交换机式以太网___以太网交换机

文章目录 🍔交换式以太网🛸以太网交换机 🍔交换式以太网 仅使用交换机(不使用集线器)的以太网就是交换式以太网 🛸以太网交换机 以太网交换机本质上就是一个多接口的网桥: 交换机的每个接口…

记MySQL事务+消息队列引起的问题

问题描述: 先说一下流程:后端保存前端提交的图表信息,然后发送异步消息到消息队列,由下游服务去处理图表信息。 部署项目到服务器,验证项目功能的时候,出现了以下错误:数据库存在数据。下游服…

计算机组成原理 —— 存储系统(DRAM和SRAM,ROM)

计算机组成原理 —— 存储系统(DRAM和SRAM) DRAM和SRAMDRAM的刷新DRAM地址复用ROM(Read-Only Memory(只读存储器)) 我们今天来看DRAM和SRAM: DRAM和SRAM DRAM(动态随机存取存储器&…

构建未来应用的核心,云原生技术栈解析

🐇明明跟你说过:个人主页 🏅个人专栏:《未来已来:云原生之旅》🏅 🔖行路有良友,便是天堂🔖 目录 一、云原生技术栈 1、容器和容器编排 1.1 Docker 1.2 Kubernete…

JaveEE进阶----Spring Web MVC入门

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、什么是 Spring Web MVC??1.1MVC 定义1.2 什么是Spring MVC ?1.3过浏览器和用户程序交互 二、 RequestMapping 注解三、Postman 前言…

能理解你的意图的自动化采集工具——AI和爬虫相结合

⭐️我叫忆_恒心,一名喜欢书写博客的研究生👨‍🎓。 如果觉得本文能帮到您,麻烦点个赞👍呗! 近期会不断在专栏里进行更新讲解博客~~~ 有什么问题的小伙伴 欢迎留言提问欧,喜欢的小伙伴给个三连支…

计网:网络应用层【Email应用/SMTP协议】

Email应用与SMTP协议 Email应用层的构成 客户端服务器协议 用户代理 用于读写邮件消息;与服务器交互,收发邮件消息 常见的客户端:Outlook,Foxmail(这两个是需要下载的客户端),Web客户端&…

浏览器插件利器-allWebPluginV2.0.0.14-bata版发布

allWebPlugin简介 allWebPlugin中间件是一款为用户提供安全、可靠、便捷的浏览器插件服务的中间件产品,致力于将浏览器插件重新应用到所有浏览器。它将现有ActiveX插件直接嵌入浏览器,实现插件加载、界面显示、接口调用、事件回调等。支持谷歌、火狐等浏…

【数据建模】微分方程与动力系统

文章目录 微分方程与动力系统1. 微分方程的理论基础1.1 函数、导数与微分1.2 一阶线性微分方程的解1.3 二阶常系数线性微分方程的解 2. 使用python求解微分方程2.1 求解微分2.2 求解定积分2.2.1 quad函数求解2.2.2 梯型法则求解 3. 使用Scipy和Sympy解微分方程3.1 使用sympy求解…

4. DSL入门_01

1. 常见的DSL (1) 查询所有: 查询出所有数据,一般测试的时候使用,例如: match_all .但是受分页限制,一般返回10条数据 (2) 全文检索(full text)查询:利用分词器对用户输入内容分词,然后去倒排索引中匹配&a…

三个 insert 导致的死锁问题

锁种类 插入意向锁(insert intention lock)对已有数据行的修改与删除,必须加强互斥锁 X 锁,那对于数据的插入,是否还需要加这么强的锁,来实施互斥呢?插入意向锁,孕育而生。插入意向…

任务5.2 掌握DStream基础操作

实战:DStream基础操作 了解DStream编程模型:DStream是Spark Streaming中对实时数据流的抽象,可以看作一系列持续的RDD。DStream可以通过外部数据源获取或通过现有DStream的高级操作获得。 操作本质:DStream上的操作最终会转化为对…

OneNote for Windows 10 下载

OneNote for Windows 10 安装 1.在浏览器中输入地址:https://apps.microsoft.com/detail/9wzdncrfhvjl?hlzh-cn&glUS2OneNote for Windows 10 - 在 Windows 上免费下载并安装 |Microsoft StoreOneNote 是用于在设备上捕获和组织你的一切内容的数字笔记本。快速…