当前位置:   article > 正文

redis 07 篇——redis集群(Cluster)_redis cluster集群

redis cluster集群

1.前言

1.1 redis 复制

1.2 redis 哨兵

2. redis 集群概述

2.1 Redis 分布式扩展之 Redis Cluster 方案

  • 主从切换的过程中会丢失数据,因为只有一个 master,只能单点写,没有解决水平扩容的问题。而且每个节点都保存了所有数据,一个是内存的占用率较高,另外就是如果进行数据恢复时,非常慢。而且数据量过大对数据 IO 操作的性能也会有影响。

    所以我们同样也有对 Redis 数据分片的需求,所谓分片就是把一份大数据拆分成多份小数据,在 3.0 之前,我们只能通过构建多个 redis 主从节点集群,把不同业务数据拆分到不冉的集群中,这种方式在业务层需要有大量的代码来完成数据分片、路由等工作,导致维护成本高、增加、移除节点比较繁琐。

    Redis3.0 之后引入了 Redis Cluster 集群方案,它用来解决分布式扩展的需求,同时也实现了高可用机制。

  • 参考下面的文章
    Redis Cluster 集群详解.

2.2

2.3 redis集群槽位 和 分片

2.3.1 redis集群槽位

2.3.2 redis 集群分片

3. redis 集群架构

  • redis的集群模式中可以实现多个节点同时提供写操作,redis集群模式采用无中心结构,节点之间互相连接从而知道整个集群状态。
  • redis 集群采用了多主多从,按照一定的规则进行分片,每个节点都保存数据,将数据分别存储,一定程度上解决了哨兵模式下单机存储有限的问题。
  • 下面我这里采用的是三主三从的架构模式,由于硬件问题,主从都配置到了同一台服务器上,所以一共是三台服务器,启动6个redis实例
  • 架构图如下:
    在这里插入图片描述

4. redis 集群配置文件

  • 这里提供其中一个配置,剩下的把端口改一下即可,如下:
    bind 0.0.0.0
    protected-mode yes 
    port 6372
    daemonize yes
    pidfile /var/run/cluster6372.pid
    logfile "/home/susu/soft/mkinstall/redis/redis-6.0.16/logs/cluster6372.log"
    
    dir /tmp   
    
    requirepass redis123
    masterauth redis123
    
    dbfilename "dump6372.rdb"
    
    cluster-enabled yes
    cluster-config-file nodes-6372.conf
    cluster-node-timeout 15000
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

5. redis集群实例演示

5.1 启动集群 redis 实例

  • 启动命令如下:
    ./redis-server ../redisConfig/cluster/cluster6379.conf
    
    • 1
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

5.2 构建集群关系

  • 执行如下命令:
    redis-cli -a redis123 --cluster create --cluster-replicas 1 IP1:6372 IP1:6374 IP2:6373 IP2:6376 IP3:6379 IP3:6378
    
    • 1
    在这里插入图片描述
  • 成功之后,看到下面的界面(此步骤如果有问题,看下面《6.0 解决遇到的问题》小节)
    在这里插入图片描述
  • 查看工作目录:
    在这里插入图片描述

5.3 查看角色关系

  • 通过 info replication 命令查看角色关系可知,每个 master 下挂的 salve 是随机的,如下:
    在这里插入图片描述
    在这里插入图片描述

5.5 集群写操作演示

  • 这个不演示了,如果遇到问题,看下面的 6.2 小节即可

5.6 主从容错切换

  • 集群中一个节点的 master 的如果下线的话,其从机会成为新的master,主机重新上线后,变成其slave,主从关系也不会切换回来。如下,73挂了78就上位:
    在这里插入图片描述

5.7 redis 集群扩容

  1. 先添加节点,添加节点的命令:
    ./redis-cli -a redis123 --cluster add- node newIp:newPort 引荐IP:引荐IP的端口
    
    ./redis-cli -a redis123 --cluster add- node IP4:6370 IP1:6372
    
    • 1
    • 2
    • 3
  2. 然后再重新分配槽位,命令如下:
    ./redis-cli -a redis123 --cluster reshard IP1:6372 # 操作机器上的IP和端口
    
    • 1
  3. 给 master 添加slave,命令如下:
    ./redis-cli -a redis123 --cluster add-node new_slave_ip:new_port master_ip:master_port --cluster-slave --cluster-master-id master的集群节点ID
    
    • 1
    备注:master 的集群节点ID可以通过 cluster nodes 查看(即:6372的节点ID就是前面那堆uuid):
    在这里插入图片描述

