Redis集群、Redis集群结构设计、Cluster集群结构的搭建(Redis版本redis-6.2.6)

Redis集群

集群简介

现状问题:业务发展过程中遇到的峰值瓶颈

  • Redis提供的服务OPS可以达到10万/秒,当前业务OPS已经达到20万/秒
  • 内存单机容量达到256G,当前业务需求内存容量1T

使用集群的方式可以快速解决上述问题

集群架构

集群就是使用网络将若干台计算机联通起来,并提供统一的管理方式,使其对外呈现单机的服务效果
在这里插入图片描述

集群作用

  • 分散单台服务器的访问压力,实现负载均衡
  • 分散单台服务器的存储压力,实现可扩展性
  • 降低单台服务器宕机带来的业务灾难

在这里插入图片描述

Redis集群结构设计

数据存储设计
  • 通过算法设计,计算出key应该保存的位置
  • 将所有的存储空间计划切割成16384份,每台主机保存一部分
    • 每份代表的是一个存储空间,不是一个key的保存空间
  • 将key按照计算出的结果放到对应的存储空间

在这里插入图片描述

  • 增强可扩展性

在这里插入图片描述

集群内部通讯设计
  • 各个数据库相互通信,保存各个库中槽的编号数据
  • 一次命中,直接返回
  • 一次未命中,告知具体位置

在这里插入图片描述

Cluster集群结构搭建

搭建方式
  • 原生安装(单条命令)
    • 配置服务器(3主3从)
    • 建立通信(Meet)
    • 分槽(Slot)
    • 搭建主从(master-slave)
  • 工具安装(批处理)
Cluster配置
  • 添加节点
    # 启用redis-cluster集群
    cluster-enabled yes|no
    
  • cluster配置文件名,该文件属于自动生成,仅用于快速查找文件并查询文件内容
    # 集群节点配置文件
    # 该文件无需手工修改,由redis自动维护(创建和更新)
    # 需要注意,单机运行多实例时,确保该文件没有被其他实例覆盖(不允许重名)
    cluster-config-file <filename> 
    
  • 节点服务响应超时时间,用于判定该节点是否下线或切换为从节点
    # 节点超时时长(毫秒)
    cluster-node-timeout <milliseconds> 
    
  • master连接的slave最小数量
    cluster-migration-barrier <count> 
    

在这里插入图片描述

Cluster节点操作命令
  • 查看集群节点信息
    cluster nodes 
    
  • 进入一个从节点 redis,切换其主节点
    cluster replicate <master-id> 
    
  • 发现一个新节点,新增主节点
    cluster meet ip:port 
    
  • 忽略一个没有solt的节点
    cluster forget <id> 
    
  • 手动故障转移
    cluster failover 
    
redis-cli --cluster 命令
  • 添加节点
    redis-cli --cluster  add-node  new_host:new_port existing_host:existing_port 
                                   --cluster-slav
                                   --cluster-master-id <arg>
    
  • 删除节点
    redis-cli --cluster del-node host:port node_id 
    
  • 重新分片
    redis-cli --cluster reshard   host:port
                                  --cluster-from <arg>
                                  --cluster-to <arg>
                                  --cluster-slots <arg>
                                  --cluster-yes
                                  --cluster-timeout <arg>
                                  --cluster-pipeline <arg>
                                  --cluster-replace
    
    
  • 更多的命令可通过如下命令查看
    redis-cli --cluster help
    
Cluster集群结构搭建具体步骤

1、在服务器配置文件中配置cluster。
在这里插入图片描述

2、配置好cluster以后对应修改端口和配置文件名复制多个配置文件

sed "s/6379/6380/g" redis-6379.conf > redis-6380.conf

在这里插入图片描述

3、将服务器6379到6384全部启动。
在这里插入图片描述

4、通过如下命令来搭建cluster集群

redis-cli --cluster create 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 --cluster-replicas 1

–cluster-replicas 1 后面是1代表一个master连一个slave
–cluster-replicas 2 后面是2代表一个master连两个slave
在这里插入图片描述

在这里插入图片描述

