redis集群之两台master的cluster

redis 3.0版本之后,提供了cluster,具体的配置过程这里不介绍了,这篇文章讲的很详细了——《redis-cluster研究和使用

这里先说下3.0.3版本cluster的坑:

1、不支持select db

2、不支持多键操作,例如sinter,各种hashtable的操作(这也是直接导致我们的项目暂时放弃redis cluster),会报key不在同一个slot上错

3、cluster里的从库貌似就是个摆设,不能读写分离

切入正题,本文主要讲解如何突破官方规定,集群的master数量必须大于3的限制。

解决的原理就是:移动slot

slot是什么呢?

Hash Slot
Redis集群没有使用一致性hash,而是引入了哈希槽(Hash Slot)的概念。
Redis集群一共有16384个哈希槽,每个key通过CRC16校验后对16384取模来决定对应哪个槽。
HASH_SLOT = CRC16(key) mod 16384

可以理解为一个slot就是一个分库

每个主节点都负责处理 16384 个哈希槽的其中一部分,由于Redis 集群的key被分割为 16384 个slot, 所以集群的最大节点数量也是 16384 个。推荐的最大节点数量为1000个左右。
节点和哈希槽之间的对应关系在搭建集群时配置,集群使用中也支持动态迁移。

概念清楚了后,利用官方的redis-trib.rb自动建立集群关系(假设ABC三个节点),然后手动移动C节点上的slot(redis-trib.rb reshard),分配给A和B,再删除C节点,就可以实现两个节点redis cluster了。

主要命令如下

这样,C节点上的slot全部移动到了A节点上,然后就可以用redis-trib.rb del-node命令删除C节点了,然后再用同样的方法把A节点上的2500个slot分配给B,大功告成。

 

 

声明:如未作说明,则本文为 渣滓洞【解旻的博客】 原创。转载务必注明出处
注意:转载须保留全文,如需修改请联系作者

本文永久地址:http://xieminis.me/?p=360