Redis 多机功能 — 复制、Sentinel及集群

Redis 的复制功能通过主从模式实现,允许用户为存储着目标数据库的服务器(主服务)创建多个拥有相同数据库副本的服务器(从服务)。让客户端的读请求可以分摊到从服务器中,从而提升性能。复制功能适合对数据一致性要求高、且读写比例不平衡的场景,例如读操作远多于写操作。

Sentinel,哨兵模式是Redis推荐的高可用性解决方案,用于解决和管理主从复制环境,确保主节点发生故障时能自动进行故障转移和主从切换。

集群是通过对数据进行分片,并在多个节点之间进行数据复制来提供高可用性和负载均衡。不同的节点负责不同的范围数据的读写。每个节点也有主从复制,确保当主节点发生故障时,从节点能进行故障转移。

1 复制

主服务与从服务的关系为一对多。从服务器本身也可以作为其他服务器的主服务器。

设置为从服务

REPLICAOF host port

将当前服务器设置为服务器地址为host:port 的从服务。当前数据库会被清空,然后从主服务复制数据。

REPLICAOF no one

当前服务器取消复制,角色由从服务变为主服务。数据不会被清理。

ROLE

查看当前服务器所属的角色(主服务或从服务)。

表 复制功能的主要命令

1.1 数据同步

图 从服务复制主服务的数据的流程

数据同步完成后,主服务每执行一个新的写命令,它就会将相同或具有相同效果的写命令发送给从服务器。

在配置中配置 “repl-diskless-sync yes ”,主服务在接收到REPLICAOF命令时,将不会再在本地创建RDB文件,而是通过套接字让从服务生成RDB文件,然后再进行导入。

1.1.1 数据不一致场景

1)异步更新引起的短暂不一致:在主服务执行完写命令之后,将相同命令发送给从服务,并且从服务成功执行该条命令这段时间,会出现不一致。

2)主服务执行完写命令之后,因故障突然下线,而导致从服务未能执行相关的写命令。

降低数据不一致的频率:

min-replicas-max-lag <interval>

min-replicas-to-write <num>

配置主服务,让其在至少有num个从服务,与其最后一次成功通信间隔不超过interval秒的情况下,才执行写命令。

1.1.2 复制缓冲区

复制缓冲区replication buffer,会在服务器成为从服务器的主服务时创建。用于存储最近一段时间内的写命令。以便新加入或从网络断开后重新连接的从服务器能增量地同步数据,而非全量同步。它有以下特点:

  1. 先进先出的队列,缓冲区有一个配置化的最大长度,当达到这个长度时,旧命令会被移除。
  2. 复制偏移量:主服务和从服务都会维护一个复制偏移量,用于跟踪它们已处理过的命令位置。当从服务重新连接时,如果其复制偏移量已不在队列中,则进行全量同步,否则增量同步(即只要执行离线期间未执行的写命令)。

1.2 脚本复制

从服务除了需要从主服务同步写命令外,还需要同步Lua脚本。

脚本传播

将被执行的脚本及参数复制到AOF文件以及从服务器中。

要求:脚本必须是纯函数,而非带有副作用的函数(在不同服务器上运行时可能产生不同的效果)。

命令传播

将执行脚本所产生的所有写命令用事务包裹起来,然后将事务复制到AOF文件以及从服务器中。

表 脚本复制模式

模式选择:

  1. 脚本体积不大,且执行的计算不多,但会产生大量命令调用。则使用脚本传播模式。
  2. 脚本体积大,执行的计算多,但只产生少量命令调用,则使用命令传播模式。

2 哨兵模式 Sentinel

Sentinel 是一个独立运行的进程,负责监控Redis主从集群的状态,执行故障的转移与配置更新。

通常部署多个Sentinel节点形成Sentinel集群,实现高可用与故障容错。

监控

定期向主节点和从节点发送PING命令,检查其健康状态。

故障转移

当主服务发生故障下线时,会选择合适的从服务来替代其成为主服务。当出故障的主服务重新上线时,会成为从服务。

事件通知

可以通过API等方式将故障信息通知管理员。

表 Sentinel的功能

2.1 配置

在sentinel.conf 文件中进行配置,该配置文件至少需要包含下面的选项:

sentinel monitor <master-name> <ip> <port> <quorum>

是用于指定需要监控的主服务器(一个sentinel可以监控多个主服务)。

master-name 用于指定主服务的名字。

ip及port 未主服务的ip地址和端口号。

quorum 用于指定判断这个主服务下线需要的Sentinel数量。

2.1.1 Sentinel的节点数量

推荐让多个Sentinel节点去监视一个主服务,且这些节点最好在不同服务器上。节点推荐数量为大等于3且奇数。配置quorum 是,其参数值应当为节点数量的半数以上。这样就符合少数服从多数的原则。

2.1.2 新主服务的选举规则

