Redis的cluster集群

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/cmqwan/article/details/97127702

Redis

集群

使用redis自带的cluster架构可以支撑高并发高可用海量数据

数据分布算法

hash余数算法

一致性hash

  1. 圆环,以手表为例。假设为12个格子
  2. 按照机器的id进行hash,A找到一个位置(比如3点),B找到一个位置(比如7点),C找到一个位置10点
  3. 那么后面数据在3-7范围里面,就放到A节点上,7-10的就放到B节点上面。
  4. 如果其中一个挂掉了,就会将这些数据分到前一个节点上
  5. 优化:每一个节点又同时分成多个,这样避免挂掉之后,数据大量进入。 比如A节点改成369、B节点147

hash slot

  1. 可以看成一个hashmap,有16384个桶
  2. 每个节点负责 16384/节点总数 个桶
  3. 数据进来的时候,会通过 CRC16算法对16384取余,分配到不同的节点去

维护集群元数据

CAP

一致性、可用性、分区容错

集中式存储(基于zookeeper)

  1. 将所有的元数据存在走zookeeper中,有问题能直接反馈
  2. 缺点:集中、元数据存储压力

gossip协议

  1. 互相传播、将更新陆续传到各个节点
  2. 所有节点都持有一份元数据,数据变更,会慢慢传播到各个节点
  3. 一次最多发给5个节点。5个没有通信的节点
  4. 缺点:延时、滞后
通信端口

原来的端口加上10000

几个指令
ping
  1. 发送自己维护的元数据给其他节点
  2. 一次最多选择5个节点(最久没有通信的)
  3. 如果某个节点太久没有通信,则也会立即发给他
pong

收到ping指令后返回的数据,包含自身的状态信息

fail

发现某个节点挂掉的话,就发送这个指令到其他节点

展开阅读全文

没有更多推荐了,返回首页