redis集群系列一

本文介绍了Redis集群的数据分布,重点讲解了哈希分区,包括节点取余、一致性哈希和虚拟槽分区,并详细阐述了Redis集群采用的虚拟槽分区策略。此外,文章还探讨了集群的组建过程,如节点握手、槽位分配和主从关系修正,以及节点间的通信机制,如Gossip协议和节点选择策略。
摘要由CSDN通过智能技术生成

redis集群

redis集群模式是分布式存储的一个case。

数据分布

分布式数据库要解决将一堆数据按照分区规则映射到不同节点上。常见的分区规则有哈希分区和顺序分区。

分区方式 特点 产品
哈希分区 离散度好;数据分布与业务无关 redis cluster、cassandra
顺序分区 离散度容易倾斜;数据分布与业务有关;可以顺序访问 HBase、Hypertable

哈希分区

redis集群使用的是哈希分区,常见的哈希分区有以下几种:

  • 节点取余
    • hash(key)/N, 但是N变化会导致结果变化,所以当扩容和缩容过程中需要重新计算key的归宿。
    • 一般如果使用该方法会翻倍扩容,减少不必要的key搬迁
  • 一致性哈希分区
    • 为每一个节点分配一个token(数值范围在0-2^32),token会构成一个哈希环
    • 一般会根据key计算一个hash值,然后顺时针找到第一个大于等于hash值的token节点
    • 优点:增减节点只影响相邻节点上的数据
    • 缺点:少量节点的增减会大范围影响数据映射;一般要增减一辈才可以保证数据和负载均衡
  • 虚拟槽分区
    • 将数据映射到一个固定范围的整数集合中,比如redis是0-16383
    • 较多的槽位是为了能较好的拆分数据和集群扩展

redis集群的哈希分区

redis集群所采用的虚拟槽分区

  • 槽的计算方法:CRC16(key)& 16383
  • 优点:节点、槽、数据具有映射关系;节点来维护槽的映射关系,客户端不需要关心

redis集群的功能限制

  1. key批量操作,需要在同一个slot
  2. 多个key需要在一个节点上,才可以使用事务
  3. key是数据分布的最小单元
  4. 单机模式的redis可以支持16个数据库,集群模式只有1个数据库(db 0)
  5. 从节点只能复制主节点的数据

组建集群

集群节点

  1. 至少6个节点,每个节点需要开启集群模式
  2. 每个节点有redis配置文件和集群配置文件
  3. 集群配置文件
    1. 文件路径及名称可以通过cluster-config-file设置
    2. 当集群内节点的信息发生变化,比如添加节点、节点下线、故障转移等,节点会自动保存集群状态到配置文件,如下
    3. 配置文件中节点id是一个40位16进制字符串。节点id在集群初始化的过程中只会创建一次,节点重启之后会重用,redis的运行id每次重启都会变化
5a1acfc7c7c914232e41c4adac0219023843517c 192.168.5.52:6379@16379 slave e49c63b81bc667716ba085a4de7d9f9b3ae1e7aa 0 1652338370000 2 connected
77c118e5cae9f962e4e8b17647d79d36f190d221 192.168.3.101:6379@16379 master - 0 1652338369776 4 connected 5461-10921
1e0a38848c0788eaf74f34e1416cab221371a0f9 192.168.3.102:6379@16379 slave 973ca4aac1373a46f8218e3c1838a1badcc73ffe 0 1652338370777 5 connected
e49c63b81bc667716ba085a4de7d9f9b3ae1e7aa 192.168.4.117:6379@16379 master - 0 1652338370000 0 connected 10922-16383
9a1d88f575f705c32c93e8a3e31a2c328c55567b 192.168.4.122:6379@16379 slave 77c118e5cae9f962e4e8b17647d79d36f190d221 0 1652338371782 4 connected
973ca4aac1373a46f8218e3c1838a1badcc73ffe 192.168.5.51:6379@16379 myself,master - 0 1652338367000 1 connected 0-5460
vars currentEpoch 5 lastVoteEpoch 0

节点握手

  1. 节点之间相互认识通过gossip协议
  2. 客户端会向节点A发起cluster meet B-ip B-port的命令;cluster meet属于异步操作,执行之后会立刻返回给客户端
+---------------+               +---------------+
|               |               |               |
|               |               |               |
|               |     meet      |               |
|               |<------------->|               |
|               |     pong      |               |
|               |               |               |
|    nodeA      |     ping      |     nodeB     |
|               |<-------------&g
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值