5.8 redis 集群缩容

  1. 删除从节点:
    ./redis-cli -a redis123 --cluster add-node 要删除的slave的IP:端口 slave节点的uuid
    
    • 1
  2. 从节点删除后,将主节点的槽号清空,重新分配(清出的槽号可以指定给其他的master),执行下面命令,然后跟着提示操作即可:
    ./redis-cli -a redis123 --cluster reshard IP1:6372 # 操作机器上的IP和端口
    
    • 1
  3. 将清空槽号的主节点也删除:
    注意:上面清空之后,这个主节点会变身slave 挂在其中一个master 下:
    如果,降此节点删除的话,按上面步骤1的删除从节点的操作即可。
  4. 在任意一台集群机器上,查看集群槽位情况
    ./redis-cli -a redis123 --cluster check IP3:6373
    
    • 1

6. 解决遇到的问题

6.1 Waiting for the cluster to join

  • 问题如下:
    卡在 Waiting for the cluster to join 这里不动了:
    在这里插入图片描述
  • 问题原因:
    • 遇到这种情况大部分是因为集群总线的端口没有开放!

    • 关于集群总线

      Redis集群中的每个节点都需要打开两个TCP连接。一个连接用于正常的给Client提供服务,比如 6379,那么对应的还有一个额外的端口就是16379作为数据端口。
      这个作为数据端口是在6379端口端号上加10000。

      例如:redis的端口为 6379,那么另外一个需要开通的端口是:6379 + 10000, 即需要开启 16379
      16379 端口用于集群总线,这是一个用二进制协议的点对点通信信道。这个集群总线(Cluster bus)用于节点的失败侦测、配置更新、故障转移授权,等等。

  • 解决问题:
    开放16379等端口即可:
    sudo firewall-cmd --add-port=16370-16379/tcp --permanent
    firewall-cmd --reload
    firewall-cmd --list-all
    
    • 1
    • 2
    • 3
    在这里插入图片描述
  • 上述端口开发之后,再确认问题,已经解决:
    在这里插入图片描述

6.2 (error) MOVED 1096 IP1:6372

  • 问题如下:
    在这里插入图片描述
  • 问题原因:
    因为三个master 的槽位有一定的分配,上面图片里需要的槽位是 1096,而给6379这个master 分配的槽位范围是 10923-16383
    在这里插入图片描述
  • 解决问题:
    • 那么上面问题怎么解决呢?
      连接客户端的时候加 -c 参数即可,防止路由失效。
      -c 参数:启用集群模式(遵循-ASK 和 -MOVED重定向)
    • -c 参数再次连接就没问题了,如下:
      ./redis-cli -p 6379 -a redis123 -c
      
      • 1
      在这里插入图片描述

7. 总结

7.1 核心命令

  • 构建集群关系命令:
    redis-cli -a redis123 --cluster create --cluster-replicas 1 IP1:6372 IP1:6374 IP2:6373 IP2:6376 IP3:6379 IP3:6378
    
    • 1
  • 查看主从角色:
    info replication
    
    • 1
  • 查看集群节点关系:
    cluster nodes
    
    • 1
    在这里插入图片描述
  • 查看集群信息
    cluster info
    
    • 1
    在这里插入图片描述
  • 查看 key 所在槽位:
    cluster keyslot key
    cluster keyslot catName
    
    • 1
    • 2
    在这里插入图片描述
  • 主动手工切换主从节点命令,如果想让因故障下线后的 master 上线后继续是master 角色,执行下面的命令(此命令要在 slave 上执行)
    cluster failover
    
    • 1
    在这里插入图片描述
  • 查看集群的槽位情况,以及存储情况
    ./redis-cli -a redis123 --cluster check IP3:6373
    
    • 1
    在这里插入图片描述

7.2

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/695464
推荐阅读
相关标签
  

闽ICP备14008679号