当现有的主服务下线时,Sentiner会根据以下规则选举出新的主服务。

  1. 首先从候选名单剔除不符合条件的从服务。
  1. 否决已下线及长时间没有回复心跳检测的。
  2. 否决长时间没有与主服务通信的。
  3. 否决所有优先级为0 的。
  1.  在剩余候选名单中选出主服务。
  1. 首先是优先级最高的。
  2. 然后是复制偏移量最大的。
  3. 最后运行ID(随机生成的)最小的。

在redis服务器中通过replica-priority选项来配置从服务器的优先级,默认值为100,值越小,优先级越高。但如果为0,则永远不会被选为主服务器。

3 集群 Cluster模式

图 Redis集群 Cluster模式

Cluster模式,将数据分为16384个槽位,每个节点管理一部分的槽位,当客户端发送请求时,会根据键的哈希值将请求路由到相应的节点。

每个节点又包括1个主节点及n(不小于1)个从节点。主节点负责客户端的读写请求。从节点则负责对主节点进行负责。当主节点发生故障的时候,从节点替换成为新的主节点。

3.1 分片与重分片

Cluster 将整个数据库空间划分为16384个槽位来实现数据分片。集群中的各个主节点分别负责处理其中的一部分槽。

当用户向集群中添加新节点时,可以通过发送几条简单的命令,让相应的槽及槽中存储的数据迁移至新节点。被移除的节点也会将自己负责处理的槽及数据转交给集群中其他节点负责。整个重分片过程都可以在线进行,无须因此而停机。

3.1.1 散列标签

默认情况下,集群根据用户输入的整个键来计算出所属的槽。有时,我们期望在同一节点存储多个相关联的键。 例如键值:user1和user2。

图 键user1 与 user2 的槽值

可以通过散列标签功能,来让这两个原本不属于同一个槽的键值,处于同一个槽。用大括号{}包围并且非空的字符串字串。

图 散列标签

注意:{user}1 与user1 在redis中不属于同一个键。

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

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

相关文章

计算机网络 (14)数字传输系统

一、定义与原理 数字传输系统&#xff0c;顾名思义&#xff0c;是一种将连续变化的模拟信号转换为离散的数字信号&#xff0c;并通过适当的传输媒介进行传递的系统。在数字传输系统中&#xff0c;信息被编码成一系列的二进制数字&#xff0c;即0和1&#xff0c;这些数字序列能够…

leecode377.组合总和IV

本题其实是多重背包问题&#xff0c;对于价值和重量都是nums[i]的的物品&#xff0c;求装满这个容量为4的背包共有多少种排列方式 如果是组合问题&#xff0c;那么遍历顺序是先物品后背包&#xff0c;这样能保证物品按从小到大顺序依次放置&#xff0c;对于实例1求出来为4&…

【学生管理系统】element ui级联菜单bug

