Redis 最为突出的特性就是:执行命令的速度非常快(原因是所有数据都存放在内存中)。但是单机 Redis 总会遇到瓶颈的,比如:并发、流量、内存等。在 Redis 3.0 之前,官方并没有提供集群方案,在访问量比较大的情况,基本使用的是 Twemproxy、Codis 等集群方案。直到 Redis 3.0,官方推出了 Redis Cluster,实现了切片集群方案。今天就来聊聊 Redis Cluster。
1 虚拟槽
Redis Cluster 采用虚拟槽分区,一个集群有 16384 个虚拟槽,这些虚拟槽类似数据分区,每个键值对都会根据它的 key,按照 CRC16 算法计算一个 16bit 的值,然后再用这个 16bit 的值对 16384 取模,通过模映射到一个虚拟槽中。
Redis Cluster 使用虚拟槽,可以解耦数据和节点之间的关系,大大简化了节点扩缩容的难度,并且重要的是扩缩容不影响数据一致性。
2 集群搭建
2.1 安装 Redis
安装 6 个 Redis 实例(本节的版本为:5.0.7,6 个实例在同一台 Centos7 上部署的,端口分配是:7001 到 7006),Redis 安装可以参考官方文档(https://redis.io/download)。
2.2 修改配置文件
在 Redis 的配置文件中,加入如下参数,开启 Redis 集群功能。
cluster-enabled yes
cluster-config-file /data/redis{port}/data/nodes{port}.conf
cluster-node-timeout 5000
简单介绍上面三个参数的含义:
cluster-enabled:是否开启集群模式
cluster-config-file:集群内部配置文件
cluster-node-timeout:节点超时时间,单位毫秒
2.3 创建集群
部署 Redis Cluster 方案时,可以使用 cluster create 命令创建集群,此时,Redis 会自动把这些槽平均分布在集群实例上。
当然,如果想自定义每个实例的槽分配,也可以使用 cluster meet 命令手动建立实例间的连接,形成集群,再使用 cluster addslots 命令,指定每个实例上的哈希槽个数(比如集群中配置不统一的场景)。要注意的是,在手动分配哈希槽时,需要把 16384