Redis集群扩容的实现示例

 更新时间:2025年02月27日 11:32:58   作者:元气满满的热码式  
本文介绍了在虚拟机上新建Redis集群,并将新增节点加入现有集群,通过配置文件和`redis-cli`命令,成功实现了Redis集群的扩容,感兴趣的可以了解一下

在虚拟机上新建两个6387,6388服务配置文件,新建之后启动

[root@redis-cluster1 cluster]# cat redisCluster6387.conf 
bind 0.0.0.0
daemonize yes
protected-mode no
logfile "/myredis/cluster/cluster6387.log"
pidfile /myredis/cluster6387.pid
dir /myredis/cluster
dbfilename dump6387.rdb
appendonly yes
appendfilename "appendonly6387.aof"
requirepass 111111
masterauth 111111
port 6387
cluster-enabled yes
cluster-config-file nodes-6387.conf
cluster-node-timeout 5000

[root@redis-cluster1 cluster]# cat redisCluster6388.conf 
bind 0.0.0.0
daemonize yes
protected-mode no
logfile "/myredis/cluster/cluster6388.log"
pidfile /myredis/cluster6388.pid
dir /myredis/cluster
dbfilename dump6388.rdb
appendonly yes
appendfilename "appendonly6388.aof"
requirepass 111111
masterauth 111111
port 6388
cluster-enabled yes
cluster-config-file nodes-6388.conf
cluster-node-timeout 5000

启动87,88两个服务,此时他们都是master,没有加入集群

[root@redis-cluster1 cluster]# redis-server redisCluster6387.conf 
[root@redis-cluster1 cluster]# redis-server redisCluster6388.conf 
[root@redis-cluster1 cluster]# ps -ef | grep redis
root        2038       1  0 15:31 ?        00:00:31 redis-server 0.0.0.0:6386 [cluster]
root        2221       1  0 15:47 ?        00:00:24 redis-server 0.0.0.0:6385 [cluster]
root        2327    1753  0 16:01 pts/0    00:00:00 redis-cli -a 111111 -p 6385
root        2472       1  0 16:44 ?        00:00:00 redis-server 0.0.0.0:6387 [cluster]
root        2479       1  0 16:44 ?        00:00:00 redis-server 0.0.0.0:6388 [cluster]
root        2486    1954  0 16:44 pts/1    00:00:00 grep --color=auto redis
[root@redis-cluster1 cluster]# redis-cli -a 111111 -p 6387
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
127.0.0.1:6387> 
127.0.0.1:6387> 
127.0.0.1:6387> cluster nodes
494e60980fac86000312e544f71c0e835bc1445b :6387@16387 myself,master - 0 0 0 connected
127.0.0.1:6387> 

将新增的6387节点作为master加入原集群

将新增的6387作为master节点加入原有集群
redis-cli -a 密码 --cluster add-node,自己实际IP地址:6387 自己实际IP地址:6381
6387 就是将要作为master新增节点
6381 就是原来集群节点里面的领路人,相当于6387拜拜6381的码头从而找到组织加入集群redis-cli -a 111111 --cluster add-node 192.168.111.174:6387 192.168.111.175:6381

[root@redis-cluster1 cluster]# redis-cli -a 111111  --cluster add-node 192.168.58.212:6387 192.168.58.129:6381
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Adding node 192.168.58.212:6387 to cluster 192.168.58.129:6381
>>> Performing Cluster Check (using node 192.168.58.129:6381)
M: ba40235fdad71fb36c3bf165ea51055825d453c2 192.168.58.129:6381
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: fedf4b13be2122f44dde749a08c4b943582b3566 192.168.58.129:6382
   slots: (0 slots) slave
   replicates be191621d4aa881d864a113c385d58b751753392
S: 91cf395e8f04a5df1aeec4602dd38b3e4a708d55 192.168.58.130:6384
   slots: (0 slots) slave
   replicates ba40235fdad71fb36c3bf165ea51055825d453c2
M: 0a820807a70885c1d87d141824d3869dcf2418ee 192.168.58.130:6383
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
M: be191621d4aa881d864a113c385d58b751753392 192.168.58.212:6385
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 30e5bdec200a671e4de666551d4489f0035235ba 192.168.58.212:6386
   slots: (0 slots) slave
   replicates 0a820807a70885c1d87d141824d3869dcf2418ee
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
>>> Getting functions from cluster
>>> Send FUNCTION LIST to 192.168.58.212:6387 to verify there is no functions in it
>>> Send FUNCTION RESTORE to 192.168.58.212:6387
>>> Send CLUSTER MEET to node 192.168.58.212:6387 to make it join the cluster.
[OK] New node added correctly.

