Redis[8] Redis6.X节点高可用之Cluster集群

本文整理自小d课堂笔记和java进阶仓库,如有雷同,大部分是人家写的

java进阶仓库:https://doocs.github.io/advanced-java/#/

Redis6.X节点高可用之Cluster集群

Cluster数据分片和虚拟哈希槽介绍

  • 背景

    • 主节点的写能力和存储能力受限

    • 单台机器无法满足需求,因此把数据分散存储到多个机器

    • 类似案例:mysql分库分表

  • 常见的数据分区算法

    • 哈希取模
      • 对选择的 partitioning key 计算其哈希值,得到的哈希值就是对应的分区
    • 范围分片
      • 通过确定分区键是否在某个范围内来选择分区
    • 一致性Hash分区
    • redis cluster集群没有采用一致性哈希方案,而是采用【数据分片】中的哈希槽来进行数据存储与读取的
  • 什么是Redis的哈希槽 slot

    • Redis集群预分好16384个槽,当需要在 Redis 集群中放置一个 key-value 时,根据 CRC16(key) mod 16384的值,决定将一个key放到哪个桶中
  • 大体流程

    • 假设主节点的数量为3,将16384个槽位按照【用户自己的规则】去分配这3个节点,每个节点复制一部分槽位
      • 节点1的槽位区间范围为0-5460
      • 节点2的槽位区间范围为5461-10922
      • 节点3的槽位区间范围为10923-16383
      • 注意:从节点是没有槽位的,只有主节点才有
    • 存储查找
      • 对要存储查找的键进行crc16哈希运算,得到一个值,并取模16384,判断这个值在哪个节点的范围区间
      • 假设crc16(“test_key”)%16384=3000,就是节点一
      • crc16算法不是简单的hash算法,是一种校验算法
  • 使用哈希槽的好处就在于可以方便的添加或移除节点。

    • 当需要增加节点时,只需要把其他节点的某些哈希槽挪到新节点就可以了;
    • 当需要移除节点时,只需要把移除节点上的哈希槽挪到其他节点就行了

Cluster集群

  • 说明

    • 旧版本的需要使用ruby语言进行构建,新版5之后直接用redis-cli即可
    • 6个节点,三主双从,主从节点会自动分配,不是人工指定
    • 主节点故障后,从节点会替换主节点
  • 注意点:

    • 把之前的rdb、aof文件删除
  • 节点(网络安全组开放端口)

  • 启动6个节点

./redis-server ../conf/cluster/redis1.conf
./redis-server ../conf/cluster/redis2.conf
./redis-server ../conf/cluster/redis3.conf
./redis-server ../conf/cluster/redis4.conf
./redis-server ../conf/cluster/redis5.conf
./redis-server ../conf/cluster/redis6.conf
  • 加入集群(其中一个节点执行即可)
    • –cluster 构建集群全部节点信息
    • –cluster-replicas 1 主从节点的比例,1表示1主1从的方式

高可用架

构总结

  • 主从模式:读写分离,备份,一个Master可以有多个Slaves
  • 哨兵sentinel:监控,自动转移,哨兵发现主服务器挂了后,就会从slave中重新选举一个主服务器
  • 集群: 为了解决单机Redis容量有限的问题,将数据按一定的规则分配到多台机器,内存/QPS不受限于单机,提高并发量。

おすすめ

転載: blog.csdn.net/qq_41852212/article/details/121296524
おすすめ