当前位置:首页>笔记分享>Java笔记>Redis>Redis集群搭建、扩容、缩容、重启方法

Redis集群搭建、扩容、缩容、重启方法

Redis集群从搭建到启动,集群扩容缩容方法以及重启方法

1.Redis搭建准备

建立三台真实虚拟机然后创建配置目录mkdir -p /myredis/cluster

三台虚拟机模拟六个独立的Redis实例服务

  • 172.16.42.168端口6381/6382
    • 配置文件 vim /myredis/cluster/redisCluster6381.conf
    • 配置文件 vim /myredis/cluster/redisCluster6382.conf
  • 172.16.42.169端口6383/6384
    • 配置文件 vim /myredis/cluster/redisCluster6383.conf
    • 配置文件 vim /myredis/cluster/redisCluster6384.conf
  • 172.16.42.170端口6385/6386
    • 配置文件 vim /myredis/cluster/redisCluster6385.conf
    • 配置文件 vim /myredis/cluster/redisCluster6386.conf

配置文件以redisCluster6381.conf为例只写出来一个其他需微调端口号

bind 0.0.0.0 
#是否要用守护线程的方式启动
daemonize yes 
#保护模式
protected-mode no 
#启动端口
port 6381 
#日志目录
logfile "/myredis/cluster/cluster6381.log" 
#pid文件中存放的是进程的ID
pidfile /myredis/cluster6381.pid  
#rdb和aof的存放目录
dir /myredis/cluster 
dbfilename dump6381.rdb 
#开启aof
appendonly yes 
#dir+appendfilename=aof存放目录
appendfilename "appendonly6381.aof" 
#redis密码
requirepass 111111
#master的密码 当是slave时要用
masterauth 111111 
#开启集群功能
cluster-enabled yes  
#指定了集群配置文件
cluster-config-file nodes-6381.conf 
#集群不可用最大时间
cluster-node-timeout 5000 

启动6台Redis主机实例

redis-server /myredis/cluster/redisCluster6381.conf
redis-server /myredis/cluster/redisCluster6382.conf
...
redis-server /myredis/cluster/redisCluster6386.conf

2.构建集群关系

构建集群命令

111111需要替换成你的密码

cluster-replicas 1 中代表的是1代表的是一个master有一个slave;前三个ip是master,后三个ip是对应的slave。

redis-cli -a 111111 --cluster create --cluster-replicas 1 172.16.42.168:6381 172.16.42.168:6382 172.16.42.169:6383 172.16.42.169:6384 172.16.42.170:6385 172.16.42.170:6386

注意

  1. 使用自己的密码、IP、端口
  2. 用到的端口要放开
  3. 使用到6379端口不仅要打开6379也要打开6379+10000端口(16379)

结果和下面即为构建集群成功

成功启动集群

启动时可能遇到的错误

错误1

如果一直卡在Waiting for the cluster to join...这说明集群通信的端口没有开放

开放Redis服务的两个TCP端口。譬如Redis客户端连接端口为6379,而Redis服务在集群中还有一个叫集群总线端口,其端口为客户端连接端口加上10000,即 6379 + 10000 = 16379。所以开放每个集群节点的客户端端口和集群总线端口才能成功创建集群!

错误2

配置集群中断再次配置会出现的问题

[ERR] Node 172.168.63.202:7001 is not empty. Either the nodealready knows other nodes (check with CLUSTER NODES) or contains some key in database 0.

解决方法:

  1. 删除每个节点对应的nodes-xxx.conf配置文件
  2. 删除每个节点下的aof、rdb文件
  3. 关掉redis集群各个实例的进程,重新启动

连接进入6381作为切入点检查集群状态

redis-cli -a 111111 -p 6381

  • info replication

    info replication

  • cluster info cluser info

  • cluster nodes 查看集群信息

    cluster nodes

3. 集群读写

防止路由失效需要加入-c参数,否则读写会出错

redis-cli -a 密码 -p 端口号 -c

4. 集群容错切换

  • master节点挂掉后slaver节点会成为master节点,老master节点重新恢复后会自动变成slaver节点挂载
  • 如果想恢复成为master节点需要输入指令cluster failover

5. 集群扩容

新建6387和6388两个服务实例并启动

172.16.42.170端口6387/6388

  • 配置文件 vim /myredis/cluster/redisCluster6387.conf
  • 配置文件 vim /myredis/cluster/redisCluster6388.conf