第一次检查集群状态:

6387还没有被分配槽位

[root@redis-cluster1 cluster]# redis-cli -a 111111 --cluster check 192.168.58.129:6381
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.58.129:6381 (ba40235f...) -> 0 keys | 5461 slots | 1 slaves.
192.168.58.130:6383 (0a820807...) -> 0 keys | 5462 slots | 1 slaves.
192.168.58.212:6385 (be191621...) -> 0 keys | 5461 slots | 1 slaves.
192.168.58.212:6387 (494e6098...) -> 0 keys | 0 slots | 0 slaves.
[OK] 0 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.58.129:6381)
M: ba40235fdad71fb36c3bf165ea51055825d453c2 192.168.58.129:6381
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: fedf4b13be2122f44dde749a08c4b943582b3566 192.168.58.129:6382
   slots: (0 slots) slave
   replicates be191621d4aa881d864a113c385d58b751753392
S: 91cf395e8f04a5df1aeec4602dd38b3e4a708d55 192.168.58.130:6384
   slots: (0 slots) slave
   replicates ba40235fdad71fb36c3bf165ea51055825d453c2
M: 0a820807a70885c1d87d141824d3869dcf2418ee 192.168.58.130:6383
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
M: be191621d4aa881d864a113c385d58b751753392 192.168.58.212:6385
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 30e5bdec200a671e4de666551d4489f0035235ba 192.168.58.212:6386
   slots: (0 slots) slave
   replicates 0a820807a70885c1d87d141824d3869dcf2418ee
