redis cluster增加节点和reshard

首先搭建好集群环境
 
[OK] All 16384 slots covered.
 
zhaoguihuadediannao:src zhaogh$ ./redis-cli -c -p 9001
 
127.0.0.1:9001> get testkey001
 
-> Redirected to slot [12786] located at 127.0.0.1:9003
 
(nil)
 
127.0.0.1:9003>
 
如何增加节点:
 
首先我们创建一个叫做 9004 的目录:
 
zhaoguihuadediannao:redis-cluster zhaogh$ mkdir 9004
 
zhaoguihuadediannao:redis-cluster zhaogh$
 
接着我们将 9001 目录下的 redis-server 、 redis.conf 两个文件拷贝到 9004 目录:
 
zhaoguihuadediannao:redis-cluster zhaogh$ cp 9001/redis-server 9004
 
zhaoguihuadediannao:redis-cluster zhaogh$ cp 9001/redis.conf 9004
 
然后我们打开 redis.conf 文件修改里面的端口配置项,将其改为 9004 。
 
启动 9004 实例:
 
zhaoguihuadediannao:redis-cluster zhaogh$ cd 9004
 
zhaoguihuadediannao:9004 zhaogh$ ./redis-server ./redis.conf
 
-----------------/apps/svr/redis-3.0.7/bin/redis-server /apps/conf/redis/redis7005.conf

zhaoguihuadediannao:9004 zhaogh$
 
想要把这个实例加入到集群,我们只需要执行 redis-trib.rb 命令:
 
zhaoguihuadediannao:src zhaogh$ /apps/svr/redis-3.0.7/bin/redis-trib.rb add-node 10.199.164.55:7005 10.199.164.55:7001
 
第一个参数是我们刚才启动的新实例,第二个参数是集群中已有的节点。
 
检查一下新节点是否已经加入:
 
zhaoguihuadediannao:src zhaogh$ /apps/svr/redis-3.0.7/bin/redis-cli -c -p 7001
 
127.0.0.1:9001> cluster nodes
 
0e8f980bfe7a682e3d71b15523a41293535b8ccd :0 myself,master - 0 0 1 connected 0-5460
 
cbb01bdfdc265b190496956354d84aaae6e7d54d 127.0.0.1:9004 master - 0 1401952316346 0 connected
 
708e6e14474e3a99677b05ff89bd857375884437 127.0.0.1:9002 master - 0 1401952314325 2 connected 5461-10922
 
a7f9d3c64540cc3fc8cd3072e573bb8ab0bf1e6f 127.0.0.1:9003 master - 0 1401952315334 3 connected 10923-16383
 
127.0.0.1:9001>
 
我们可以发现 9004 并不包含任何哈希槽,因为它还没有数据。
 
我们还可以为集群中的主节点增加从节点用于只读查询。
 
如何增加从节点:
 
我们还是要创建目录,拷贝那两个文件,修改配置,然后启动实例:
 
zhaoguihuadediannao:redis-cluster zhaogh$ mkdir 9005
 
zhaoguihuadediannao:redis-cluster zhaogh$ cp 9001/redis-server 9005
 
zhaoguihuadediannao:redis-cluster zhaogh$ cp 9001/redis.conf 9005
 
修改 port 为 9005
 
zhaoguihuadediannao:redis-cluster zhaogh$ cd 9005
 
zhaoguihuadediannao:9005 zhaogh$ ./redis-server ./redis.conf
 
zhaoguihuadediannao:9005 zhaogh$
 
执行下面的命令,增加从节点:
 
zhaoguihuadediannao:src zhaogh$ ./redis-trib.rb add-node --slave 127.0.0.1:9005 127.0.0.1:9001
 
第一个参数为从节点,第二个参数为主节点。
 
如何删除一个节点:
 
zhaoguihuadediannao:src zhaogh$ ./redis-trib.rb del-node 127.0.0.1:9001 'cbb01bdfdc265b190496956354d84aaae6e7d54d'
 
这里要注意一下,第一个参数是集群中的任何一个主节点地址,而第二个参数是要删除节点的 ID,这个ID如果你不知道的话,可以通过 cluster nodes 命令查看。
 
还有一点就是要删除的节点必须是空的,也就是不能缓存任何数据,否则会删除不成功。对于非空节点,在删除之前需要重新分片,将缓存的数据转移到别的节点。
 
如何重新分片:
 
我们先给某个节点做点数据:
 
zhaoguihuadediannao:src zhaogh$ ./redis-cli -c -p 9001
 
127.0.0.1:9001> set testkey001 testvalue001
 
-> Redirected to slot [12786] located at 127.0.0.1:9003
 
OK
 
127.0.0.1:9003>
 
现在 9003 上已经有数据了,我们尝试删除一下:
 
zhaoguihuadediannao:src zhaogh$ ./redis-trib.rb del-node 127.0.0.1:9001 '78ec1fd6647b79627d7c29bb2b22d04a4a6c43b3'
 
>>> Removing node 78ec1fd6647b79627d7c29bb2b22d04a4a6c43b3 from cluster 127.0.0.1:9001
 
