redis集群日志_Redis#集群(十)

f0b30aa666a6b90c09d53d0778779ec6.png

业务发展过程中遇到的峰值瓶颈

  • redis提供的服务OPS可以达到10万/秒,当前业务OPS已经达到10万/秒
  • 内存单机容量达到256G,当前业务需求内存容量1T
  • 使用集群的方式可以快速解决上述问题

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

0d136346327ef87e0135af0fc6e61936.png

作用:

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

4efd671b945cc4472afa33c1dfe0b462.png

Redis集群结构设计

单机:

d6594ec756c885d5ed169365b7d0add4.png

集群如何设置?

874dbc2cfd19cd478f3eedf22dabd446.png

Redis提供一个函数将key转换成一个值(类似于hash值),在通过%16384得到一个数(对Redis进行16384的等分,每一份代表一个存储空间,每台计算机保存若干台空间),假设为37,这个37用来确定该数据在集群中存在的位置

e6ccaa590637cfd78be78e57fedf398a.png

如果一台计算机宕机,或者新加入一台计算机之后该怎么办?

假设,目前有三个台机器,现在又加了一台机器

2ee17b4f54be2bffb10d723dc332a4f3.png

其会优化,将每个Redis机器的数据都拿出一部分给到新的Redis中的存储空间

ccf299ff8b48a9f969731b4974ea39ba.png

之前所计算出的37,称之为---槽

集群内部通讯设计

假设目前有三台机器互联,每台计算机中都有与之相连的各个计算机中存储空间的槽是几到几

8c7bb84659ae501907a01b95eb00145e.png

假设现在来发过来一条指令key,这个key通过两次算法计算出对应的存储槽的位置,会根据槽位置在该指令所访问的机器中寻找槽的位置是在哪太机器,然后让指令直接去B机器(找到槽的机器)中找,可以保证最多两次访问就可以找到槽的位置

a115bc0bffa0af71f6d3cbc9b127ac08.png

Cluster集群搭建

配置三主三从的结构

添加配置,当Redis称为集群中的一个节点

4ee4a937f65f2edc208e71b402b3c2fa.png
开启cluster
配置cluster配置文件名
设置下线时间

配置6379~6385端口号的机器

启动6379服务器:

639f0355861b5a2dda71b8294f6b4c84.png

启动6380服务器:

e387370602a7c3102aabed4427cb965c.png

依次启动6379~6384

检查是否成功,是否以结点方式出现

4eec78b70aa0bc20cd4104b666118a13.png

使用redis-trib.rb指令创建集群

--replicas:指定集群的内部结构
1:一个master连接一个slave
2:一个master连接两个slave
127.0.0.1:6379:master的地址,按照数量识别,写6个地址那么前三个就是maste后三个就是slave

ba0fba887a0e4ad9a143e1ed780fc2b5.png

在继续执行之前(输入yes之前)已经生了一些配置文件

984722e17b422888f9fae13423457638.png

3d502683f2845297afbc0a857091d0af.png
目前只包含自己节结点的信息,因为此时还没有输入yes,即所有机器还没有真正的连接成集群

输入yes:

76352d4620d1e9f9cb41bdc1820b108b.png

此时再去查看配置文件:

67d84b80d7866835541e80d82108321c.png

49728508477617728b5a9a313d3409d0.png

发现此时的配置文件记录的信息理论上都是相同的,此时cluster集群已经搭建完成

6a5fb9bcad1f43a2e2ace30b57d5de65.png

393e0bb805f67529f84f4c46cfccd2c4.png

此时集群已经全部搭建完成

数据测试:

在6379机器上测试,发现数据报错,让其移动到5798这个槽中去操作数据,即对name进行转换之后所对应的的槽是5798,如果想要就该name只能去换到6381机器上

b9eea28f57f33e5f62c6b42104f2e4d0.png

通过 -c 参数可以解决这个问题:

355c7108115288b941891b763889177f.png

在6382机器中去查询name值:

e7be6282c415faf3a31795c16033f0d3.png

主从下线与主从切换

  • salve出现问题:宕机

salve宕机之前,先看一下master日志的信息,最后是synchronize

44c0001d584e9d758b0d2f827c32d9e6.png

slave最后的日志是:background

c98ba383058faefdea4693f86a9e01d4.png

将6382的slave停机:

120eca82548706b07c42cb45915da680.png

查看8379的master:因为设置的是10秒才认为slave下线,所以在10秒内的日志:

49fa116c960686ddf163d4a1b3924350.png

6380的机器日志:收到了一个关于6379和6382机器的消息

333799f8c275e61b270379a2c8ccb5e5.png

现在将宕机的slave连接上来,并再次查看6379主机

41a8ccf30f44374b8d88362190d34ad1.png

即slave下线之后,对应的master为其标记为下线状态,当slave再次上线之后再恢复数据的同步

现在将6379的master停机,并查看对应的6382从节点

14082103c2377b241f6ec07bd89cd3f6.png
即1s重试一次

如果10次只有还是没有重连成功:

c72019fea66056af8ff53193f1a83a49.png

在客户端中查询结点信息:

2c7f158c486c023faf0c14bb9f6465de.png

只是标记为失败,因为有可能恢复

此时将6379的master恢复

bed28bbd23f030b592eeee994e246d16.png

查看6382的日志:

1f311b712fa47b95d3fc770d41f5aba5.png

总结:

ce2bc62d90c82d54ea09f1de69ad4b47.png

6b1acb4ab068e44b8916946dff2b7dcf.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值