转载请注明出处哈: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
初始化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-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、./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 -...
本文参考官方文档而成:http://redis.io/topics/cluster-tutorial,不适用redis-5.0.0以下版本,原因是从redis-5.0.0版本开始,redis-trib.rb的功能被redis-cli替代了。 redis-5.0.0以下版本的安装和部署,可...
redis-4.0.11包通过centos7 make编译,在目录src下有redis-trib.rb、redis-cli、redis-server可以直接使用,搭建redis-cluster集群。
Check `redis-cli --cluster help` for more info. 5. New sorted set commands: ZPOPMIN/MAX and blocking variants. 6. Active defragmentation version 2. 7. Improvemenets in HyperLogLog implementations. 8....
Redis 5.0 is the first version of Redis to introduce the new stream data type with consumer groups, sorted sets blocking pop operations, LFU/LRU info in RDB, Cluster manager inside redis-cli, active ...
osx上Docker中的Redis集群使用7000〜7005的端口启动redis集群bash start.sh连接到集群 redis-cli -c -p 7000停止集群 docker-compose down安装redis-cli brew install redis-clicli中的示例输出 ○ → redis-cli -c ...
Chapter 8, Scaling Redis (Beyond a Single Instance), introduces RDB and AOF persistence, replication via Redis slaves, and different methods of partitioning data across different hosts. This chapter ...
Redis 6 RC1 发布了,项目创建人 antirez 在博客中介绍,这是迄今最“企业”化的版本(SSL 与 ACL 等特性与企业极相关)...Redis Cluster 代理与 Redis 6 一起发布(不同仓库) Redis 6 发布 Disque 模块(不同仓库)
redis-6.0.3 最新版exe可执行文件,redis6最大变化 就是加入了对多线程的支持。 一、对用户使用有直接影响的功能 ACL用户权限控制功能 RESP3:新的 Redis 通信协议 Cluster 管理工具 SSL 支持 二、Redis 内部的优化...
Redis Cluster Vagrant...无所事事地无所事事ssh redis01 redis-cli -a pass --cluster create 10.11.8.2:6379 10.11.8.3:6379 10.11.8.4:6379 10.11.8.5:6379 10.11.8.6:6379 10.11.8.7:6379 --cluster-replicas 1个
1、在java程序中,连接不上redisCluster。 报错信息: no reachable node in cluster 原因:创建集群时,使用了127.0.0.1,要改为公网ip才行。 redis-cli –cluster create 127.0.0.1:7001 127.0.0.1:7002 解决方法...
通过`redis-cli --cluster help`以了解更多信息 新的 sorted set 命令:ZPOPMIN / MAX 和阻塞变量 主动碎片整理 V2 增强 HyperLogLog 实现 更好的内存统计报告 许多带有子命令的命令现在都有一个 HELP 子命令 ...
The cluster manager was ported from Ruby (redis-trib.rb) to C code inside redis-cli. check `redis-cli –cluster help ` for more info. 可以查看Redis官网查看集群搭建方式,连接如下 https
docker-rediscluster 设置一次性 redis 集群以测试哨兵故障转移。 拓扑 redis_0 - 主 redis_1 - redis_0 的从属 sentinel_0 sentinel_1 sentinel_2 哨兵配置了具有以下属性的“测试”实例 - down-after-...
redis-aof-to-plain-converter 用于将数据从 aof 文件导入到具有不同配置的新 redis-cluster 的简单工具工具转换 *2$6SELECT$10*8$5HMSET$13HSET:USER:cms$8password$40fdaad7328c6da36e8cc63409d6acc5109bfa463b$10...
Redis 中有删除单个 Key 的指令 DEL,但...//如:/opt/redis/redis-cli keys “*” | xargs /opt/redis/redis-cli del 如果要指定 Redis 数据库访问密码,使用下面的命令: 代码如下: redis-cli -a password keys “*
本地安装redis,通过安装目录下的redis客户端程序可以连接任意Redis服务(只要服务端是启动着的),命令 redis-cli -h ip -p port。如果服务端要求认证资格,可能还要输入用户名密码等参数。 Redis命令十分丰富,...