Redis在项目中如何用的,如何实现高可用

举报
小小张自由--张有博 发表于 2022/05/23 11:50:05 2022/05/23
【摘要】 Redis在项目中如何用的,如何实现高可用

(1)数据持久化

AOF 方式(快照恢复)

RDB 方式(只追加文件)


( 2)主从同步(主从复制)


有一主节点和多个从节点,多个节点组成一个 Redis 集群,在这个集群主节点用来进行数据的操作,其他从节点用于同步主节点的内容,并且提供给客户端进行数据查询。


使用主从模式就可以实现数据的读写分离,把写操作的请求分发到主节点上,把其他的读操作请求分发到从节点上,这样就减轻了 Redis 主节点的运行压力,并且提高了 Redis 的整体运行速度。不但如此使用主从模式还实现了 Redis 的高可用,当主服务器宕机之后,可以很迅速的把从节点提升为主节点,为 Redis 服务器的宕机恢复节省了宝贵的时间。并且主从复制还降低了数据丢失的风险,因为数据是完整拷贝在多台服务器上的,当一个服务器磁盘坏掉之后,可以从其他服务器拿到完整的备份数据。

原理总结

Slave启动成功连接到master后会发送一个sync命令

Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集命令, 在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步

全量复制:而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中。第一次连接

增量复制:Master继续将新的所有收集到的修改命令依次传给slave,完成同步。主从复制时

但是只要是重新连接master,一次完全同步(全量复制)将被自动执行

slave节点初次连接master节点,会发送psync命令并触发全量复制。

此时master节点fork一个后台进程,开始生成一份RDB快照,同时将那些从外面接收到的写命令缓存到缓冲区中。

RDB文件生成完毕后,将此文件发送给slave节点,slave先写入磁盘,再从磁盘加载到内存,

接着master会将新增加的缓冲区的写命令发送给slave,slave执行写命令并同步数据。

如果slave节点和master节点因网络故障断开连接,会自动重连,连接之后master节点会复制缺少的数据给slave节点。

常见三种使用方式

主仆模式

从服务器重启之后,需要重新连接主服务器,才能成为从服务器

从服务器重新连接之后,会复制主机的全部内容

主服务器重启之后,还是主服务器。

薪火相传

父传子,子传孙

上一个Slave可以是下一个slave的Master,Slave同样可以接收其他slaves的连接和同步请求,那么该slave作为了链条中下一个的master, 可以有效减轻master的写压力,去中心化降低风险。

反客为主

当一个master宕机后,后面的slave可以立刻升为master,其后面的slave不用做任何修改。

用slaveof no one 将从机变为主机。

主机挂掉,反客为主。需要运维人员输入命令

想要解决这个困扰。就看看哨兵模式

slaveof  no one  


(3)Redis 哨兵模式(Sentinel)


Redis 哨兵模式就是用来监视 Redis 主从服务器的,当 Redis 的主从服务器发生故障之后,Redis 哨兵提供了自动容灾修复的功能。

复制延时

由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。

故障恢复



(4)Redis 集群(Cluster)

Redis 集群实现了对Redis的水平扩容,即启动Nredis节点,将整个数据库分布存储在这N个节点中,每个节点存储总数据的1/N

Redis 集群通过分区(partition)来提供一定程度的可用性(availability): 即使集群中有一部分节点失效或者无法进行通讯, 集群也可以继续处理命令请求。

一个集群至少要有三个主节点

一个Redis 集群包含 16384 个插槽(hash slot), 数据库中的每个键都属于这 16384 个插槽的其中一个,

集群使用公式CRC16(key) % 16384 来计算键 key 属于哪个槽, 其中 CRC16(key) 语句用于计算键key CRC16 校验和

集群中的每个节点负责处理一部分插槽。 举个例子, 如果一个集群可以有主节点, 其中:

节点A 负责处理 0 号至5460 号插槽。

节点B 负责处理 5461 号至10922 号插槽。

节点C 负责处理 10923 号至16383 号插槽。


总结

(1)数据持久化保证了数据不丢失;

(2)Redis 主从同步让 Redis 从单机变成了多机。它有两种模式:主从模式和从从模式,但当主节点出现问题时,需要人工手动恢复系统;

(3)Redis 哨兵模式用来监控 Redis 主从模式,并提供了自动容灾恢复的功能。

(4)Redis 集群,除了可以提供主从和哨兵的功能之外,还提供了多个主从节点的集群功能,这样就可以把数据均匀的存储各个主机主节点上,实现了系统的横向扩展,大大提高了 Redis 的并发处理能力。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。