Redis高并发高可用

1. 复制机制

在分布式系统中,为了解决单点问题,通常会将数据复制多个副本部署到其他机器,以满足故障恢复和负载均衡等需求。Redis提供了复制功能,实现了相同数据的多个Redis副本。复制功能是高可用Redis的基础,后面的哨兵和集群都是在复制的基础上实现高可用的。

默认情况下,Redis实例都是主节点。每个从节点只能有一个主节点,而主节点可以同时具有多个从节点。复制的数据流是单向的,只能由主节点复制到从节点。

2. 复制拓扑结构

Redis 的复制拓扑结构可以支持单层或多层复制关系,根据拓扑复杂性可以分为以下三种:一主一从、一主多从、树状主从结构。

  1. 一主一从结构

    一主一从结构是最简单的复制拓扑结构,用于主节点出现宕机时从节点提供故障转移支持。

    image.png

    当应用写命令并发量较高且需要持久化时,可以只在从节点上开启AOF,这样既保证数据安全性同时也避免了持久化对主节点的性能干扰。但需要注意的是,当主节点关闭持久化功能时,如果主节点脱机要避免自动重启操作。

    因为主节点之前没有开启持久化功能,自动重启后数据集为空,这时从节点如果继续复制主节点会导致从节点数据也被清空的情况,丧失了持久化的意义。安全的做法是在从节点上执行slaveof no one断开与主节点的复制关系,再重启主节点从而避免这一问题。

  2. 一主多从结构

    一主多从结构(又称为星形拓扑结构)使得应用端可以利用多个从节点实现读写分离。

    image.png

    对于读占比较大的场景,可以把读命令发送到从节点来分担主节点压力。同时在日常开发中如果需要执行一些比较耗时的读命令,如:keys、sort等,可以在从节点上执行,防止慢查询对主节点造成阻塞从而影响线上服务的稳定性。对于写并发量较高的场景,多个从节点会导致主节点写命令的多次发送,从而过度消耗网络带宽,同时也加重了主节点的负载,影响服务稳定性。

  3. 树状主从结构

    树状主从结构(又称为树状拓扑结构)使得从节点不但可以复制主节点数据,同时可以作为其他从节点的主节点继续向下层复制。通过引入复制中间层,可以有效降低主节点负载和需要传送给从节点的数据量。

    image.png

    数据写入节点A后会同步到B和C节点,B节点再把数据同步到D和E节点,实现一层一层的向下复制。当主节点需要挂载多个从节点时,为了避免对主节点的性能干扰,可以采用树状主从结构降低主节点压力。

3. 复制配置

建立复制

参与复制的Redis实例划分为主节点(master)和从节点(slave)。默认情况下,Redis实例都是主节点。每个从节点只能有一个主节点,而主节点可以同时具有多个从节点。复制的数据流是单向的,只能由主节点复制到从节点。

配置复制的方式有以下三种:

  1. 在配置文件中加入slaveof {masterHost} {masterPort}随Redis启动生效。
  2. redis-server启动命令后加入--slaveof {masterHost} {masterPort}生效。
  3. 直接使用命令:slaveof {masterHost} {masterPort}生效。

综上所述,slaveof命令在使用时,可以运行期动态配置,也可以提前写到配置文件中。

比如:在机器上启动两台Redis实例,分别是6379和6380两个端口。

image.png

image.png

slaveof本身是异步命令,执行slaveof命令时,节点只保存主节点信息后返回,后续复制流程在节点内部异步执行。主从节点复制成功建立后,可以使用info replication命令查看复制相关状态。

断开复制

slaveof命令不但可以建立复制,还可以在从节点执行slaveof no one来断开与主节点的复制关系。例如在6881节点上执行slaveof no one来断开复制。

image.png

断开复制主要流程:

  1. 断开与主节点复制关系。
  2. 从节点晋升为主节点。

从节点断开复制后并不会抛弃原有数据,只是无法再获取主节点上的数据变化。

通过slaveof命令还可以实现切主操作,所谓切主是指把当前从节点对主节点的复制切换到另一个主节点。执行slaveof {newMasterIp} {newMasterPort}命令即可,例如把6881节点从原来的复制6880节点变为复制6879节点。