启动两个新实例此时他们都是master

redis-server /myredis/cluster/redisCluster6387.conf
redis-server /myredis/cluster/redisCluster6388.conf

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

redis-cli -a 111111 --cluster add-node 172.16.42.170:6387 172.16.42.168:6381

image-20230405232719536

redis-cli -a 密码 --cluster add-node 自己实际IP地址:6387 自己实际IP地址:6381

6387 就是将要作为master新增节点

6381 就是原来集群节点里面的领路人,相当于6387拜拜6381的码头从而找到组织加入集群

第一次检查集群情况

redis-cli -a 111111 --cluster check 172.16.42.168:6381

image-20230405233040503

重新分配槽号

redis-cli -a 111111 --cluster reshard 172.16.42.168:6381

image-20230405234018353

第二次检查集群情况

image-20230405234050341

槽号已分配

为主节点6387分配从节点6388

redis-cli -a 111111 --cluster add-node 172.16.42.170:6388 172.16.42.170:6387 --cluster-slave --cluster-master-id 5d61b832af7352d41f51c34adebe617abf1229a1

命令:redis-cli -a 密码 --cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点ID

redis-cli -a 111111 --cluster add-node 192.168.111.174:6388 192.168.111.174:6387 --cluster-slave --cluster-master-id 4feb6a7ee0ed2b39ff86474cf4189ab2a554a40f-------这个是6387的编号,按照自己实际情况

image-20230405234941896

第三次检查集群情况

image-20230405235307594

6. 集群缩容

目的6387和6388下线

①第一次检查集群情况

redis-cli -a 111111 --cluster check 172.16.42.168:6381

先获取从节点的节点ID记录下来(每个人的不一样)

image-20230406000448965

②从集群中删除4号从节点6388

redis-cli -a 111111 --cluster del-node 172.16.42.170:6388 9ec62d20dd98d67d0fdc20654a5e0c8cbb211a53

命令:redis-cli -a 密码 --cluster del-node ip:从机端口 从机6388节点ID

③将4号主节点槽号清空

重新分配槽号,本例子将清出来的都给6381简化操作

redis-cli -a 111111 --cluster reshard 172.16.42.168:6381

image-20230406004421673

4096个槽位都指给6381,它变成了8192个槽位,相当于全部都给6381了,不然要输入3次,一锅端

④第二次检查集群情况

redis-cli -a 111111 --cluster check 172.16.42.168:6381

image-20230406004625849

发现槽号全部都给了6381服务 自己成为slaver

⑤删除4号6387主节点

命令:

redis-cli -a 密码 --cluster del-node ip:端口 6387节点ID

image-20230406004816369

第三次检查集群情况

6387和6388节点彻底去除就剩三主三从

7.集群重启

①保留原有集群的重启

  • 不需要再执行(cluster create)集群生成指令。
  • 第一步:先关闭各个Redis节点。
  • 第二步:再启动各个Redis节点即可。(注意:启动redis服务时请在上次成功启动服务的目录启动,即已经生成rdb,conf的目录,否则该节点加入不了集群)

②不保留原有集群的重启

说明:此方式相当于重置到刚刚创建集群的时候了,所以需要删除节点配置文件nodes.conf、还需要删除数据存储文件dump.rdb

  • 需要再执行(cluster create )集群生成指令。
  • 第一步:关闭各个Redis节点。
  • 第二步:删除各个Redis安装目录下的节点配置文件nodes.conf、数据文件dump.rdb等只保留redis启动的配置文件redis.conf。
  • 第三步:启动各个Redis节点。
  • 第四步:(在集群中的任意一个节点)执行集群搭建指令
redis-cli -a 111111 --cluster create --cluster-replicas 1 172.16.42.168:6381 172.16.42.168:6382 172.16.42.169:6383 172.16.42.169:6384 172.16.42.170:6385 172.16.42.170:6386

111111需要替换成你的密码

cluster-replicas 1 中代表的是1代表的是一个master有一个slave;前三个ip是master,后三个ip是对应的slave。

常用指令

  • cluster nodes 查看集群信息
  • cluster info 查看集群状态
  • cluster help 查看相关指令

给TA打赏
共{{data.count}}人
人已打赏
JavaWebJava笔记

JavaWeb之文件上传与下载

2021-12-29 18:01:40

Redis

SpringBoot整合Redis

2023-4-8 10:13:36

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
购物车
优惠劵
有新私信 私信列表
搜索