redis主从复制、哨兵、集群

在实际的生活环境中,如果只使用一个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.mzph.cn/news/858446.shtml

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

相关文章

Windows程序设计课程作业-3(文件并发下载)

目录 目录 1.作业内容 2.作业要求 3.主要思路 1)窗体和组件初始化 2)下载管理器实例化 3)按钮点击事件处理 4)窗体加载事件处理 5)下载消息处理 4.主要难点 1)多线程管理: 2&#xff09…

材料科学SCI期刊,中科院3区,收稿范围广,易录用

一、期刊名称 International Journal of Material Forming 二、期刊简介概况 期刊类型:SCI 学科领域:材料科学 影响因子:2.4 中科院分区:3区 三、期刊征稿范围 该杂志发表和传播材料成型领域的原创研究。该研究应构成对材料…

理解广角镜头的视野和畸变

为什么广角镜头的视野会比长焦镜头的视野大呢? 我之前用等光程解释了景深,也解释了为什么焦距越远,成像越大,但是从来没有提到过视野范围这个概念。实际上在我之前建立的数学模型中,物曲面S是无限大的,像曲…

Chromium 调试指南2024 - 远程开发(下)

1. 引言 在《Chromium 调试指南2024 - 远程开发(上)》中,我们探讨了远程开发的基本概念、优势以及如何选择合适的远程开发模式。掌握了这些基础知识后,接下来我们将深入了解如何在远程环境中高效地进行Chromium项目的调试工作。 …

鹅算法(GOOSE Algorithm,GOOSE)求解复杂城市地形下无人机避障三维航迹规划,可以修改障碍物及起始点(Matlab代码)

一、鹅算法 鹅优化算法(GOOSE Algorithm,GOOSE)从鹅的休息和觅食行为获得灵感,当鹅听到任何奇怪的声音或动作时,它们会发出响亮的声音来唤醒群中的个体,并保证它们的安全。 参考文献 [1]Hamad R K, Rashid T A. GOO…

数据结构和算法(1) ---- Queue 的原理和实现

Queue 的定义和结构 队列(Queue) 是只允许在一端进行插入,在另一端进行删除的线性表 队列是一种先进先出(First In First Out)的线性表,简称 FIFO(First IN First OUT), 允许插入的一端称为队尾, 允许删除的一端称为队列头 队列的基本结构如下图所示&a…

FreeCAD中智能指针分析

实现原理 FreeCAD中有两套智能指针,一个是OCC的智能指针handle,另一个是自己定义的智能指针Reference,两种智能指针都是通过引用计数方式管理指针。 1.1 OCC智能指针handle OCC在基础类包中定义了一个模板类handle,该类包含一个私…

大学物理(下)笔记

摘录来自笔记网站的笔记。笔记网站详见https://onford.github.io/Notes/。 大学物理(下)笔记 部分常用物理常量的计算值 C h a p t e r 9 Chapter9 Chapter9 恒定磁场 毕奥-萨伐尔定律 磁场和电场在很多性质上是有共性的,很多时候可以拿它…

【pytorch05】索引与切片

索引 a[0,0]第0张图片的第0个通道 a[0,0,2,4]第0张图片,第0个通道,第2行,第4列的像素点,dimension为0的标量 选择前/后N张图片 a[:2,:1,:,:].shape前两张图片,第1个通道上的所有图片的数据 a[:2,1:,:,:].shape前两张…

ADD属性驱动架构设计(一)

目录 一、架构设计过程 1.1、架构设计过程 1.1.1、设计目的 1.1.2、质量属性(非功能需求) 1.1.3、核心功能(功能需求) 1.1.4、架构关注 1.1.5、约束条件 1.2、基于设计过程 二、什么是ADD? 三、为什么选择ADD? 四、作…

本地离线模型搭建指南-中文大语言模型底座选择依据

搭建一个本地中文大语言模型(LLM)涉及多个关键步骤,从选择模型底座,到运行机器和框架,再到具体的架构实现和训练方式。以下是一个详细的指南,帮助你从零开始构建和运行一个中文大语言模型。 本地离线模型搭…

鸿蒙开发系统基础能力:【@ohos.hiAppEvent (应用打点)】

应用打点 本模块提供了应用事件打点能力,包括对打点数据的落盘,以及对打点功能的管理配置。 说明: 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 导入模块 import hiAppEve…

今日分享:中国石油年金系统交互、视觉设计和vue开发

金融系统交互及UI设计时,需注意简洁明了、色彩合理、字体统一、交互易用、安全感和用户控制。确保用户快速理解、安全操作并提升体验。

数据结构~~时间、空间复杂度

目录 一、什么是数据结构 什么是算法 算法的复杂度 二、时间复杂度 三、空间复杂度 四、总结 一、什么是数据结构 数据结构(Data Structure)是计算机存储、组织数据的方式,指相互之间存在一种或多种特定关系的 数据元素的集合。 数据结构关注的是数据的逻辑结…

快速搭建Jenkins自动化集成cicd工具

一、简介 jenkins是一款优秀的自动化持续集成运维工具,可以极大的简化运维部署的步骤。 传统的项目部署需要手动更换最新的项目代码,然后打包并运行到服务器上。 使用Jenkins可以自动化实现,当代码编写完成并提交到git后,Jenki…

通过 cloudflare 白嫖个人 docker 镜像加速服务

不知为何,现在大多数的 docker hub 镜像加速站都停止服务,而官方站点又因某些原因访问不到或延迟很高。所以,今天来记录一种通过 CloudFlare 搭建一个自己的镜像加速服务。 0、必看!!! 注意: 此…

pywebview打包本地的html

51.安装 pip install pywebview 2.新建start.py import webview import timeclass API:def say_hello(self, name):time.sleep(2) # 模拟一个耗时操作return fHello, {name}!def main():api API()webview.create_window(pywebview Example, index.html, js_apiapi)webview.…

抛弃Mybatis,拥抱新的ORM 框架!【送源码】

背景 转java后的几年时间里面一直在寻找一个类似.net的orm,不需要很特别的功能,仅希望90%的场景都可以通过强类型语法来编写符合直觉的sql,来操作数据库编写业务。 但是一直没有找到,Mybatis-Plus的单表让我在最初的时间段内看到…

利用golang_Consul代码实现Prometheus监控目标的注册以及动态发现与配置

文章目录 前言一、prometheus发现方式二、监控指标注册架构图三、部分代码展示1.核心思想2.代码目录3、程序入口函数剖析4、settings配置文件5、初始化配置文件及consul6、全局变量7、配置config8、公共方法目录common9、工具目录tools10、service层展示11、命令行参数12、Make…

Android笔记-安装Termux开启ssh,安装vim、android-tool、python等

背景 家里面有个老手机,想将此手机做成一个家庭服务器。控制各种家电。目前准备先控制电视机 流程 用电脑usb连接手机,下载好Termux,在安卓手机上安装好。这里就不记录笔记了,各个手机不一样。 安装好进入手机后: …