Connecting to node 127.0.0.1:9001: OK
 
Connecting to node 127.0.0.1:9002: OK
 
Connecting to node 127.0.0.1:9003: OK
 
[ERR] Node 127.0.0.1:9003 is not empty! Reshard data away and try again.
 
zhaoguihuadediannao:src zhaogh$
 
没有删除成功,我们来重新分片,把 9003 上的数据转移:
 
zhaoguihuadediannao:src zhaogh$ /apps/svr/redis-3.0.7/bin/redis-trib.rb reshard 10.199.164.55:7001
 
然后输出了很多信息,很多数值和ID都可以从这段信息中找到。
 
How many slots do you want to move (from 1 to 16384)? 5461
 
会问你要移动多少个哈希槽,我们把 9003 上的所有哈希槽都移走,5461 这个数字可以从终端上看到,或许你的实际情况不是这个数字。
 
What is the receiving node ID? 4d2e0a8360795ce7ce8381c68746034aeba3c9b9
 
然后问你你要把这些哈希槽移到哪儿去,我指定了 9001 的 节点 ID。
 
Please enter all the source node IDs.
 
  Type 'all' to use all the nodes as source nodes for the hash slots.
 
  Type 'done' once you entered all the source nodes IDs.
 
Source node #1:78ec1fd6647b79627d7c29bb2b22d04a4a6c43b3
 
Source node #2:done
 
之后,redis 列出了重新分片计划,最后问你
 
Do you want to proceed with the proposed reshard plan (yes/no)? yes
 
执行完成后,我们看看 9003 上还有没有 key:
 
zhaoguihuadediannao:src zhaogh$ ./redis-cli -p 9003
 
127.0.0.1:9003> keys *
 
(empty list or set)
 
127.0.0.1:9003>
 
再看看 9001 上是不是有这个 key 了
 
zhaoguihuadediannao:src zhaogh$ /apps/svr/redis-3.0.7/bin/redis-cli -c -p 7005

127.0.0.1:9001> keys *
 
1) "testkey001"
 
127.0.0.1:9001>
 
没错,果然转移过来了。
 
最后我们试试能不能把 9003 删除:
 
zhaoguihuadediannao:src zhaogh$ ./redis-trib.rb del-node 127.0.0.1:9001 '78ec1fd6647b79627d7c29bb2b22d04a4a6c43b3'
 
>>> Removing node 78ec1fd6647b79627d7c29bb2b22d04a4a6c43b3 from cluster 127.0.0.1:9001
 
Connecting to node 127.0.0.1:9001: OK
 
Connecting to node 127.0.0.1:9002: OK
 
Connecting to node 127.0.0.1:9003: OK
 
>>> Sending CLUSTER FORGET messages to the cluster...
 
>>> SHUTDOWN the node.
 
zhaoguihuadediannao:src zhaogh$ ./redis-cli -p 9003
 
Could not connect to Redis at 127.0.0.1:9003: Connection refused
 
not connected>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
搭建一个 Redis Cluster 集群的步骤如下: 1. 下载并安装 Redis:在 Redis 官网下载 Redis 并安装。安装完成后,可以通过 redis-cli 命令来测试 Redis 是否正常工作。 2. 配置 Redis:编辑 redis.conf 文件,设置 Redis 的端口号、密码、数据存储路径等参数。如果需要启用集群功能,需要在配置文件中添加 cluster-enabled yes 和 cluster-config-file 路径等配置信息。 3. 创建 Redis Cluster:使用 create-cluster 脚本创建 Redis Cluster,该脚本可以在 Redis 安装目录的 utils/create-cluster 目录下找到。需要指定 Redis Cluster 的端口号、节点数量等参数。例如,执行以下命令可以创建一个 3 个节点Redis Cluster: ``` $ create-cluster start --port 7000 --replicas 0 --num-nodes 3 ``` 4. 添加节点:使用 add-node 脚本向 Redis Cluster 添加新的节点。例如,执行以下命令可以将一个新的节点添加到 Redis Cluster 中: ``` $ redis-cli --cluster add-node 127.0.0.1:7000 127.0.0.1:7001 ``` 5. 删除节点:使用 del-node 脚本从 Redis Cluster 删除节点。例如,执行以下命令可以将一个节点Redis Cluster 中删除: ``` $ redis-cli --cluster del-node 127.0.0.1:7000 1234567890abcdef1234567890abcdef12345678 ``` 6. 扩展 Redis Cluster:使用 reshard 脚本可以扩展 Redis Cluster节点数量。例如,执行以下命令可以将 Redis Cluster节点数量扩展到 6 个: ``` $ redis-cli --cluster reshard 127.0.0.1:7000 ``` 在实际应用中,需要根据具体的业务场景和需求,选择合适的 Redis Cluster 集群方案。同时,在搭建 Redis Cluster 集群时,需要考虑到分布式环境下的各种异常情况,如网络延迟、节点故障等,从而设计出高可用、高性能、高可靠的 Redis Cluster 集群方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值