Redis 集群的水平扩展、伸缩

返回主页

一、前言

Redis3.0版本以后,有了集群的功能,提供了比之前版本的哨兵模式更高的性能与可用性,但是集群的水平扩展却比较麻烦,接下来介绍下Redis高可用集群是如何做水平扩展、伸缩的。

二、环境准备

  • 三台云服务器(106.14.157.4849.232.112.117101.34.253.57)。大家也可以使用一台云服务器,部署多个 Redis 实例也是可以的。 我这里是使用三台云服务器。想购买的小伙伴可以看下,挺便宜的 【腾讯云】云产品限时秒杀,爆款1核2G云服务器,首年74元
  • 每台服务器都运行了三个Redis 实例, 由此实现如下图的Redis 集群。

Redis 集群的水平扩展、伸缩

Redis 集群的水平扩展、伸缩

三、Redis集群的水平扩展

现在要将原集群的9个节点基础上新增3个节点,由原来的3主6从变成4主8从,如下图:

Redis 集群的水平扩展、伸缩

1、首选需要一台新的服务器(同一台服务器上运行也是可以的),运行三个节点,配置文件和集群配置一样。

Redis 集群的水平扩展、伸缩

2、查看Redis集群的帮助命令 redis-cli --cluster help

Redis 集群的水平扩展、伸缩

3、使用 add-node 命令新增一个主节点 101.34.253.57:6488 (master),前面的 ip:port 为新增节点,后面的 ip:port 为集群中已存在节点。

# 增加节点 
redis-cli --cluster add-node 101.34.253.57:6488 101.34.253.57:6485

Redis 集群的水平扩展、伸缩

4、查看集群信息 redis-cli -c -h 101.34.253.57 -p 6485,可以看到 101.34.253.57:6488 节点已经被添加进集群, 但是Redis 并没有给该节点分配“哈希槽”。所以需要我们自己手动分配。

Redis 集群的水平扩展、伸缩

5、使用redis-cli命令为 101.34.253.57:6488 节点分配slots槽位,找到集群中的任意一个节点,对其进行重新分片工作。

# 从新分配 slots
redis-cli --cluster reshard 101.34.253.57:6485

分配 slots 节点, 系统会有几个询问, 需要输入对应内容, 才可下一步。以下是具体内容

  • How many slots do you want to move (from 1 to 16384)? 2000
    解释:需要多少个hash槽移动到新的节点上,自己设置,比如2000个hash槽

  • What is the receiving node ID? b1d00df093710f483525cb4d601123e11611ad21
    解释:把这2000个hash槽移动到哪个节点上去,需要指定节点id,这里填写上面新增主节点的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:all
    解释:输入all为从所有主节点中分别抽取相应的hash槽到指定到新节点中,抽取的总槽数为2000个;或者输入原节点ID然后输入done,意思将输入的节点ID,抽取的总槽数为2000个

  • Do you want to proceed with the proposed reshard plan (yes/no)? yes
    解释:输入yes确认开始执行分片任务

6、查询集群节点信息

Redis 集群的水平扩展、伸缩

7、到这里 主节点(master)就添加完成了, 现在开始添加 从节点(slave), 重复第三步的操作,先将节点添加到集群

# 增加节点 
redis-cli --cluster add-node 101.34.253.57:6489 101.34.253.57:6485

Redis 集群的水平扩展、伸缩

可以看到,刚刚添加的从节点的角色是 master, 并且没有分配任何的hash 槽, 所以我们只需要执行 replicate 命令将该节点指向一个master 主节点, 让其成为一个从节点即可。

8、将 101.34.253.57:6489 节点设置成 101.34.253.57:6488 的从节点

# 登录从节点
[root@TR ~]# redis-cli -c -h  101.34.253.57 -p 6489
# 将该节点设置成那个节点的从节点
101.34.253.57:6489> cluster replicate b1d00df093710f483525cb4d601123e11611ad21
OK
101.34.253.57:6489>

9、查看集群信息 cluster nodes

Redis 集群的水平扩展、伸缩

四、Redis集群的水平伸缩

现在要将原集群的12个节点基础上减少3个节点,由原来的4主8从变成3主6从,如下图:

Redis 集群的水平扩展、伸缩

1、删除101.34.253.57:6489从节点,用 del-node 删除 101.34.253.57:6489 从节点 ,指定删除节点ip和端口,以及要删除节点的ID

redis-cli --cluster del-node 101.34.253.57:6489 4ddba09063f05aa226d412a71d2e289d6d580574

Redis 集群的水平扩展、伸缩

删除之后, 可以发现集群中已经没有 101.34.253.57:6489 从节点了。

2、下面就需要删除 101.34.253.57:6488 主节点了,这个步骤相对麻烦一些,因为主节点的里面是有分配了slots槽位( 0-665、5461-6127、10923-11588 ),所以必须先把 101.34.253.57:6488 里的slots槽位分配到其他的可用主节点中去,然后再进行移除节点操作,不然会出现数据丢失问题(目前只能把master的数据迁移到一个节点上,暂时做不了平均分配功能)。这一步和水平扩展的第五步是一样的。只不过是反过来了。

# 从新分配 slots
redis-cli --cluster reshard 101.34.253.57:6488

分配 slots 节点, 系统会有几个询问, 需要输入对应内容, 才可下一步。以下是具体内容

  • How many slots do you want to move (from 1 to 16384)? 2000
    解释:需要多少个hash槽移动到新的节点上,自己设置,比如2000个hash槽
  • What is the receiving node ID? 1edef2b7b831bd14347e860b1dc32a576fc5fdc8
    解释:把这2000个hash槽移动到哪个节点上去,需要指定节点id,这里填写上面新增主节点的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:b1d00df093710f483525cb4d601123e11611ad21
    Source node 2:done
    解释:输入 all 为从所有主节点中分别抽取相应的hash槽到指定到新节点中,抽取的总槽数为2000个;或者输入原节点ID然后输入done,意思将输入的节点ID,抽取的总槽数为2000个
  • Do you want to proceed with the proposed reshard plan (yes/no)? yes
    解释:输入yes确认开始执行分片任务

Redis 集群的水平扩展、伸缩

3、下一步删除 101.34.253.57:6488 主节点即可。

[root@TR ~]# redis-cli --cluster del-node 101.34.253.57:6488 b1d00df093710f483525cb4d601123e11611ad21
>>> Removing node b1d00df093710f483525cb4d601123e11611ad21 from cluster 101.34.253.57:6488
>>> Sending CLUSTER FORGET messages to the cluster...
>>> Sending CLUSTER RESET SOFT to the deleted node.
[root@TR ~]#

4、查询集群信息,看是否已经移除

Redis 集群的水平扩展、伸缩

展开/折叠菜单
144 预览数量 2024-03-19 16:01:02 发布 时间
目录
1 赞数量
评论数量
返回顶部
暂无评论

暂无评论