Redis集群如何增加节点与删除节点

62次阅读
没有评论

共计 3059 个字符,预计需要花费 8 分钟才能阅读完成。

这篇文章将为大家详细讲解有关 Redis 集群如何增加节点与删除节点,丸趣 TV 小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

查看集群启动情况:ps -ef | grep redis

查看集群的 slots 分配情况以及节点之间的主从关系:

首先登陆节点 7000:redis-cli -p 7000 -h 192.168.182.132 -c // 注意不要丢了 -c

cluster nodes 查看集群节点信息

在本例中我们先增加两个节点:主节点 7006 和从节点 7007,并给 7006 分配 4096 个 slots,设置 7007 为 7006 的从节点,然后再将这两个节点从集群中删除,一定要先删除主节点,再删除从节点,要不然故障转移会生效。

一、集群的扩容

1. 准备新的节点

在集群目录 redis_cluster 目录下增加 redis7006 和 redis7007 目录

mkdir redis7006

mkdir redis7007

增加完成后的目录

复制端口 7000 的 redis.conf 配置文件到 redis7006 和 redis7007 目录下,并修改配置文件中的端口为对应目录的端口号。

例如 redis7006 下的 redis.conf 文件的内容为:

port 7006
bind 192.168.182.132 // 本机 IP
daemonize yes // 设置为后台运行
pidfile /var/run/redis-7006.pid
cluster-enabled yes // 开启集群
cluster-config-file node-7006.conf
cluster-node-timeout 15000
appendonly yes

准备完成后,启动两个新的 redis 节点:

redis-server redis7006/redis.conf
redis-server redis7007/redis.conf
ps -ef | grep redis // 查看新的 redis 节点是否启动成功 

启动以后登录 7006 查看节点情况:

redis-cli -p 7006 -h 192.168.182.132 -c
cluster nodes

2. 添加主节点

(1)向集群中添加节点 7006,注意一定要保证节点里面没有添加过任何数据,不然添加会报错。

cd /usr/local/redis/redis/src
./redis-trib.rb add-node 192.168.182.132:7006 192.168.182.132:7000
 // 第一次节点为新增的节点   第二个节点为集群中的节点 

添加成功:

可以看到使用 addnode 命令来添加节点,第一个参数是新节点的地址,第二个参数是任意一个已经存在的节点的 IP 和端口. 我们可以看到新的节点已经添加到集群中:

新节点 7006 现在已经连接上了集群,成为集群的一份子,并且可以对客户端的命令请求进行转向了,但是和其他主节点相比,新节点还有两点区别:

新节点没有包含任何数据,因为它没有包含任何哈希槽. 尽管新节点没有包含任何哈希槽,但它仍然是一个主节点,所以在集群需要将某个从节点升级为新的主节点时,这个新节点不会被选中。

接下来,只要使用 redis-trib 程序,将集群中的某些哈希桶移动到新节点里面,新节点就会成为真正的主节点了。

(2) 为主节点 7006 分配虚拟槽

cd /usr/local/redis/redis/src
./redis-trib.rb reshard 192.168.182.132:7001 // 可以为任意的节点   在此登录的 7001 只是作为客户端去访问的 

执行后:

因为我们增加 7006 为主节点后,一共存在四个主节点,为了平均分配我们需要给 7006 分配 16384 除以 4 等于 4096 个节点,所以我们输入 4096,按 enter 继续:

输入 7006 的节点 ID,按 enter 继续:

从哪些主节点抽取槽到新节点中:all 为所有主节点,done:指定节点,在这里我们输入 all, 按 enter 继续:

Redis 集群如何增加节点与删除节点

输入 yes 后按 enter 开始给 7006 分配虚拟槽,分配完成后:

Redis 集群如何增加节点与删除节点

登录集群查看一下集群的状态:

redis-cli -p 7000 -h 192.168.182.132 -c
cluster nodes

Redis 集群如何增加节点与删除节点

至此主节点已经添加完毕了,我们的集群由三主三从变成了四主三从。

3. 添加从节点 7007

(1) 使用 add-node 添加新节点

cd /usr/local/redis/redis/src
./redis-trib.rb add-node 192.168.182.132:7007 192.168.182.132:7000
 // 第一次节点为新增的节点   第二个节点为集群中的节点 

加入集群成功,登录到集群中查看一下集群状态:

Redis 集群如何增加节点与删除节点

7007 还是一个 Master 节点,而且没有拥有自己的 slot 槽。那么我们接下来要让它变成从节点。

(2) 将 7007 变为 7006 的 从节点

使用 CLUSTER REPLICATE 命令改变一个从节点的主节点。

redis-cli -p 7007 -h 192.168.182.132
cluster replicate 52d169e7011ccdf10f99c1d83f92409dcc37ab55 // 后面的字符串为节点 7006 的节点 ID

设置成功后查看一下:

Redis 集群如何增加节点与删除节点

集群的从节点 7007 添加成功。

二、集群的缩容

只要使用 del-node 命令即可:

./redis-trib del-node 127.0.0.1:7000  node-id 
第一个参数是任意一个节点的地址, 第二个节点是你想要移除的节点地址。

使用同样的方法移除主节点, 不过在移除主节点前,需要确保这个主节点是空的. 如果不是空的, 需要将这个节点的数据重新分片到其他主节点上.

替代移除主节点的方法是手动执行故障恢复,被移除的主节点会作为一个从节点存在,不过这种情况下不会减少集群节点的数量,也需要重新分片数据.[/code]

1. 删除从节点

删除节点用 del-node 命令。此命令需要制定删除节点的 ip 和端口,以及节点的 id。

cd /usr/local/redis/redis/src
./redis-trib.rb del-node 192.168.182.132:7007 7007 节点 ID

删除成功后:

Redis 集群如何增加节点与删除节点

删除后我们再次查看集群的节点信息,如下所示,7007 从节点已经被移除掉。

Redis 集群如何增加节点与删除节点

2. 删除主节点

(1) 将主节点 7006 的 slots 分配到其他主节点上

cd /usr/local/redis/redis/src
 ./redis-trib.rb reshard 192.168.182.132:7006

Redis 集群如何增加节点与删除节点

选择完这几项以后,回车继续:

Redis 集群如何增加节点与删除节点

输入 yes, 表示接受这个计划,然后回车,完成 7006 节点的槽的移除。

登录集群查看当前集群情况:

Redis 集群如何增加节点与删除节点

节点 7006 上没有任何槽。

(2) 使用 del-node 命令来删除 7006 主节点。

cd /usr/local/redis/redis/src
./redis-trib.rb del-node 192.168.182.132:7006 52d169e7011ccdf10f99c1d83f92409dcc37ab55

删除成功:

Redis 集群如何增加节点与删除节点

最后登录查看集群又恢复到了三主三从的结构了,只是从刚开始的均匀分配变成了 7000 端口的主节点多了 4096 个 slots。

关于“Redis 集群如何增加节点与删除节点”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-04发表,共计3059字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)