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…

CesiumJS【Basic】- #008 通过canvas绘制billboard

文章目录 通过canvas绘制billboard1 目标2 实现通过canvas绘制billboard 1 目标 通过canvas绘制billboard 2 实现 /** @Author: alan.lau* @Date: 2024-06-16 11:15:48* @LastEditTime: 2024-06-16 11:43:02* @LastEditors: alan.lau* @Description: * @FilePath: \my-cesi…

材料科学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…

动态规划DP--斐波那契数、爬楼梯、使用最小花费爬楼梯等示例代码

动态规划DP 文章目录 动态规划DP509. 斐波那契数70. 爬楼梯746. 使用最小花费爬楼梯62. 不同路径63. 不同路径II343.整数拆分 509. 斐波那契数 509. 斐波那契数 斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&…

数据结构和算法(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 恒定磁场 毕奥-萨伐尔定律 磁场和电场在很多性质上是有共性的,很多时候可以拿它…

pytest unittest temp path单元测试创建临时文件

参考了这个:Test Files Creating a Temporal Directory in Python Unittests | Simple IT 🤘 Rocks 并使用pathlib做了优化: import tempfile import unittest from pathlib import Pathclass TestExample(unittest.TestCase):def test_exa…

【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…

基于 Java 实现的智能客服聊天工具模拟场景

服务端代码 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket;public class Server {public static void main(String[] args) throws IOE…

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

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

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

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

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

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