0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Redis Cluster之故障转移

马哥Linux运维 ? 来源:马哥Linux运维 ? 2025-01-20 09:21 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

1. Redis Cluster 简介

Redis Cluster 是 Redis 官方提供的 Redis 集群功能。

305b0afc-d4b6-11ef-9310-92fbcf53809c.png

为什么要实现 Redis Cluster?

Redis 是单线程的(从网络 I/O 处理到实际的读写命令处理),无论单核CPU 下内存多大,如果需要大量计算能力,还是需要采用分布式以增加 CPU 资源。

随着公司发展,用户数量增多,并发越来越多,业务需要更高的 QPS,而主从复制中单机的 QPS(10W)可能无法满足业务需求。

数据量的考虑:现有服务器内存不能满足业务数据的需要时,单纯向服务器添加内存不能达到要求,此时需要考虑分布式需求,把数据分布到不同服务器上。

网络流量需求:业务的流量已经超过服务器的网卡的上限值,可以考虑使用分布式来进行分流。

离线计算,需要中间环节缓冲等别的需求。

Redis Cluster 缺点

当节点数量很多时,性能不会很高。

解决方案:使用smart智能客户端操作集群达到通信效率最大化。客户端内部负责计算维护键,槽以及节点的映射,用于快速定位到目标节点。智能客户端知道由哪个节点负责管理哪个槽,而且当节点与槽的映射关系发生改变时,客户端也会知道这个改变,这是一种非常高效的方式。

集群的限制

key 批量操作支持有限:例如 mget、mset 必须在一个 slot。

key 事务和 Lua 支持有限:操作的 key 必须在一个节点。

key 是数据分区的最小粒度:不支持 bigkey 分区。

不支持多个数据库:集群模式下只有一个 db0。

复制只支持一层:不支持树形复制结构。

Redis Cluster 满足容量和性能的扩展性,很多业务“不需要”。

大多数时客户端性能会“降低”。 命令无法跨节点使用:mget、keys、scan、flush、sinter 等。 Lua 和事务无法跨节点使用。

客户端维护更复杂:SDK 和应用本身消耗(例如更多的连接池)。

数据分布

为什么要做数据分布?

全量数据,单机 Redis 节点无法满足要求,按照分区规则把数据分到若干个子集当中。

309a7d5e-d4b6-11ef-9310-92fbcf53809c.png

常用数据分布之顺序分布

30e51c1a-d4b6-11ef-9310-92fbcf53809c.png

顺序分区常用在关系型数据库的设计。

常用数据分布之哈希分布

310c661c-d4b6-11ef-9310-92fbcf53809c.png

31319c3e-d4b6-11ef-9310-92fbcf53809c.png

虚拟槽分区

虚拟槽分区是 Redis Cluster 采用的分区方式。

预设虚拟槽,每个槽就相当于一个数字,有一定范围。每个槽映射一个数据子集,一般比节点数大。

Redis Cluster 中预设虚拟槽的范围为 0 到 16383

每个key 通过 CRC16 校验后对 16384 取模来决定这个 key 存放在哪个槽(slot)。

3167c9f8-d4b6-11ef-9310-92fbcf53809c.png

步骤:

把 16384 个槽按照节点数量进行平均分配,由节点进行管理。

对每个 key 按照 CRC16 规则进行 hash 运算。

把 hash 结果对 16383 进行取余。

把余数发送给 Redis 节点。

节点接收到数据,验证是否在自己管理的槽编号的范围。

如果在自己管理的槽编号范围内,则把数据保存到数据槽中,然后返回执行结果。

如果在自己管理的槽编号范围外,则会把数据发送给正确的节点,由正确的节点来把数据保存在对应的槽中。

需要注意的是:Redis Cluster 的节点之间会共享消息,每个节点都会知道是哪个节点负责哪个范围内的数据槽。

虚拟槽分布方式中,由于每个节点管理一部分数据槽,数据保存到数据槽中。当节点扩容或者缩容时,对数据槽进行重新分配迁移即可,数据不会丢失。

虚拟槽分区特点:

使用服务端管理节点、槽、数据。例如 Redis Cluster。

可以对数据打散,又可以保证数据分布均匀

2. Redis Cluster 架构

1)节点

Redis Cluster 是分布式架构的:即 Redis Cluster 中有多个节点,每个节点都负责进行数据读写操作。