5、测试集群搭建是否成功,搭建集群后连接服务器需要加上 -c

如连接6379服务器命令如下:

redis-cli -c -p 6379

连接6379服务器设置数据
在这里插入图片描述

连接6380服务器获取数据
在这里插入图片描述

在这里插入图片描述

[root@192 conf]# redis-cli -c -p 6379
127.0.0.1:6379> set name qingbo
-> Redirected to slot [5798] located at 127.0.0.1:6380
OK
127.0.0.1:6380> 

可以看到,在 6379 端口的服务器上存储一个string类型的键值对 name = qingbo 的时,操作被重定向到了 6380 端口的服务器上,而 name = qingbo 这个键值对最终也被存储在了 6380 端口的服务器里。

同理,在获取数据时,也会重定向到对应数据实际存储的服务器上,然后在该服务器上进行操作。
在这里插入图片描述

[root@192 ~]# redis-cli -c  -p 6380
127.0.0.1:6380> get name
"qingbo"
127.0.0.1:6380> 
集群构建中出现的问题及解决办法

一、搭建Redis集群出现
[ERR] Node 127.0.0.1:6379 is not empty,Either the node already knows other nodes
问题

其解决办法:
1、修改配置文件将dbfilename dump-6379.rdb和appendfilename "appendonly-6379.aof"两行注释掉,以此类推将后面用于搭建集群的服务器的每个节点的配置文件中的对应.rdb和.aof注释掉或者删除
在这里插入图片描述

2、关掉Redis集群之前启动的各个实例的进程,重新启动。

3、启动好以后再次执行如下命令构建集群

redis-cli --cluster create 127.0.0.1:6379 127.0.0.1:6380 127.0.0.1:6381 127.0.0.1:6382 127.0.0.1:6383 127.0.0.1:6384 --cluster-replicas 1

在这里插入图片描述

在这里插入图片描述

二、客户端连接 redis-cluster(Redis集群时)操作数据时出现(error) MOVED 5798 127.0.0.1:6380
错误

其原因是:因为客户端在连接 Redis 服务器时启动redis-cli时没有设置集群模式所导致,启动的时候使用-c参数来启动集群模式,即带上参数 -c 即为连接到cluster集群,命令如下:

redis-cli -c -p 6379

在这里插入图片描述

[root@192 conf]# redis-cli -c -p 6379
127.0.0.1:6379> set name qingbo
-> Redirected to slot [5798] located at 127.0.0.1:6380
OK
127.0.0.1:6380> 

可以看到,在 6379 端口的服务器上存储一个string类型的键值对 name = qingbo 的时,操作被重定向到了 6380 端口的服务器上,而 name = qingbo 这个键值对最终也被存储在了 6380 端口的服务器里。

同理,在获取数据时,也会重定向到对应数据实际存储的服务器上,然后在该服务器上进行操作。
在这里插入图片描述

[root@192 ~]# redis-cli -c  -p 6380
127.0.0.1:6380> get name
"qingbo"
127.0.0.1:6380> 

三、搭建集群时报错[ERR] Not all 16384 slots are covered by nodes.
其原因:
这个往往是由于主node移除了,但是并没有移除node上面的slot,从而导致了slot总数没有达到16384,其实也就是slots分布不正确。所以在删除节点的时候一定要注意删除的是否是Master主节点。
解决办法:
1、使用如下命令来修复集群

# redis-cli --cluster fix host:port
redis-cli --cluster fix 127.0.0.1:6379 

2、修复完成后再用check命令检查下是否正确,其命令如下:

# redis-cli --cluster check host:port
redis-cli --cluster check 127.0.0.1:6379

3、如果分布不均匀那可以使用下面的方式重新分配slot

# redis-cli --cluster reshar host:port
redis-cli --cluster reshard 127.0.0.1:6379

确,其命令如下:

# redis-cli --cluster check host:port
redis-cli --cluster check 127.0.0.1:6379

3、如果分布不均匀那可以使用下面的方式重新分配slot

# redis-cli --cluster reshar host:port
redis-cli --cluster reshard 127.0.0.1:6379
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值