redis_07_redis的集群搭建初步学习

1. 集群(cluster)

1.1cluster的架构

在这里插入图片描述

  • redis的节点之间有通信,互相通信
  • 每一个client可以指定任意一个节点
  • 所有的节点彼此互联(ping-pong机制),内部使用二进制协议传输速度和带宽
  • 节点的fail是集群中超过半数的节点检测时效时才生效(当怀疑一个节点的数量操作半数才认为宕机,才失效)
  • client与redis节点直连,不需要中间的proxy层(代理层),客户端不需要连接集群所有节点,连接集群中的任何一个节点可用。
  • redis_cluster把所有物理节点映射[0-16383]slot插槽,cluster负责维护node<->slot<->value

1.2配置集群cluster

  • 这里设置三个redis节点6379 6380 6381
  • 他们分别的的配置文件是redis6379.conf redis6380.conf redis6381.conf

1.2.1 修改redis6379.conf

  • 设置不同的端口 port (因为在一机子上面测试,部署集群,所以设置不同端口,但是集群一般在很多机器上,每一个机器就是一个节点,不需要设置不通的端口)port 6379
    在这里插入图片描述
  • 记得设置集群密码,要设置,如果不弄会报错,所以还是设置吧
    https://blog.csdn.net/qq_39135287/article/details/84189397
    (引用别人的文章 终于在它哪里找到了我想要的 我的redis的5.x 这个老哥的版本是5.x的很全面)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • ==记得把bind 127.0.0.1==注释掉 坑。
  • 开启集群 cluster-enabled yes默认是注释了的
    在这里插入图片描述
  • 指定集群的配置文件cluster-config-file "nodes-6379.conf"(这个文件不需要去处理,只需要给他指定就可以,它自动管理的)
    在这里插入图片描述
  • 启动这个redis6379 ./bin/redis-server redis6379.conf,并查看进程ps -ef | grep redis,会提示有cluster
    -
  • 6380 6381都如此设置,并关闭master的主从复制的内容
    在这里插入图片描述

1.2.2 创建集群


创建集群终于开始了

  • 进去redis安装包下的src目录
    在这里插入图片描述
  • 执行命令./redis-cli --cluster create 192.168.91.132:6379 192.168.91.132:6380 192.168.91.132:6381 --cluster-replicas 0 -a 123456redis5.0以上使用redis-cli
    注意不能使用127.0.0.1否则客户端jedis无法连接。--replicas 0表示从库的数量为0,-a 123456因为我们设置了集群密码,所以要使用密码来访问,不然会报下面的错误
    在这里插入图片描述
    https://blog.csdn.net/weixin_37882382/article/details/83538367
  • 最后成功了?不二话 上图
    在这里插入图片描述

1.2.3 一些命令的学习

  • ./redis-cli --cluster help可以查看帮助命令 现在的我不大看的懂 嗯 加油吧

1.2.4 集群的测试

  • 建立连接./bin/redis-cli -p 6379 -a 123456
    在这里插入图片描述
  • “yes”不是“y” 没有分配slot,错误如下(error) CLUSTERDOWN Hash slot not served
    在这里插入图片描述在这里插入图片描述
  • (error) MOVED 7638 192.168.91.132:6380
    在这里插入图片描述
  • quit退出,在之前重新建立连接./bin/redis-cli -c -p 6379 -a 123456
    -c之间计算出来key的插槽值应该存放在6380中,但是我们进入的是6379,为了方便,我们需要设置-c,它的主要作用是根据计算的插槽进行重定向到满足key的节点中去。redirected
    在这里插入图片描述在这里插入图片描述

1.3 ip地址变更后的种种问题 node xxx is not empty ...

在这里插入图片描述
(回家一趟,ip地址改变了 就很伤脑壳,再次打开就有了这个错误。但是之前是有是生成的appendonly.aof,nodesxx.conf 以及dump,所以的全部删除,加上每一个node几面要flushdb``cluster reset重新启动redis-server 才能解决问题)

  • 删除appendonly.aof``dump.db``nodes-xxx.conf
    在这里插入图片描述
    在这里插入图片描述
  • flushdb``cluster reset
    -
  • 重新启动
    在这里插入图片描述

2.插槽

  • cluster nodes可以查看节点的详细信息,包括节点id,ip port ,插槽的范围
    在这里插入图片描述
  • 如果插槽数找不到对应的节点,那么这些插槽数就的key就不能使用

2.1 插槽与节点

计算key的插槽值:

  • key的有效部分使用CRC16算法计算哈希值,再将哈希值对16384(16384=总的可以容纳的插槽总数/总的节点数)取余,得到插槽值

有效部分?

  • 如果key中包括{符号,且在{符号后面存在}符号,并且{}之间至少存在一个字符,则有效部分是指{}之间的部分 key=lala{hello}_lala 有效部分hello
  • 如果上面为false,则整个key都有效部分 lala{hello_lala 有效部分 lala{hello_lala

2.2 新增集群结点

  • 添加新增结点6382的conf文件,并修改相应的参数
  • 将6382启动(此时在cluster nodes中并没有出现,只是启动了服务器)
  • ./redis-cli --cluster add-node 192.168.91.135:6382 192.168.91.135:6379:将结点6382加入到有6379的集群中·(此时cluster nodes出现6382结点,但是并没有插槽值的范围,它只是将结点加入到集群中,并没有给他分配插槽的范围)
    在这里插入图片描述
  • 给6382分配插槽./redis-cli --cluster reshard 192.168.91.135:6382 -a 123456 通过done的方式分配 在source node #1:id 可以写多个 通过done结束
    在这里插入图片描述
  • 分配的结果
    在这里插入图片描述

2.3 删除集群结点

  1. 将这个节点上的1所有插槽值转移到其他节点上(保证完整性)
    a) 通过./redis-cli --cluster reshard 192.168.91.135:6382 -a 123456的(与分配相似)的方式来转移插槽节点数量
    在这里插入图片描述
  2. 第一步操作只是将插槽的数量全部移除6382,但是6382节点还在集群中cluster nodes还是可以查看到,所以删除集群中的节点
    ./redis-cli --cluster del-node ip:port id -a password
    在这里插入图片描述

2.4 集群结点宕机–故障转移

这里假设让6381节点宕机··kill -9 3074在这里插入图片描述

  • 6381节点宕机之后,但是cluster nodes里面6381依旧存在 但是fail失效,因为集群结点相互监督,只要超过半数以上认为它失效,便故障(这时候,只要有一个结点宕机,整个集群就不能工作)
    在这里插入图片描述
    在这里插入图片描述

2.4.1 集群故障机制

  • 集群中的每一个节点会定期的向其他节点发送ping命令,并且通过没有收到回复判断目标节点是否下线
  • 集群中的每一秒会随机选择5个结点,并选择其中最久没有响应的节点放ping命令
  • 如果一定时间内没有响应,则判断该目标节点为疑似下线
  • 当集群中的节点超过半数认为该目标几点疑似下线,那么该节点会被标记为下载
    -** 当集群中任何一个节点下线,就会导致插槽区空挡,不完整,则该集群不可用**

2.4.2 解决故障

a) 在redis集群中可以使用主从模式实现某一个节点的高可用
b)当该节点(master)宕机后,集群会将该节点的从库(slave)转成(master)继续完成集群服务
集群中的主从复制结构图
查看前面的主从复制
主从复制,宕机

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值