Redis集群模式「终于解决」

Redis集群模式「终于解决」1、常见的三种数据的集群存储模式 1. full mirror:全量镜像模式,单纯备份模式,各个节点数据相同,都包含了全量数据,仅主节点可写,保证了数据冗余和读的负载均衡。数据安全性高,横向扩展能力差

Redis集群模式

1、常见的三种数据的集群存储模式

  1. full-mirror:全量镜像模式,单纯备份模式,各个节点数据相同,都包含了全量数据,仅主节点可写,保证了数据冗余和读的负载均衡。数据安全性高,横向扩展能力差,资源利用率不高。

  2. pure-sharding:数据分片,每个节点的数据不相同,所有节点中数据的并集就是全量数据。横向扩展能力强,资源利用率高,但是数据安全性低。

  3. mirrored-sharding:结合两种模式的优点,既满足高数据安全性要求,又能实现规模的横向扩展。

2、Redis集群的必要性和分类

  • 必要性:单实例服务存在单点故障,集群模式能提高服务的整体可用性。

  • 分类:

    • 主从复制(Replication):数据在主从间全量镜像,仅主节点可写,所有节点都可读,但仍不具备横向扩展能力。

      • 静态主从:在启动服务时,在配置文件中指定,给slave指定其从属的master,可以实现数据的备份和读操作的负载均衡,但是缺乏对master实例的高可用保障。

        redis-server –port 6380 slavaof 127.0.0.1 6379 //将6379配置为本实例的master

        还可以在服务运行过程中通过客户端命令手动改变实例的角色:

        redis > slaveof 127.0.0.1 6381 //将本实例的master改为6381

        redis > slaveof no one //将本实例从主从结构中独立出来,但会保留之前的数据

      • 利用哨兵(Sentinel )实现高可用:每个服务实例都启动一个哨兵守护进程,负责集群中节点状态的监控和主节点的选举,此时主节点也就实现了高可用。哨兵可以单实例管理单集群,也可以单实例管理多集群,还可以组成无中心哨兵集群,哨兵集群内部使用paxos理论进行协调管理。

    • 分布式集群(Cluster):

      • twemproxy:twitter开发的一个针对key提供路由功能的代理曾,代理层上方时客户端,下方是多个Redis服务实例,形成分片集群,客户端针对key的读写操作都必须经过代理层路由到分片集群中指定的服务实例上(key的hashcode对节点数量取模),这就实现了集群的横向扩展。

        • 缺点:
        1. 存在数据倾斜问题,一旦发生倾斜将不能成分利用集群资源,消除倾斜需要额外设计算法,耗时耗力。
        2. 代理层存在单点缺陷。
        3. 节点数量变动后必须对历史数据全量再分发。
      • 官方集群方案(3.x后):将整个集群划分为16384个逻辑slot,每个服务实例集群构成master-slave分片,各分片各自来认领一批逻辑slot。所有的key都会被路由到某个逻辑slot上,计算公式为【slot_num = crc16(key) % 16384】,式中crc16函数是16位循环冗余校验和函数。

        1. 当需要横向扩容时,旧节点让出一部分slot给新节点,这部分数据也随slot迁移到新节点上,这就避免了全量数据的重分发。

        2. 当发生数据倾斜时可以手动瓜分较重节点上的slot,实现数据的分摊,从而解决了倾斜问题。

        3. 每个分片都是一个master-slave结构,保证本分片内的高可用(当前模式将sentinel进程融合到了server进程中,方便分片内节点的状态和角色管理)。
        4. 每个分片的主节点都具有slot计算能力,当某个主节点接收到一个key的添加时,都会计算其应该归属的slot,如果恰好命中本分片,就存储数据,如果未命中则会告诉客户端让其重新计算。读数据时,分片主节点会计算key的slot,如果恰好命中则返回value,如果未命中则会返给正确的存储节点位置。
        5. 部署时至少要启动6各节点,三个分片,每个分片内一主一从。

3、Redis主从复制(哨兵模式)

  1. 一个Redis主服务拥有多个副本服务,形成master-slave结构。
  2. 只要网络正常,master会一直将自己的数据更新同步给slave,保持主从数据一致。
  3. 只有master能接收写命令,master和slave都可以接收读命令,实现读操作的负载均衡。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/9903.html

(0)
上一篇 2023-01-30
下一篇 2023-01-30

相关推荐

  • 利用Python库arcpy清除选择集

    利用Python库arcpy清除选择集arcpy库是一个用于在ArcGIS Desktop中进行地理空间数据处理和分析的Python库。它为Python程序员提供了大量的工具和函数,以及与ArcGIS中的各种地理空间数据格式交互的能力。通过使用arcpy库,可以进行各种类型的地理空间数据处理,如数据格式转换、空间分析、地图生成和数据可视化等。

    2024-01-31
    99
  • Python面向对象编程

    Python面向对象编程随着软件开发的发展,面向对象的编程模式已经成为主流,各种编程语言也都提供了完善的面向对象编程支持。Python作为一门广泛应用于计算机科学、数据分析等领域的语言,在面向对象编程领域也有着丰富的特性和应用。

    2024-05-19
    68
  • MySQL数据库表的模糊/多行/分组/排序/分页查询以及字mysql数据类型的讲解—讲解二[通俗易懂]

    MySQL数据库表的模糊/多行/分组/排序/分页查询以及字mysql数据类型的讲解—讲解二[通俗易懂]前言:今天给大家讲的是:MySQL数据库表的模糊/多行/分组/排序/分页查询以及mysql数据类型的讲解,当然如果你对数据库的基础操作–对库的创建/对表的增删改查有兴趣,可以去看看我的这篇文章–…

    2023-02-09
    144
  • PostgreSQLとOracleのsql差异

    PostgreSQLとOracleのsql差异
    PostgreSQLとOracleのsql差异 1.rownum (1)Oracle分页查询使用rownum,PostgreSQL使用limit offse…

    2023-04-06
    161
  • Python编程实例:用Python解析数据

    Python编程实例:用Python解析数据数据解析是指将一些结构化或半结构化数据从一种形式转换为另一种形式的过程。其中结构化数据与半结构化数据是指具有非常明显固定格式的数据,例如XML、JSON等;而非结构化数据则是指不具有固定格式的数据,例如文本、图片等。

    2024-03-25
    80
  • Python解压操作详解

    Python解压操作详解在Python中,如果我们需要读取一个压缩文件,或者需要将多个文件压缩成一个文件,这时候就需要用到Python的解压操作,它可以帮助我们完成这些操作。

    2024-06-07
    58
  • 哪个网盘文件分享做的最好?「终于解决」

    哪个网盘文件分享做的最好?「终于解决」哪个网盘文件分享做的最好?随着互联网科技的发展,特别是移动互联网的飞速发展,互联网已成为我们生活、工作不可缺少的重要组成部分。我们在享受互联网带来的各种便捷,然而互联网的安全也严重干扰了我们的生活。…

    2023-04-12
    156
  • PS高反差保留操作详解

    PS高反差保留操作详解Photoshop是广泛使用的图像编辑软件之一。它提供了大量的工具和功能,可用于编辑和修饰图像。其中,高反差保留是一种常用的操作,可以帮助图像产生较强的对比度和轮廓线条,从而使图像更加生动和有趣。

    2024-04-15
    83

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注