image.png

切主内部流程如下:

  1. 断开与旧主节点复制关系。
  2. 与新主节点建立复制关系。
  3. 删除从节点当前所有数据。
  4. 对新主节点进行复制操作。
只读

默认情况下,从节点使用slave-read-only=yes配置为只读模式。由于复制只能从主节点到从节点,对于从节点的任何修改主节点都无法感知,修改从节点会造成主从数据不一致。因此建议线上不要修改从节点的只读模式。

image.png

传输延迟

主从节点一般部署在不同机器上,复制时的网络延迟需要考虑。Redis提供了repl-disable-tcp-nodelay参数用于控制是否关闭TCP_NODELAY,默认关闭。说明如下:

image.png

当关闭时,主节点产生的命令数据无论大小都会及时地发送给从节点,这样主从之间延迟会变小,但增加了网络带宽的消耗。适用于主从之间网络环境良好的场景,如同机架或同机房部署。

当开启时,主节点会合并较小的TCP数据包从而节省带宽。默认发送时间间隔取决于Linux的内核,一般默认为40毫秒。这种配置节省了带宽但增大主从之间的延迟。适用于主从网络环境复杂或带宽紧张的场景,如跨机房部署。

总结

Redis的高并发高可用性主要通过其复制机制实现,支持多种复制拓扑结构和灵活的配置选项。复制流程确保数据在主从节点间的一致性,从而实现故障转移、读写分离和负载均衡。了解和配置Redis的复制机制,对于构建高可用的分布式系统至关重要。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

DeepSpeed Monitoring Comm. Logging

