转载请注明出处哈:http://carlosfu.iteye.com/blog/2240426
一、目的
Redis-Cluster是Redis的分布式解决方案,Redis Cluster提供了在线扩容(添加分片)功能,有效扩展存储能力和读写能力。
水平扩容思路如下:
1. 启动新的Redis实例。
2. 集群中的机器meet上述Redis实例,将其加入集群。
3. 由于新的实例没有指派槽,所以要将部分其他实例上面的槽迁移至新的实例。
二、具体实现:(已建立好的集群参考http://carlosfu.iteye.com/blog/2242578)
准备数据,使用hashtag生成数据到指定slot上
for num in `seq 100 1000` do redis-cli -c -p 8002 set {aa}${num} ${num} done
1. 启动新的Redis实例,端口是8006:
sed 's/8000/8006/g' redis-8000.conf > redis-8006.conf redis-server /opt/soft/redis/conf/redis-8006.conf
2. 将8006加入集群:
redis-cli -c -p 8000 cluster meet 127.0.0.1 8006
3. 迁移slot, 这个实现起来比较麻烦,具体步骤如下:将(8002上的slot-15495 slot-15496分配给8006)
对源节点发送`CLUSTER SETSLOT <slot> MIGRATING <target_node_id>`命令,表示源节点将向目标节点迁移slot;
对源节点发送`CLUSTER GETKEYSINSLOT <slot> <count>`命令,表示从slot中取出count个key/value对的key;执行如下:
对源节点发送`MIGRATE <target_ip> <target_port> <key_name> 0 <timeout>`命令,表示将key迁移到目标
重复执行步骤3和4,直到该slot中所有的key都被迁移完毕;
向集群中的迁移双方节点发送`CLUSTER SETSLOT <slot> NODE <target_node_id>`,表示告诉集群,将该slot分配给目标节点
等待集群的状态变为OK;(cluster info中的cluster_state:ok
(1). 对目标节点发送`CLUSTER SETSLOT <slot> IMPORTING <source_node_id>`命令,表示目标节点将从源节点迁移slot
sh target-import.sh 8002 8006 15495 15496
target-import.sh
source=$1 target=$2 startSlot=$3 endSlot=$4 for slot in `seq ${startSlot} ${endSlot}` do redis-cli -c -p ${target} cluster setslot ${slot} IMPORTING `redis-cli -c -p ${target} cluster nodes | grep ${source} | awk '{print $1}'` done
(2). 对源节点发送`CLUSTER SETSLOT <slot> MIGRATING <target_node_id>`命令,表示源节点将向目标节点迁移slot;
sh source-migrate.sh 8002 8006 15495 15496
source-migrate.sh
source=$1 target=$2 startSlot=$3 endSlot=$4 for slot in `seq ${startSlot} ${endSlot}` do redis-cli -c -p ${source} cluster setslot ${slot} MIGRATING `redis-cli -c -p ${source} cluster nodes | grep ${target} | awk '{print $1}'` done
(3). 对源节点发送`CLUSTER GETKEYSINSLOT <slot> <count>`命令,表示从slot中取出count个key/value对的key;执行如下:
对源节点发送`MIGRATE <target_ip> <target_port> <key_name> 0 <timeout>`命令,表示将key迁移到目标
(4). 重复执行步骤3和4,直到该slot中所有的key都被迁移完毕
(5). 向集群中的迁移双方节点发送`CLUSTER SETSLOT <slot> NODE <target_node_id>`,表示告诉集群,将该slot分配给目标节点
sh migrate-data.sh 8002 8006 15495 15496
migrate-data.sh
source=$1 target=$2 startSlot=$3 endSlot=$4 for slot in `seq ${startSlot} ${endSlot}` do while [ 1 -eq 1 ] do allkeys=`redis-cli -c -p ${source} cluster getkeysinslot ${slot} 20` if [ !-z ${allkeys} ] then redis-cli -c -p ${source} cluster setslot ${slot} NODE `redis-cli -c -p ${source} cluster nodes | grep ${target} | awk '{print $1}'` redis-cli -c -p ${target} cluster setslot ${slot} NODE `redis-cli -c -p ${source} cluster nodes | grep ${target} | awk '{print $1}'` break else for key in ${allkeys} do echo "slot ${slot} key ${key}" redis-cli -c -p ${source} MIGRATE 127.0.0.1 ${target} ${key} 0 5000 done fi done done
(6). 等待集群的状态变为OK;(cluster info中的cluster_state:ok)
127.0.0.1:8000> cluster info cluster_state:ok cluster_slots_assigned:16384 cluster_slots_ok:16384 cluster_slots_pfail:0 cluster_slots_fail:0 cluster_known_nodes:7 cluster_size:5 cluster_current_epoch:7 cluster_my_epoch:1 cluster_stats_messages_sent:193766 cluster_stats_messages_received:193765
相关推荐
在 Redis 的众多特性中,Redis Cluster 是其分布式集群解决方案,旨在提供高可用性和水平扩展能力。`redis-cluster.tar.gz` 文件包含了实现 Redis 集群所需的相关脚本和配置。 Redis 集群通过将数据分散到多个节点...
Redis Cluster是Redis的分布式解决方案,它允许你在多个节点之间分发数据,从而实现高可用性和可扩展性。在本压缩包“redis-cluster-5.0.7.tar.gz”中,我们将探讨Redis Cluster的配置和使用。 首先,`redis-...
Redis-Cluster是Redis的一个分布式实现,它允许在多个节点之间分散数据,提供高可用性和可扩展性。在Windows环境中配置Redis-Cluster,首先需要理解其基本概念和工作原理,然后按照步骤进行安装和配置。 一、Redis-...
redis-5.0.14/src/redis-cli --cluster create 192.168.129.98:7000 192.168.129.99:7003 192.168.129.99:7002 192.168.129.126:7005 192.168.129.126:7004 192.168.129.98:7001 --cluster-replicas
初始化3主3从集群redis-cli --cluster create 192.168.0.224:6391 192.168.0.224:6392 192.168.0.224:6393 192.168.0.224:6394 192.168.0.224:6395 192.168.0.224:6396 --cluster-replicas 1 连接集群测试 redis-cli...
Redis Cluster是Redis提供的分布式解决方案,它通过将数据分片到多个节点来实现高可用性和水平扩展。使用此gem包的流程如下: 1. **Ruby环境**:确保系统已经安装了Ruby和RubyGems,可以通过`ruby -v`和`gem -v`...
Redis Cluster是Redis官方提供的分布式解决方案,它通过分片(sharding)技术将数据分散存储在多个节点上,实现了数据的高可用性和可扩展性。这个压缩包“redis-cluster”应该是包含了一组配置好的Redis Cluster环境...
3、./redis-cluster-start-all.sh 开启reids 4、执行 ./redis-trib.rb create --replicas 1 127.0.0.1:7001 127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 127.0.0.1:7006 5、验证集群已经启动 ps -...
使用 `redis-cli` 的 `CLUSTER` 命令,如 `CLUSTER NODES` 和 `CLUSTER INFO`。 ### 8. 扩展与缩容 随着数据量的增长,可能需要增加或减少节点。使用 `redis-trib.rb reshard` 命令进行扩展,根据需要平衡槽区分布...
8. **监控与维护**:持续监控集群健康状况,使用 `redis-cli cluster nodes` 查看节点状态,定期执行 `redis-cli cluster meet` 添加新节点或恢复故障节点。 完成上述步骤后,你就成功搭建了一个基本的 Redis 6.x ...
8. **Redis Cluster**:Redis 3.0 引入了集群功能,可以将数据自动分片到多个节点,提供水平扩展和容错能力。 9. **命令行客户端**:`redis-cli` 是官方提供的命令行工具,用于与 Redis 服务器交互。在 Windows 上...
Redis Cluster 是一个分布式数据存储解决方案,它允许将数据分散存储在多个节点上,以实现高可用性和可扩展性。在Redis Cluster中,每个节点都存储一部分数据,并且可以通过内部的槽映射机制来管理和处理客户端的...
8. **主从复制**:Redis 支持主从复制,实现数据的高可用性。通过配置,一个 Redis 实例可以成为另一个实例的从节点,从节点会自动同步主节点的数据,这样即使主节点故障,从节点也可接管服务。 9. **哨兵系统...
8. **集群支持**:从Redis 3.0开始,引入了Redis Cluster,能够提供自动的数据分片和故障转移,支持多主节点,扩展性强。 压缩包内的文件"Redis-x64-5.0.14.1.msi"是一个Windows Installer包,用于在Windows操作...
【标题】:Docker Redis Cluster集群安装指南 在IT行业中,Redis被广泛用作高性能的内存数据存储,常用于数据库、缓存以及消息代理。而Redis Cluster是Redis的一个分布式解决方案,能够提供高可用性和可扩展性。本...
8. **故障恢复与扩展**:Redis-Cluster的故障转移功能会在主节点故障时自动选举新的主节点,保证服务连续性。此外,通过添加新的节点,可以动态调整集群的规模,实现水平扩展。 9. **注意事项**:在Windows环境下,...
这个压缩包“Redis-x64-3.2.100免安装版配置+linux版.zip”提供了Windows和Linux两个平台上的Redis安装资源,包括不同版本的Redis。 在Windows平台上,Redis-x64-3.2.100.msi是微软安装程序格式,它包含了Windows...
标题中的"redis-windows-7.0.10.zip"表明这是一个针对Windows操作系统的Redis服务器版本,具体为7.0.10版的压缩包文件。 在Windows环境下安装Redis,首先需要解压"redis-windows-7.0.10.zip"文件,这通常会包含一...
8. **redis-check-aof.pdb** 和 **redis-check-rdb.pdb**:分别对应于AOF检查工具和RDB(Snapshotting)检查工具的调试信息文件,RDB是另一种Redis的持久化策略,通过定期保存数据集快照来保证数据安全。 9. **...