级联后端 通过父id来进行查询 GetMapping("/{parentId}")public BaseResult findAllByParentId(PathVariable("parentId") String parentId){//1 根据父id查询所有城市QueryWrapper<TbCity> queryWrapper new QueryWrapper<>();queryWrapper.…

第十七周:Fast R-CNN论文阅读

Fast R-CNN论文阅读 摘要Abstract文章简介1. 引言2. Fast R-CNN框架2.1 RoI位置信息映射2.2 RoI pooling2.3 分类器与边界框回归器2.4 以VGG16为backbone的Fast RCNN的网络结构 3. 训练细节3.1 采样3.2 多任务损失 4. 优缺点分析总结 摘要 这篇博客介绍了Fast R-CNN&#xff0…

Python爬虫(二)- Requests 高级使用教程

文章目录 前言一、Session 对象1. 简介2. 跨请求保持 Cookie3. 设置缺省数据4. 方法级别参数不被跨请求保持5. 会话作为上下文管理器6. 移除字典参数中的值 二、请求与响应1. 请求与响应对象1.1 获取响应头信息1.2 获取发送到服务器的请求头信息 三、SSL 证书验证1. 忽略 SSL 证…

Java-38 深入浅出 Spring - AOP切面增强 核心概念 相关术语 Proxy配置

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 大数据篇正在更新&#xff01;https://blog.csdn.net/w776341482/category_12713819.html 目前已经更新到了&#xff1a; MyBatis&#xff…

【算法】复杂性理论初步

六、算法复杂性初步 重要的复杂性类 P P P 的定义 多项式时间内可解的问题 若 L ∈ P L∈P L∈P&#xff0c;则存在确定性多项式时间的图灵机 M M M&#xff0c;使得 M ( x ) 1 ⟺ x ∈ L M(x)1⟺x∈L M(x)1⟺x∈L N P NP NP 的定义 多项式时间内可验证验证解的正确性 &…

hive中的四种排序类型

1、Order by 全局排序 ASC&#xff08;ascend&#xff09;: 升序&#xff08;默认&#xff09; DESC&#xff08;descend&#xff09;: 降序 注意 &#xff1a;只有一个 Reducer,即使我们在设置set reducer的数量为多个,但是在执行了order by语句之后,当前此次的运算还是只有…

Mysql(MGR)和ProxySQL搭建部署-Docker版本

项目路径&#xff1a;D:\study\backend\mysql\mgr 一、Mysql(MGR) 1.1 docker-compose.yaml volumes: # MySQL配置文件目录 - "./mysql-1/conf.d/my.cnf:/etc/mysql/my.cnf" # MySQL工作目录 - "./mysql-1/data:/var/lib/mysql" …

智能工厂的设计软件 应用场景的一个例子:为AI聊天工具添加一个知识系统 之1

本文要点 这一次我们先把抛开前面对“智能工厂的软件设计”的考虑--其软件智能 产品就是 应用程序。直接看看应用程序。例如&#xff0c;在现在各种AI聊天工具层出不穷的今天&#xff0c;我觉得特别需要一个通用的AI聊天工具的图形界面能够为每个聊天者&#xff08;或一个利益…

科技快讯 | 水滴筹成为民政部指定个人求助网络服务平台;小米超级小爱首次向正式版用户开放;腾讯发布全球首个重症医疗大模型

本地 AI 开发利器&#xff0c;初探微软 Win11 AI Dev Gallery 功能 12月27日&#xff0c;科技媒体Windows Latest报道&#xff0c;微软推出AI Dev Gallery功能&#xff0c;助力开发者集成端侧AI。该功能支持Windows 10/11&#xff0c;提供25个示例模型&#xff0c;涵盖多领域。…

python爬虫----爬取视频实战

python爬虫-爬取视频 本次爬取&#xff0c;还是运用的是requests方法 首先进入此网站中&#xff0c;选取你想要爬取的视频&#xff0c;进入视频页面&#xff0c;按F12&#xff0c;将网络中的名称栏向上拉找到第一个并点击&#xff0c;可以在标头中&#xff0c;找到后续我们想要…

大数据面试笔试宝典之Flink面试

1.Flink 是如何支持批流一体的? F link 通过一个底层引擎同时支持流处理和批处理. 在流处理引擎之上,F link 有以下机制: 1)检查点机制和状态机制:用于实现容错、有状态的处理; 2)水印机制:用于实现事件时钟; 3)窗口和触发器:用于限制计算范围,并定义呈现结果的…

AR 模型的功率谱

功率谱密度&#xff08;Power Spectral Density, PSD&#xff09;的表达式是从信号的自相关函数和系统的频率响应推导出来的&#xff0c;特别是对于 AR&#xff08;Auto-Regressive&#xff0c;自回归&#xff09;模型。以下是推导的过程&#xff1a; 1. AR 模型的定义&#xf…

leetcode------mysql

177. 第N高的薪水 - 力扣&#xff08;LeetCode&#xff09; 表: Employee ------------------- | Column Name | Type | ------------------- | id | int | | salary | int | ------------------- 在 SQL 中&#xff0c;id 是该表的主键。 该表的每一行都包含…

coturn docker 项目 搭建【一切正常】

业务需求&#xff1a;需要coturn这个服务 定制语音视频连线 请参考"小红的逃脱外星人追踪计划" coturn项目 本地测试连接服务 turnutils_stunclient -p 3478 127.0.0.1turnutils_stunclient -p 3478 -L 127.0.0.1 127.0.0.1telnet localhost 3478turnutils_uclient …

Linux 笔记 /etc 目录有什么用?

在 Linux 系统中&#xff0c;/etc 目录的全称是 "et cetera"&#xff0c;中文可以翻译为“其他”或“杂项”。这个目录用于存放系统的配置文件和一些启动脚本。名称来源于早期的 Unix 系统设计&#xff0c;当时它被用来存放那些不属于其他特定类别的系统文件。 随着…

Android 学习小记1

目录 先介绍一下Android Studio 看看常见的模板 1. No Activity 2. Empty Activity 3. Gemini API Starter 4. Basic View Activity 5. Bottom Navigation Activity 6. Empty Views Activity 7. Navigation Drawer Views Activity 8. Responsive Views Activity 9. G…

【Compose multiplatform教程06】用IDEA编译Compose Multiplatform常见问题

当我们从Kotlin Multiplatform Wizard | JetBrains 下载ComposeMultiplatform项目时 会遇到无法正常编译/运行的情况&#xff0c;一般网页和桌面是可以正常编译的&#xff0c; 我这里着重解决如下问题 1:Gradle版本不兼容或者Gradle连接超时 2:JDK版本不兼容 3:Gradle依赖库连…

Python + 深度学习从 0 到 1(02 / 99)

希望对你有帮助呀&#xff01;&#xff01;&#x1f49c;&#x1f49c; 如有更好理解的思路&#xff0c;欢迎大家留言补充 ~ 一起加油叭 &#x1f4a6; 欢迎关注、订阅专栏 【深度学习从 0 到 1】谢谢你的支持&#xff01; ⭐ Keras 快速入门&#xff1a; 神经网络的基本数据结…