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 redis
和ps -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 列表
vCluster测试效果
./redis-cli -c -h 10.168.11.116 -p 9001
其他参考资料:
- Redis cluster tutorial
- Linux下Redis集群安装部署及使用详解
- Linux Redis集群搭建与集群客户端实现
- 5.0中redis-cli的集群管理测试