Redis分片集群的原理

Redis从3.0版本开始加入了Cluster集群模式,实现了Redis的分布式存储,每台Redis节点服务器存储不同的数据。Cluster模式是为了解决单机Redis容量有限的问题,将数据按一定的规则分配到多台机器,内存和QPS不再受限于单机。Cluster是一种服务器数据分片技术(分片和路由都是在服务端实现),采用多主多从,每个分区都是由一个Redis主机和多个从机组成,片区和片区之间是互相平行的。Redis Cluster集群采用P2P模式,完全去中心化。
Redis Cluster采用虚拟哈希槽分区而非一致性hash算法,预先分配一些卡槽,所有的键根据哈希函数映射到这些槽内,每一个分区内的master节点负责维护一部分槽以及槽所映射的键值数据。
Redis分片集群的搭建
集群环境准备
1、六台Redis3节点服务器,用来实现三主三从的Redis分片集群。
- Redis1:节点服务器,IP地址为192.168.238.71。
- Redis2:节点服务器,IP地址为192.168.238.72。
- Redis3:节点服务器,IP地址为192.168.238.73。
- Redis4:节点服务器,IP地址为192.168.238.74。
- Redis5:节点服务器,IP地址为192.168.238.75。
- Redis6:节点服务器,IP地址为192.168.238.76。
2、开放所有节点的6379和16379端口,redis端口加10000为集群通信端口。

3、在任意一台节点服务器安装ruby环境并下载搭建集群使用的ruby命令。
3.1、安装ruby环境和redis接口读写的依赖包。

3.2、搭建集群使用的ruby命令在Redis源码包中,所以需要先下载Redis3源码包。

3.3、解压Redis3源码包。

分片集群的配置
1、修改三台哨兵服务器的IP地址绑定、关闭保护模式并配置集群参数,主要配置项如下:
- bind:只允许绑定的IP地址连接。
- protected-mode:保护模式,默认为yes。
- cluster-enabled:是否启用集群模式。
- cluster-config-file:集群配置文件,由系统自动维护。
- cluster-node-timeout:节点通信超时时间。
1.1、将bind 127.0.0.1修改为bind 0.0.0.0,允许任意的主机连接。

1.2、将protected-mode yes修改为protected-mode no,关闭保护模式。

1.3、新增集群相关配置。

1.4、查看配置文件。
1.4.1、查看配置文件头部修改内容。

1.4.2、查看配置文件尾部新增内容。

2、配置完毕,重启Redis服务。

3、创建Redis分片集群。
3.1、使用源代码中的ruby脚本redis-trib.rb创建Redis集群,主要参数如下:
- create:创建集群。
- −−replicas 1:集群主从机数量比值,1表示主从机数量比值为1:1。

3.2、系统输出主从节点分配方案,输入yes确认。

3.3、最后输出插槽分配方案。

4、从任意节点服务器登录,查看集群状态。登录时需使用−c参数,表示登录集群。
4.1、登录任意节点服务器,查看集群信息。

4.2、登录任意节点服务器,查看节点信息。

分片集群的测试
1、从任意节点服务器登录并输入数据,集群能够根据哈希槽自动切换至对应节点服务器。

2、读取数据,同样集群也能够根据哈希槽自动切换至对应节点服务器。