每个节点之间会进行通信。

2)meet 操作

meet 操作是节点之间完成相互通信的基础,meet 操作有一定的频率和规则。

3173f1ec-d4b6-11ef-9310-92fbcf53809c.png

所有的 Redis 节点彼此互连,内部使用二进制协议优化传输速度和带宽。

客户端与 Redis 节点直连,不需要中间 proxy 层。客户端不需要连接集群所有节点,连接集群中任何一个可用节点即可。

3)分配槽

把 16384 个槽平均分配给节点进行管理,每个节点只能对自己负责的槽进行读写操作。

由于每个节点之间都彼此通信,每个节点都知道其他节点负责管理的槽范围。

31b7f6c6-d4b6-11ef-9310-92fbcf53809c.png

客户端访问任意节点时,对数据 key 按照 CRC16 规则进行 hash 运算,然后将运算结果对 16383 进行取余,如果余数在当前访问的节点管理的槽范围内,则直接返回对应的数据
如果不在当前节点负责管理的槽范围内,则会告诉客户端去哪个节点获取数据,由客户端去正确的节点获取数据。

4)复制

Cluster 自动做 master+slave 的主从复制和读写分离、master+slave 高可用和主备切换、支持多个 master 的 hash slot 即数据分布式存储。

31d26646-d4b6-11ef-9310-92fbcf53809c.png

3. 故障转移

集群自动故障转移过程分为故障发现和节点恢复。节点下线分为主观下线和客观下线:

当超过半数的主节点(master)认为故障节点为主观下线时,则标记这个节点为客观下线状态。

从节点(slave)负责对客观下线的主节点(master)触发故障恢复流程,保证集群的可用性。

节点失效机制:选举

31ef19da-d4b6-11ef-9310-92fbcf53809c.png

ping/pong 模式

Redis Cluster 通过 ping/pong 消息实现故障发现。

ping/pong 不仅能传递节点与槽的对应消息,也能传递其他状态,比如:节点主从状态,节点故障等。

故障发现就是通过这种模式来实现,分为主观下线和客观下线。

集群中所有 master 参与投票,如果半数以上 master 节点与其中一个 master 节点通信超时(cluster-node-timeout),则认为该 master 节点挂掉。

什么时候整个集群不可用(cluster_state:fail)?

如果集群任意 master 挂掉,且当前 master 没有 slave,则集群进入 fail 状态。也可以理解成集群的 [0-16383] slot 映射不完全时进入 fail 状态。

如果集群超过半数以上 master 挂掉,无论是否有 slave,集群进入 fail 状态。

链接:https://www.cnblogs.com/juno3550/p/14840433.html

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Cluster
    +关注

    关注

    0

    文章

    9

    浏览量

    9276
  • Redis
    +关注

    关注

    0

    文章

    387

    浏览量

    11500

