Redis学习笔记(十):Redis集群-结构设计、集群搭建、集群操作、主从下线、主从切换

Redis学习笔记系列

简介

在业务发展过程中遇到峰值瓶颈,比如redis提供的服务可达10万/秒,但是当前业务已经达到20万/秒,或者业务需求内存容量已经超过单机内存…这个时候,就需要使用集群的方式快速解决上述问题
集群作用:

  • 分散单台服务器的访问压力,实现负载均衡
  • 分散单台服务器的存储压力,实现可扩展性
  • 降低单台服务器宕机带来的业务灾难
    在这里插入图片描述

redis集群结构设计

数据存储设计

  • 通过算法设计,计算出key应该保存的位置,官方叫法:槽
  • 将所有的存储空间计划切割成16384份,每台主机保存一部分,每份代表的是一个存储空间,不是一个key的保存空间
  • 将key按照计算出的结果放到对应的存储空间
    在这里插入图片描述
    集群内部通讯设计
  • 各个数据库相互通信,保存各个库中槽的编号数据
  • 一次命中,直接返回
  • 一次未命中,告知具体位置
    在这里插入图片描述

redis集群搭建

  • 需要在redis.conf中添加以下配置
 cluster-enabled yes  # 设置加入cluster,成为其中的节点
 cluster-config-file nodes-端口号.conf # cluster配置文件名,该文件属于自动生成,仅用于快速查找文件并查询文件内容
 cluster-node-timeout 10000 # 节点服务响应超时时间,用于判定该节点是否下线或切换为从节点
 cluster-migration-barrier 1 # master连接的slave最小数量

范例(启动6个redis,三主三从,每个主挂一个从,端口6379-6384):

  1. 将上述配置文件redis.conf配置分别配置6个redis(可使用命令快捷复制:sed "s/6379/6380/g" redis-6379.conf > redis-6380.conf),并各启动这6个redis
  2. 查看所有Redis是否都启动成功 ps -ef | grep redis
    在这里插入图片描述
  3. 将所有redis连接到一起,使用redis/src/redis-trib.rb,该文件启动的前提是系统安装了ruby和rubygems
./redis-trib.rb create --replicas 1 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
# create:代表创建
# 1:数字,代表每个master挂多少个slave
# ip:port:cluster会根据你配置的每个master挂多少个slave,自己计算,哪些是master,哪些是slave,比如上述,一共配置了6个ip:port,那么前3个为master,后3个为slave

在这里插入图片描述

  1. 这个时候可以在redis的数据文件查看生成了6个nodes-端口号.conf的配置文件,可以通过cat查看
    在这里插入图片描述
  2. 在第3步继续输入yes

在这里插入图片描述

  1. 此时redis的集群就已经启动成功,我们可以回到第4步查看,这个时候nodes-端口号.conf发生了什么变化
    在这里插入图片描述
    这个时候,nodes-端口.conf记录了集群中所有redis的信息,包括哪个是自己,哪些是master,哪些是slave

redis设置和获取数据

  • 如果还是使用以前的命令连接redis服务器redis-cli,然后往redis里set数据,则会报错,因为这个时候计算name的槽是5798,位于6380的redis上,而你此时是在6379的redis,设置值失败
    在这里插入图片描述
  • 需要添加-c表明这是连接到cluster的redis客户端redis-cli -c,这个时候,计算出的name的槽是5798,属于6380的redis,那么它自动会将重定向到6380的redis上
    在这里插入图片描述

redis集群主从下线与主从切换

slave掉线

如果slave意外掉线了,那么他的master可以识别到,识别时间就是以上配置集群超时时间,这个时候,它的master会打印日志:

Connection with slave 127.0.0.1:6382 lost. # 连接的slave丢失
Marking node 715ea09a37c933e6d3a3acvd97ds5e3e951de6e7 as failing (quorum reached) # 将这个runid的节点标记为丢失
而其它master和slave节点会打印日志:注明runid到runid的失败接收信息
在这里插入图片描述

slave又上线恢复了

这个时候,该slave的master又把这个slave连上,并同步数据
在这里插入图片描述
而其它master和slave会标注清除该节点失败记录,恢复连接
在这里插入图片描述

master 掉线

如果master意外掉线,那么连接它的slave会识别到,并不断去重连master,每1秒连接一次,一共连接多少次,这个要看配置集群的超时时间,超时了还没连上master,那么自己谋朝篡位,自己当master
在这里插入图片描述
可以通过命令 cluster nodes查看节点情况,这个时候,可以发现,原来的master已经标记失败,自己变成了master
在这里插入图片描述

master又上线恢复了

当master又恢复上线,这个时候,它就只能当slave了,而它的master就是之前自己的那个slave,并开始同步数据
在这里插入图片描述

cluster节点操作命令

  • 查看集群节点信息

cluster nodes

  • 进入一个从节点redis,切换其主节点

cluster replicate <master-ip>

  • 发现一个新节点,新增主节点

cluster meet ip:port

  • 忽略一个没有solt的节点

cluster forget <id>

  • 手动故障转移

cluster failover


- 捐赠 -


如果觉得还不错,请我喝杯水吧 ^ _ ^ 您的鼓励是我不断前进的动力,如果有错误的地方,欢迎提出批评改正意见,戳我,感谢您的支持

支付宝微信
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值