Redis集群之数据分片
一、redis5.0简介
2018年十月Redis
发布了稳定版本的5.0版本,推出了各种新特性,其中一点是放弃Ruby
的集群方式,
改为使用C语言编写的redis-cli
的方式,使集群的构建方式复杂度大大降低。 、
本章目标:在一台Linux服务器上搭建有6个节点(3主3从)的Redis集群。(因为redis选举机制原因,集群最低6个节点,不然无法创建)
主从集群(master-slave):
主从结构的redis由主节点负责读写操作,从节点负责读操作;
简单的主从集群有个问题,就是主节点挂了之后,无法重新选举新的节点作为主节点进行写操作,导致服务不可用。
因此,需要一种机制对主节点挂了的集群进行监控,并且重新选举主节点,这就是哨兵的作用。
哨兵主从集群(master-slave-sentinel)
由哨兵来检测主节点是否死亡,每个哨兵检测都会返回true或者false,以少数服从多数的原则来判断主节点是否死亡,如果判定死亡,从节点就会顶上。
缺点:
如果每个从节点配置都不一样,例如salve1只有20g存储空间,而salve2有10g,主从节点数据都是同步的,如果数据超过最低配置,他会以最低配置(salve2)的来存储,不会再继续加数据,从而浪费了其他节点的空间。
数据分片(redis-cluster)
尽管可以使用哨兵主从集群实现可用性保证,但是这种实现方式每个节点的数据都是全量复制,数据存放量存在着局限性,受限于内存最小的节点,因此考虑采用数据分片的方式,来实现存储,这个就是redis-cluster
redis-cluster的优势:
-
官方推荐,毋庸置疑。
-
去中心化,集群最大可增加1000个节点,性能随节点增加而线性扩展。
-
管理方便,后续可自行增加或摘除节点,移动分槽等等。
-
简单,易上手。
简单说一下原理
redis cluster
在设计的时候,就考虑到了去中心化,去中间件,也就是说,集群中的每个节点都是平等的关系,都是对等的。
redis cluster
为了保证数据的高可用性,加入了主从模式,一个主节点对应一个或多个从节点。
从节点则是从主节点拉取数据备份,当这个主节点挂掉后,就会有这个从节点选取一个来充当主节点,从而保证集群不会挂掉。
每个节点都保存各自的数据和整个集群的状态。每个节点都和其他所有节点连接,而且这些连接保持活跃,这样就保证了我们只需要连接集群中的任意一个节点,就可以获取到其他节点的数据。Redis集群没有并使用传统的一致性哈希来分配数据,而是采用另外一种叫做哈希槽 (
hash slot
)的方式来分配的。
redis cluster
默认分配了 16384 个slot
,当我们set
一个key
时,会用CRC16
算法来取模得到所属的slot
,
然后将这个key 分到哈希槽区间的节点上,具体算法就是:CRC16(key) % 16384
。
二、redis-cluster(数据分片)集群步骤
1)安装环境为CentOS7版
这里不做申明
2)预安装软件
yum install gcc //#避免待会儿make时由于没安装gcc失败,提前安装gcc
yum install make //#避免make无法执行
注1:可通过如下两种方式检查软件是否已安装
gcc -v
make -v
3)下载redis 5.0–粗略讲解
创建redis安装目录
安装两种方式:
在线下载
wget http://download.redis.io/releases/redis-5.0.0.tar.gz
离线上传
将预先下载好的redis-5.0.0.jar上传到安装目录下
解压redis
tar -zxf redis-5.0.0.tar.gz
编译及安装redis
make