M: 494e60980fac86000312e544f71c0e835bc1445b 192.168.58.212:6387
   slots: (0 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

重新分配槽号

16384处于4,因为现在有四个主机;

填写6387的id号;

[root@redis-cluster1 cluster]# redis-cli -a 111111 --cluster reshard 192.168.58.129:6381
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
>>> Performing Cluster Check (using node 192.168.58.129:6381)
M: ba40235fdad71fb36c3bf165ea51055825d453c2 192.168.58.129:6381
   slots:[0-5460] (5461 slots) master
   1 additional replica(s)
S: fedf4b13be2122f44dde749a08c4b943582b3566 192.168.58.129:6382
   slots: (0 slots) slave
   replicates be191621d4aa881d864a113c385d58b751753392
S: 91cf395e8f04a5df1aeec4602dd38b3e4a708d55 192.168.58.130:6384
   slots: (0 slots) slave
   replicates ba40235fdad71fb36c3bf165ea51055825d453c2
M: 0a820807a70885c1d87d141824d3869dcf2418ee 192.168.58.130:6383
   slots:[5461-10922] (5462 slots) master
   1 additional replica(s)
M: be191621d4aa881d864a113c385d58b751753392 192.168.58.212:6385
   slots:[10923-16383] (5461 slots) master
   1 additional replica(s)
S: 30e5bdec200a671e4de666551d4489f0035235ba 192.168.58.212:6386
   slots: (0 slots) slave
   replicates 0a820807a70885c1d87d141824d3869dcf2418ee
M: 494e60980fac86000312e544f71c0e835bc1445b 192.168.58.212:6387
   slots: (0 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.
How many slots do you want to move (from 1 to 16384)? 4096
What is the receiving node ID? 494e60980fac86000312e544f71c0e835bc1445b
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

Ready to move 4096 slots.
  Source nodes:
    M: ba40235fdad71fb36c3bf165ea51055825d453c2 192.168.58.129:6381
       slots:[0-5460] (5461 slots) master
       1 additional replica(s)
    M: 0a820807a70885c1d87d141824d3869dcf2418ee 192.168.58.130:6383
       slots:[5461-10922] (5462 slots) master
       1 additional replica(s)
    M: be191621d4aa881d864a113c385d58b751753392 192.168.58.212:6385
       slots:[10923-16383] (5461 slots) master
       1 additional replica(s)
  Destination node:
    M: 494e60980fac86000312e544f71c0e835bc1445b 192.168.58.212:6387
       slots: (0 slots) master
  Resharding plan:

再次查看集群状态

四个主节点均已被分配槽位;

当前状态为三主三从,一主零从

[root@redis-cluster1 cluster]# redis-cli -a 111111 --cluster check 192.168.58.129:6381
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.58.129:6381 (ba40235f...) -> 0 keys | 4096 slots | 1 slaves.
192.168.58.130:6383 (0a820807...) -> 0 keys | 4096 slots | 1 slaves.
192.168.58.212:6385 (be191621...) -> 0 keys | 4096 slots | 1 slaves.
192.168.58.212:6387 (494e6098...) -> 0 keys | 4096 slots | 0 slaves.
[OK] 0 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.58.129:6381)
M: ba40235fdad71fb36c3bf165ea51055825d453c2 192.168.58.129:6381
   slots:[1365-5460] (4096 slots) master
   1 additional replica(s)
S: fedf4b13be2122f44dde749a08c4b943582b3566 192.168.58.129:6382
   slots: (0 slots) slave
   replicates be191621d4aa881d864a113c385d58b751753392
S: 91cf395e8f04a5df1aeec4602dd38b3e4a708d55 192.168.58.130:6384
   slots: (0 slots) slave
   replicates ba40235fdad71fb36c3bf165ea51055825d453c2
M: 0a820807a70885c1d87d141824d3869dcf2418ee 192.168.58.130:6383
   slots:[6827-10922] (4096 slots) master
   1 additional replica(s)
M: be191621d4aa881d864a113c385d58b751753392 192.168.58.212:6385
   slots:[12288-16383] (4096 slots) master
   1 additional replica(s)
S: 30e5bdec200a671e4de666551d4489f0035235ba 192.168.58.212:6386
   slots: (0 slots) slave
   replicates 0a820807a70885c1d87d141824d3869dcf2418ee
M: 494e60980fac86000312e544f71c0e835bc1445b 192.168.58.212:6387
   slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

 为主节点87分配从节点88

[root@redis-cluster1 cluster]# redis-cli  -a 111111 --cluster add-node 192.168.58.212:6388 192.168.58.212:6387 --cluster-slave --cluster-master-id 494e60980fac86000312e544f71c0e835bc1445b 

--cluster-master-id 494e60980fac86000312e544f71c0e835bc1445b :主节点id号

再次查看当前的集群状态:

127.0.0.1:6385> cluster nodes
0a820807a70885c1d87d141824d3869dcf2418ee 192.168.58.130:6383@16383 master - 0 1733303488000 3 connected 6827-10922
91cf395e8f04a5df1aeec4602dd38b3e4a708d55 192.168.58.130:6384@16384 slave ba40235fdad71fb36c3bf165ea51055825d453c2 0 1733303487073 1 connected
be191621d4aa881d864a113c385d58b751753392 192.168.58.212:6385@16385 myself,master - 0 0 8 connected 12288-16383
30e5bdec200a671e4de666551d4489f0035235ba 192.168.58.212:6386@16386 slave 0a820807a70885c1d87d141824d3869dcf2418ee 0 1733303488559 3 connected
ba40235fdad71fb36c3bf165ea51055825d453c2 192.168.58.129:6381@16381 master - 0 1733303488000 1 connected 1365-5460
c26c4f5ec9882083544326df9249fa48e35c6a2a 192.168.58.212:6388@16388 slave 494e60980fac86000312e544f71c0e835bc1445b 0 1733303488345 9 connected
494e60980fac86000312e544f71c0e835bc1445b 192.168.58.212:6387@16387 master - 0 1733303488675 9 connected 0-1364 5461-6826 10923-12287
fedf4b13be2122f44dde749a08c4b943582b3566 192.168.58.129:6382@16382 slave be191621d4aa881d864a113c385d58b751753392 0 1733303488106 8 connected
127.0.0.1:6385> 

四主四从,集群扩容完成!

[root@redis-cluster1 cluster]# redis-cli -a 111111 --cluster check 192.168.58.129:6381
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
192.168.58.129:6381 (ba40235f...) -> 0 keys | 4096 slots | 1 slaves.
192.168.58.212:6387 (494e6098...) -> 0 keys | 4096 slots | 1 slaves.
192.168.58.130:6383 (0a820807...) -> 0 keys | 4096 slots | 1 slaves.
192.168.58.212:6385 (be191621...) -> 0 keys | 4096 slots | 1 slaves.
[OK] 0 keys in 4 masters.
0.00 keys per slot on average.
>>> Performing Cluster Check (using node 192.168.58.129:6381)
M: ba40235fdad71fb36c3bf165ea51055825d453c2 192.168.58.129:6381
   slots:[1365-5460] (4096 slots) master
   1 additional replica(s)
S: 30e5bdec200a671e4de666551d4489f0035235ba 192.168.58.212:6386
   slots: (0 slots) slave
   replicates 0a820807a70885c1d87d141824d3869dcf2418ee
M: 494e60980fac86000312e544f71c0e835bc1445b 192.168.58.212:6387
   slots:[0-1364],[5461-6826],[10923-12287] (4096 slots) master
   1 additional replica(s)
S: fedf4b13be2122f44dde749a08c4b943582b3566 192.168.58.129:6382
   slots: (0 slots) slave
   replicates be191621d4aa881d864a113c385d58b751753392
M: 0a820807a70885c1d87d141824d3869dcf2418ee 192.168.58.130:6383
   slots:[6827-10922] (4096 slots) master
   1 additional replica(s)
S: 91cf395e8f04a5df1aeec4602dd38b3e4a708d55 192.168.58.130:6384
   slots: (0 slots) slave
   replicates ba40235fdad71fb36c3bf165ea51055825d453c2
M: be191621d4aa881d864a113c385d58b751753392 192.168.58.212:6385
   slots:[12288-16383] (4096 slots) master
   1 additional replica(s)
S: c26c4f5ec9882083544326df9249fa48e35c6a2a 192.168.58.212:6388
   slots: (0 slots) slave
   replicates 494e60980fac86000312e544f71c0e835bc1445b
[OK] All nodes agree about slots configuration.
>>> Check for open slots...
>>> Check slots coverage...
[OK] All 16384 slots covered.

到此这篇关于Redis集群扩容的实现示例的文章就介绍到这了,更多相关Redis集群扩容内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • k8s部署redis远程连接的项目实践

    k8s部署redis远程连接的项目实践

    本文主要介绍了k8s部署redis远程连接的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10
  • Redis在windows环境下如何启动

    Redis在windows环境下如何启动

    这篇文章主要介绍了Redis在windows环境下如何启动的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-04-04
  • 如何解决Redis缓存穿透(缓存空对象、布隆过滤器)

    如何解决Redis缓存穿透(缓存空对象、布隆过滤器)

    缓存穿透是一个常见的问题,它发生当请求的数据既不在缓存中也不在数据库中,文章通过一个查询商品店铺的案例,展示了如何结合这两种方法来避免缓存穿透,首先利用布隆过滤器过滤掉不存在的id,对于误判的情况,则采用缓存空对象的策略进行补救
    2024-11-11
  • Redis+自定义注解+AOP实现声明式注解缓存查询的示例

    Redis+自定义注解+AOP实现声明式注解缓存查询的示例

    实际项目中,会遇到很多查询数据的场景,这些数据更新频率也不是很高,一般我们在业务处理时,会对这些数据进行缓存,本文主要介绍了Redis+自定义注解+AOP实现声明式注解缓存查询的示例,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2025-04-04
  • Redis用GEO实现附近的人功能

    Redis用GEO实现附近的人功能

    GEO就是Geolocation的简写形式,代表地理坐标,这篇文章主要介绍了Redis用GEO实现附近的人功能,需要的朋友可以参考下
    2024-08-08
  • Redis锁完美解决高并发秒杀问题

    Redis锁完美解决高并发秒杀问题

    本文主要介绍了Redis锁完美解决高并发秒杀问题,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Redis优化token校验主动失效的实现方案

    Redis优化token校验主动失效的实现方案

    在普通的token颁发和校验中 当用户发现自己账号和密码被暴露了时修改了登录密码后旧的token仍然可以通过系统校验直至token到达失效时间,所以系统需要token主动失效的一种能力,所以本文给大家介绍了Redis优化token校验主动失效的实现方案,需要的朋友可以参考下
    2024-03-03
  • Redis偶发连接失败案例实战记录

    Redis偶发连接失败案例实战记录

    这篇文章主要给大家介绍了关于Redis偶发连接失败的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使Redis具有一定的参考学习价值,用需要的朋友们下面随着小编来一起学习学习吧
    2018-10-10
  • redis使用skiplist跳表的原因解析

    redis使用skiplist跳表的原因解析

    经常会有人问这个问题,redis中为什么要使用跳表?这个问题,redis作者已经给出过明确答案,今天通过本文再给大家讲解下这个问题,对redis skiplist跳表知识感兴趣的朋友一起看看吧
    2022-10-10
  • redis在php中常用的语法【推荐】

    redis在php中常用的语法【推荐】

    string是redis最基本的类型,而且string类型是二进制安全的。这篇文章主要介绍了redis在php中常用的语法,需要的朋友可以参考下
    2018-08-08

最新评论