redis-cluster

251 阅读2分钟

集群节点创建

redis-cli --cluster create --cluster-replicas 1 192.168.150.101:7001 192.168.150.101:7002 192.168.150.101:7003 192.168.150.101:8001 192.168.150.101:8002 192.168.150.101:8003
  • redis-cli --cluster或者./redis-trib.rb:代表集群操作命令
  • create:代表是创建集群
  • --replicas 1或者--cluster-replicas 1 :指定集群中每个master的副本个数为1,此时节点总数 ÷ (replicas + 1) 得到的就是master的数量。因此节点列表中的前n个就是master,其它节点都是slave节点,随机分配到不同master(相当于对半拆分集群节点)

这里输入yes,则集群开始创建

集群命令状态查看

redis-cli -p 7001 cluster nodes

集群操作时

redis-cli -c -p 7001

redis分片集群

1.散列插槽

Redis会把每一个master节点映射到0~16383共16384个插槽(hash slot)上

数据key不是与节点绑定,而是与插槽绑定。redis会根据key的有效部分计算插槽值,分两种情况:

  • key中包含"{}",且“{}”中至少包含1个字符,“{}”中的部分是有效部分
  • key中不包含“{}”,整个key都是有效部分

例如:key是self,那么就根据self计算,如果是{itcast}self,则根据itcast计算。计算方式是利用CRC16算法得到一个hash值,然后对16384取余,得到的结果就是slot值(这样可以使相同的数据通过key计算的方式散列在相同的插槽中,节省了节点切换带来的性能损耗问题)

2.集群伸缩

集群新增节点-新增的节点默认为master,且分配的插槽为0

redis-cli --cluster add-node  192.168.150.101:7004 192.168.150.101:7001

插槽移动:redis-cli reshard

3手动故障转移

利用cluster failover命令可以手动让集群中的某个master宕机,切换到执行cluster failover命令的这个slave节点,实现无感知的数据迁移。其流程如下:

这种failover命令可以指定三种模式:

  • 缺省:默认的流程
  • force:省略了对offset的一致性校验
  • takeover:直接执行第5歩,忽略数据一致性、忽略master状态和其它master的意见