原文标题:3. 故障转移

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Redis集群部署配置详解

    Redis集群是一种分布式Redis解决方案,通过数据分片和主从复制实现高可用性和横向扩展。集群将整个数据集分割成16384个哈希槽(hash slots),每个节点负责一部分槽位。
    的头像 发表于 07-17 11:04 ?231次阅读

    Redis集群部署与性能优化实战

    Redis作为高性能的内存数据库,在现代互联网架构中扮演着关键角色。作为运维工程师,掌握Redis的部署、配置和优化技能至关重要。本文将从实战角度出发,详细介绍Redis集群的搭建、性能优化以及监控运维的核心技术。
    的头像 发表于 07-08 17:56 ?278次阅读

    【经验分享】在Omni3576上编译Redis-8.0.2源码,并安装及性能测试

    本文首先介绍Redis是什么,然后介绍如何在Omni3576上编译Redis-8.0.2源码,以及从源码编译、安装Redis,最后介绍如何在Omni3576上运行Redis性能测试,并
    的头像 发表于 06-05 08:05 ?376次阅读
    【经验分享】在Omni3576上编译<b class='flag-5'>Redis</b>-8.0.2源码,并安装及性能测试

    【幸狐Omni3576边缘计算套件试用体验】Redis最新8.0.2版本源码安装及性能测试

    本文首先介绍Redis是什么,然后介绍如何在Omni3576上编译Redis-8.0.2源码,以及从源码编译、安装Redis,最后介绍如何在Omni3576上运行Redis性能测试,并
    发表于 06-03 01:28

    Redis 再次开源!

    “ ?Redis 现已采用 AGPLv3 开源许可证。? ” Redis CEO 的 Blog 以下是 Redis CEO Rowan Trollope 的 Blog: 像 AWS 和 GCP 这样
    的头像 发表于 05-06 18:26 ?432次阅读

    redis三种集群方案详解

    Redis中提供的集群方案总共有三种(一般一个redis节点不超过10G内存)。
    的头像 发表于 03-31 10:46 ?783次阅读
    <b class='flag-5'>redis</b>三种集群方案详解

    Redis实战笔记

    在目前的技术选型中,Redis 俨然已经成为了系统高性能缓存方案的事实标准,因此现在?Redis 也成为了后端开发的基本技能树之一。 ? 基于上述情况,今天给大家分享一份?杰哥?亲笔撰写的内部
    的头像 发表于 02-09 09:12 ?427次阅读
    <b class='flag-5'>Redis</b>实战笔记

    华为云 Flexus X 加速 Redis 案例实践与详解

    Redis 加速镜像,更是为开发者提供了极大的便利。本文将详细介绍如何利用华为云 Flexus X 实例自带的 Redis 镜像,快速部署并配置 Redis,以及通过实际案例展示其便捷性和高效性。 一、华为云 Flexus
    的头像 发表于 01-23 17:52 ?365次阅读
    华为云 Flexus X 加速 <b class='flag-5'>Redis</b> 案例实践与详解

    云服务器 Flexus X 实例,Docker 集成搭建 Redis 集群

    Redis 集群是一种分布式的 Redis 解决方案,能够在多个节点之间分片存储数据,实现水平扩展和高可用性。与传统的主从架构不同,Redis 集群支持数据自动分片、主节点故障自动切换
    的头像 发表于 01-13 13:37 ?403次阅读
    云服务器 Flexus X 实例,Docker 集成搭建 <b class='flag-5'>Redis</b> 集群

    华为云Flexus X实例,Redis性能加速评测及对比

    随着云计算技术的飞速发展,Redis 作为一种高性能的内存数据库,在各种应用场景中发挥着越来越重要的作用。为了满足不同用户对 Redis 性能的高要求,华为云推出了 Flexus X 实例,并提供了
    的头像 发表于 12-29 15:47 ?556次阅读
    华为云Flexus X实例,<b class='flag-5'>Redis</b>性能加速评测及对比

    华为云 Flexus X 轻松实现 Redis 一主多从高效部署

    前言 ????????华为云 Flexus?X 是一款专为高性能计算设计的云服务器实例,其搭载的 X-Turbo 加速技术和智能应用调优算法,能够大幅提升 Redis 的处理能力和响应速度。此外
    的头像 发表于 12-27 13:45 ?509次阅读
    华为云 Flexus X 轻松实现 <b class='flag-5'>Redis</b> 一主多从高效部署

    Redis使用重要的两个机制:Reids持久化和主从复制

    今天这篇文章,我们一起了解 Redis 使用中非常重要的两个机制:Reids 持久化和主从复制。 我们都知道Redis是一个内存数据库,在学习主从同步之前,我们首先要想到 Redis 是如何做数据
    的头像 发表于 12-18 10:33 ?446次阅读
    <b class='flag-5'>Redis</b>使用重要的两个机制:Reids持久化和主从复制

    Redis缓存与Memcached的比较

    Redis和Memcached都是广泛使用的内存数据存储系统,它们主要用于提高应用程序的性能,通过减少对数据库的直接访问来加速数据检索。以下是对Redis和Memcached的比较,涵盖了它们的一些
    的头像 发表于 12-18 09:33 ?639次阅读

    CSP LED切割前如何转移到UV膜上

    倒装芯片底部与高温胶膜接触,封装后如何将芯片底部与高温膜分离,然后转移到UV膜上?
    发表于 10-29 23:23

    恒讯科技分析:云数据库rds和redis区别是什么如何选择?

    云数据库RDS(Relational Database Service)和Redis是两种不同类型的数据库服务,它们有各自的特点和适用场景: 1、数据模型:RDS是一种关系型数据库服务,通常用于存储
    的头像 发表于 08-19 15:31 ?883次阅读