详解Redis Cluster集群

Posted toutou

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了详解Redis Cluster集群相关的知识,希望对你有一定的参考价值。

Redis Cluster是Redis的分布式解决方案,在Redis 3.0版本正式推出的,有效解决了Redis分布式方面的需求。当遇到单机内存、并发、流量等瓶颈时,可以采用Cluster架构达到负载均衡的目的。分布式集群首要解决把整个数据集按照分区规则映射到多个节点的问题,即把数据集划分到多个节点上,每个节点负责整个数据的一个子集。

v功能介绍

1.0 数据自动分片

集群中每个节点都会负责一定数量的slot,每个key会映射到一个具体的slot,通过这种方式就可能找到key具体保存在哪个节点上了。

1.1 提供hash tags功能

通过hash tag功能可以将多个不同key映射到同一个slot上,这样就能够提供multi-key操作,hash tag的使用的方式是在key中包含“{}”,这样只有在“{...}”中字串被用于hash计算。

1.2 自动失效转移和手动失效转移

1.3 减少硬件成本和运维成本。

vRedis Cluster目标

高性能
高可用
线性扩容

v配置Redis Cluster

创建目录cluster,并为6个实例创建各自的目录,这6个目录用来存放6个实例,后面将使用这6个实例组成集群。3个Master和3个Slave

1.0 创建目录

mkdir redis-cluster

mkdir 900{1,2,3,4,5,6}

技术图片

1.1 拷贝6个实例

cp /root/redis-5.0.2/redis.conf /usr/local/bin/redis-cluster/9001

技术图片

1.2 更新实例配置文件

技术图片

具体来说,需要注意下:由于在一台机器上,因此每个实例应该有不同的端口;同时,每个实例显然会有自己的存放数据的地方;开启AOF模式;开启集群配置;开启后台模式;

1.3 Redis集群的操作在后文是通过Ruby脚本来完成的,因此需要安装Ruby相关的RPM包,以及Redis和Ruby的接口包。

1.3.1 安装ruby

yum install ruby

1.3.1 安装rubygems

yum install rubygems

1.4 启动Redis cluster实例

/root/redis-5.0.2/src/redis-server /usr/local/bin/redis-cluster/9001/redis.conf

技术图片

通过netstat -tnulp | grep redisps -aux | grep redis查看是否启动成功。

1.5 redis-cli创建集群

./redis-cli --cluster create 10.168.11.116:9001 10.168.11.116:9002 10.168.11.116:9003 10.168.11.116:9004 10.168.11.116:9005 10.168.11.116:9006

技术图片

注意,redis5.0使用redis-cli作为创建集群的命令,使用c语言实现,不再使用ruby语言。

技术图片

1.6 检查集群

./redis-cli --cluster check 10.168.11.116:9001

技术图片

1.7 查看集群key、slot、slave分布信息

./redis-cli --cluster info 10.168.11.116:9001

技术图片

1.8 集群相关命令

CLUSTER INFO 打印集群的信息
CLUSTER NODES 列出集群当前已知的所有节点(node),以及这些节点的相关信息。 
CLUSTER MEET <ip> <port> 将 ip 和 port 所指定的节点添加到集群当中,让它成为集群的一份子。
CLUSTER FORGET <node_id> 从集群中移除 node_id 指定的节点。
CLUSTER REPLICATE <node_id> 将当前节点设置为 node_id 指定的节点的从节点。
CLUSTER SAVECONFIG 将节点的配置文件保存到硬盘里面。
CLUSTER ADDSLOTS <slot> [slot ...] 将一个或多个槽(slot)指派(assign)给当前节点。
CLUSTER DELSLOTS <slot> [slot ...] 移除一个或多个槽对当前节点的指派。
CLUSTER FLUSHSLOTS 移除指派给当前节点的所有槽,让当前节点变成一个没有指派任何槽的节点。
CLUSTER SETSLOT <slot> NODE <node_id> 将槽 slot 指派给 node_id 指定的节点。
CLUSTER SETSLOT <slot> MIGRATING <node_id> 将本节点的槽 slot 迁移到 node_id 指定的节点中。
CLUSTER SETSLOT <slot> IMPORTING <node_id> 从 node_id 指定的节点中导入槽 slot 到本节点。
CLUSTER SETSLOT <slot> STABLE 取消对槽 slot 的导入(import)或者迁移(migrate)。 
CLUSTER KEYSLOT <key> 计算键 key 应该被放置在哪个槽上。
CLUSTER COUNTKEYSINSLOT <slot> 返回槽 slot 目前包含的键值对数量。
CLUSTER GETKEYSINSLOT <slot> <count> 返回 count 个 slot 槽中的键。 
CLUSTER SLAVES node-id 返回一个master节点的slaves 列表

以上是关于详解Redis Cluster集群的主要内容,如果未能解决你的问题,请参考以下文章

RedisRedis学习 Redis cluster模式详解

redis cluster 集群搭建

redis cluster集群选主

一万字详解 Redis Cluster Gossip 协议

解决springboot整合redis-cluster下集群拓扑不自动刷新问题

java操作redis集群问题CLUSTERDOWN The cluster is down. Use CLUSTER INFO for more information