Monitoring 支持多种后端:Tensorboard、WandB、Comet、CSV文件; TensorBoard例子: 自动监控:DeepSpeed自动把重要metric记录下来。只需在配置文件里enable相应的看板后端即可: {"tensorboard": {"enabl…

HTML+CSS+JS 自定义下拉菜单

效果演示 实现了一个下拉菜单的动画效果,包括一个主按钮和一个下拉菜单列表。点击主按钮会展开下拉菜单列表,同时箭头会旋转,列表项会逐渐显示出来。鼠标悬停在列表上时,会出现一个浮动图标。整个下拉菜单的样式比较简洁&#xff…

vue3第三十九节(TS中的高级类型,分类以及使用注意事项)

前言:为什么需要使用高级类型,正常的类型不能满足日常的业务需求,对于复杂的数据结构、函数签名、类型转换,我们需要使用高级类型来处理,常用的高级类型包含以下几种: 常用的类型定义: 基本类…

理解 GPIO 的推挽与开漏

在日常的嵌入式开发过程当中,GPIO可以说是接触最多的外设了。小到点亮一个LED灯,大到模拟总线通讯,都必不可少地需要用到GPIO资源。而对于GPIO的两大输出模式 ——推挽输出和开漏输出,你是否真正理解了呢? 首先我们看…

HCIA14 DHCP 实验

动态主机配置协议 DHCP(Dynamic Host Configuration Protocol)由 RFC 2131 定义,采用客户端/服务器通信模式,由客户端(DHCP Client)向服务器(DHCP Server)提出配置申请,服…

哈希应用——布隆过滤器

布隆过滤器的提出 场景一:在注册账号设置昵称的时候,为了保证每个用户昵称的唯一性,系统必须检测你输入的昵称是否被使用过,这本质就是一个key的模型,我们只需要判断这个昵称被用过,还是没被用过。 场景二&…

声学气膜馆:高品质声效与灵活应用的完美结合—轻空间

声学气膜馆是一种结合气膜建筑和声学优化的新型场馆。这种建筑形式不仅可以快速搭建和灵活使用,还能提供出色的声学效果,非常适合用于音乐演出、体育比赛、会议展览等多种场合。 气膜建筑的声学优势 气膜建筑利用空气压力支撑膜材,形成稳定的…

计算机图形学入门09:深度缓存

在前面知道了怎么将一个三角形显示到屏幕上,那么如果有很多三角形,各自距离相机的远近也不一样,并且三角形会相互遮挡。也就是三维空间中有很多物体,通常近处的物体会遮挡住远处的物体,那么在计算机渲染中该如何处理呢…

第十四篇——互信息:相关不是因果,那相关是什么?

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/499cd9af2ea14cbf8d12813f6f…

Linux命令详解(2)

文本处理是Linux命令行的重要应用之一。通过一系列强大的命令,用户可以轻松地对文本文件进行编辑、查询和转换。 cat: 这个命令用于查看文件内容。它可以一次性显示整个文件,或者分页显示。此外,cat 还可以用于合并多个文件的内容…

超全分析MybatisPlus中的MetaObjectHandler全局字段填充的基本知识(附Demo及实战)

目录 前言1. 源码及API2. Demo架构3. 全局字段填充(实战)4. 局部字段不填充(实战) 前言 对于Java的相关知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项…

nginx ws长连接配置

nginx ws长连接配置 http根节点下配上 map $http_upgrade $connection_upgrade {default upgrade; close;}如下: server服务节点下,后端接口的代理配置 proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connec…

电脑意外出现user32.dll丢失的八种修复方法,有效解决user32.dll文件丢失

遇到与 user32.dll 相关的错误通常是因为该文件已损坏、丢失、或者与某些软件冲突。今天这篇文章寄给大家介绍八种修复user32.dll丢失的方法,下面是一步步的详细教程来解决这个问题。 1. 重新启动电脑 第一步总是最简单的:重新启动你的电脑。许多小问题…

52.Python-web框架-Django - 多语言编译-fuzzy错误

目录 1.起因 2.原因 3.解决方法 3.1手动移除fuzzy标记 3.2重新生成po文件,并检查是否还存在fuzzy标记 3.3重新编译生成mo文件 1.起因 在Django的国际化和本地化过程中,当你发现某些字段仅显示msgid,而不显示msgstr时,可能是…

Python爬虫实战(实战篇)—18获取【小红书】首页信息写入Excel(仅用于学习-附完整版代码)

文章目录 专栏导读背景1、分析首页页面2、分析获取信息2-1,获取:笔记类型2-2,获取:标题2-3,获取:用户信息2-4,获取:用户ID2-5,获取:用户头像2-6,获取:文章连接完整代码总结专栏导读 文章名称链接Python爬虫实战(实战篇)—16获取【百度热搜】数据—写入Ecel(附完整…

日常销售数据分析为什么重要?三个维度全面分析日常销售数据

在当今电子商务的浪潮席卷全球的时代,网店如雨后春笋般涌现,并且竞争日趋激烈。在这样一个充满挑战与机遇的环境中,如何洞察市场动向,把握消费者需求,实现销售业绩的稳步增长,成为每一位电商运营者必须面对…

2024.6.12 作业 xyt

今日课堂练习&#xff1a;vector构造函数 #include <iostream> #include <vector> using namespace std;void printVector(vector<int> &v) {vector<int>::iterator iter;for(iterv.begin(); iter ! v.end(); iter){cout << *iter <<…

扩散模型会成为深度学习的下一个前沿领域吗?

文章目录 一、说明二、 第 1 部分&#xff1a;了解扩散模型2.1 什么是扩散模型2.2 正向扩散2.3 反向扩散 三、他们的高成本四、扩散模型的用处五、为什么扩散模型如此出色六、第 2 部分&#xff1a;使用扩散模型生成6.1 用于自然语言处理和 LLM 的文本扩散6.2 音频视频生成6.3 …

【APP移动端自动化测试】第一节.环境配置和adb调试工具

文章目录 前言一、Java环境搭建二、AndroidSDK环境搭建三、Android模拟器安装四、adb调试工具基本介绍 4.1 adb构成和基本原理 4.2 adb获取包名&#xff0c;界面名 4.3 adb文件传输 4.4 adb获取app启动时间 4.5 adb获取手机日志 4.6 adb其他有关…

空间搜索geohash概述;redis的geo命令

概述 通常在一些2C业务场景中会根据用户的位置来搜索一些内容。通常提供位置搜索的都是直接通过redis/mongodb/es等中间件实现的。 但是这些中间件又是怎么实现位置搜索的呢&#xff1b; 查了一番资料&#xff0c;发现背后一个公共的算法Geohash。 搜索的时候可以根据距离对…