`
carlosfu
  • 浏览: 576816 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
Ba8b5055-9c58-3ab0-8a1c-e710f0495d2c
BigMemory实战与理...
浏览量:30527
53b2087e-c637-34d2-b61d-257846f73ade
RedisCluster开...
浏览量:150210
C9f66038-7478-3388-8086-d20c1f535495
缓存的使用与设计
浏览量:123524
社区版块
存档分类
最新评论

Redis-Cluster实战--8.Redis-Cluster水平扩容(redis-cli实现版)

阅读更多

 

转载请注明出处哈: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> IMPORTING <source_node_id>`命令,表示目标节点将从源节点迁移slot;
对源节点发送`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-cluster.tar.gz

    在 Redis 的众多特性中,Redis Cluster 是其分布式集群解决方案,旨在提供高可用性和水平扩展能力。`redis-cluster.tar.gz` 文件包含了实现 Redis 集群所需的相关脚本和配置。 Redis 集群通过将数据分散到多个节点...

    redis-cluster-5.0.7.tar.gz

    Redis Cluster是Redis的分布式解决方案,它允许你在多个节点之间分发数据,从而实现高可用性和可扩展性。在本压缩包“redis-cluster-5.0.7.tar.gz”中,我们将探讨Redis Cluster的配置和使用。 首先,`redis-...

    Windows环境Redis-Cluster配置

    Redis-Cluster是Redis的一个分布式实现,它允许在多个节点之间分散数据,提供高可用性和可扩展性。在Windows环境中配置Redis-Cluster,首先需要理解其基本概念和工作原理,然后按照步骤进行安装和配置。 一、Redis-...

    redis5离线安装文件包,包含redis-5.0.14.tar.gz和redis-4.6.0.gem

    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

    docker-redis-cluster-master.tar.gz 集群

    初始化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-3.0.0.tar和redis-3.0.0.gem.rar

    Redis Cluster是Redis提供的分布式解决方案,它通过将数据分片到多个节点来实现高可用性和水平扩展。使用此gem包的流程如下: 1. **Ruby环境**:确保系统已经安装了Ruby和RubyGems,可以通过`ruby -v`和`gem -v`...

    redis-cluster开箱即用作者已经实验

    Redis Cluster是Redis官方提供的分布式解决方案,它通过分片(sharding)技术将数据分散存储在多个节点上,实现了数据的高可用性和可扩展性。这个压缩包“redis-cluster”应该是包含了一组配置好的Redis Cluster环境...

    redis-cluster redis伪集群文件

    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-cluster

    使用 `redis-cli` 的 `CLUSTER` 命令,如 `CLUSTER NODES` 和 `CLUSTER INFO`。 ### 8. 扩展与缩容 随着数据量的增长,可能需要增加或减少节点。使用 `redis-trib.rb reshard` 命令进行扩展,根据需要平衡槽区分布...

    redis集群安装 redis 6.x 安装包 redis-6.2.1_install.tar.gz

    8. **监控与维护**:持续监控集群健康状况,使用 `redis-cli cluster nodes` 查看节点状态,定期执行 `redis-cli cluster meet` 添加新节点或恢复故障节点。 完成上述步骤后,你就成功搭建了一个基本的 Redis 6.x ...

    Redis-Cluster 分布式集群.docx

    Redis Cluster 是一个分布式数据存储解决方案,它允许将数据分散存储在多个节点上,以实现高可用性和可扩展性。在Redis Cluster中,每个节点都存储一部分数据,并且可以通过内部的槽映射机制来管理和处理客户端的...

    Redis-x64-3.2.100-稳定版.rar

    8. **主从复制**:Redis 支持主从复制,实现数据的高可用性。通过配置,一个 Redis 实例可以成为另一个实例的从节点,从节点会自动同步主节点的数据,这样即使主节点故障,从节点也可接管服务。 9. **哨兵系统...

    最新版windows Redis-x64-5.0.14.1.zip

    8. **集群支持**:从Redis 3.0开始,引入了Redis Cluster,能够提供自动的数据分片和故障转移,支持多主节点,扩展性强。 压缩包内的文件"Redis-x64-5.0.14.1.msi"是一个Windows Installer包,用于在Windows操作...

    docker-redis-cluster集群安装

    【标题】:Docker Redis Cluster集群安装指南 在IT行业中,Redis被广泛用作高性能的内存数据存储,常用于数据库、缓存以及消息代理。而Redis Cluster是Redis的一个分布式解决方案,能够提供高可用性和可扩展性。本...

    Redis-x64-5.0.14.1.msi

    8. **Redis Cluster**:Redis 3.0 引入了集群功能,可以将数据自动分片到多个节点,提供水平扩展和容错能力。 9. **命令行客户端**:`redis-cli` 是官方提供的命令行工具,用于与 Redis 服务器交互。在 Windows 上...

    windows版的Redis-Cluster集群及启动脚本

    8. **故障恢复与扩展**:Redis-Cluster的故障转移功能会在主节点故障时自动选举新的主节点,保证服务连续性。此外,通过添加新的节点,可以动态调整集群的规模,实现水平扩展。 9. **注意事项**:在Windows环境下,...

    Redis-x64-3.2.100免安装版配置+linux版.zip

    这个压缩包“Redis-x64-3.2.100免安装版配置+linux版.zip”提供了Windows和Linux两个平台上的Redis安装资源,包括不同版本的Redis。 在Windows平台上,Redis-x64-3.2.100.msi是微软安装程序格式,它包含了Windows...

    redis安装文件Redis-x64-3.2.10、Redis-x64-3.0.50

    9. Cluster集群:Redis 3.0及以上版本引入了Cluster特性,支持数据的自动分片和故障转移,可以在多台机器上构建大规模的分布式Redis系统。 总之,Redis以其高效、易用和丰富的数据结构特性,在各种场景下得到了广泛...

    redis-6.2.13.tar.gz

    Redis 是一个高性能的键值数据库,它以开源的方式提供服务,广泛应用于缓存、消息队列、数据存储等多个场景。Redis-6.2.13是Redis的一个稳定版本,提供了许多增强的功能和优化,旨在提高性能和稳定性。下面将详细...

Global site tag (gtag.js) - Google Analytics