原创

详解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}

详解Redis Cluster集群

1.1 拷贝6个实例

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

详解Redis Cluster集群

1.2 更新实例配置文件

详解Redis Cluster集群

具体来说,需要注意下:由于在一台机器上,因此每个实例应该有不同的端口;同时,每个实例显然会有自己的存放数据的地方;开启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

详解Redis Cluster集群

通过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

详解Redis Cluster集群

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

详解Redis Cluster集群

1.6 检查集群

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

详解Redis Cluster集群

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

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

详解Redis Cluster集群

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 列表

vCluster测试效果

./redis-cli -c -h 10.168.11.116 -p 9001

详解Redis Cluster集群

其他参考资料:


作  者:请叫我头头哥
出  处:http://www.cnblogs.com/toutou/
关于作者:专注于基础平台的项目开发。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接。
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是作者坚持原创和持续写作的最大动力!

正文到此结束
本文目录