Redis数据库主从复制与级联复制

消息队列

消息队列: 把要传输的数据放在队列中

功能: 可以实现多个系统之间的解耦,异步,削峰/限流等 常用的消息队列应用: kafka,rabbitMQ,redis

消息队列主要分为两种,这两种模式Redis都支持

生产者消费者模式

模式介绍

队列介绍

生产者发布消息

查看队列所有消息

消费者消费消息

再次验证队列消息

发布者订阅模式

模式简介

Publisher:发布者

Subscriber:订阅者

Channel:频道

订阅者监听频道

发布者发布消息

各个订阅者都能收到消息

订阅多个频道

订阅所有频道

订阅匹配的频道

取消订阅

redis 集群与高可用

虽然Redis可以实现单机的数据持久化,但无论是RDB也好或者AOF也好,都解决不了单点宕机问题,即 一旦单台 redis服务器本身出现系统故障、硬件故障等问题后,就会直接造成数据的丢失

此外,单机的性能也是有极限的,因此需要使用另外的技术来解决单点故障和性能扩展的问题。

redis 主从复制

redis 主从复制架构

主从复制特点

主从复制实现

参考案例: 导致主从服务器数据全部丢失

在关闭主服务器上的持久化,并同时开启自动拉起进程的情况下,即便使用Sentinel来实现Redis的高可 用性,也是非常危险的。因为主服务器可能拉起得非常快,以至于Sentinel在配置的心跳时间间隔内没 有检测到主服务器已被重启,然后还是会执行上面的数据丢失的流程。无论何时,数据安全都是极其重要的,所以应该禁止主服务器关闭持久化的同时自动启动。

命令行配置

启用主从同步

默认redis 状态为master,需要转换为slave角色并指向master服务器的IP+PORT+Password 在从节点执行REPLICAOF MASTER_IP PORT 指令可以启用主从同步复制功能,早期版本使用 SLAVEOF指令(注意防火墙问题Firewalld)

范例:

范例:

删除主从同步

在从节点执行 REPLIATOF NO ONE 指令可以取消主从复制

同步日志

在 master 上观察日志

在 slave 节点观察日志

修改slave节点配置文件

范例: (CentOS8 注意防火墙问题)

master和slave查看状态

slave 观察日志

Master日志

slave 状态只读无法写入数据

主从复制故障恢复

主从复制故障恢复过程介绍

slave 节点故障和恢复

当 slave 节点故障时,将Redis Client指向另一个 slave 节点即可,并及时修复故障从节点

master 节点故障和恢复

需要提升slave为新的master

master故障后,只能手动提升一个slave为新master,不支持自动切换。 之后将其它的slave节点重新指定新的master为master节点 Master的切换会导致master_replid发生变化,slave之前的master_replid就和当前master不一致从而会引发所有 slave的全量同步。

主从复制故障恢复实现

假设当前主节点172.31.0.8故障,提升172.31.0.18为新的master

停止slave同步并提升为新的master

测试能否写入数据:

修改所有slave 指向新的master节点

在新master可看到slave

实现 redis 的级联复制

即实现基于Slave节点的Slave master和slave1节点无需修改,只需要修改slave2及slave3指向slave1做为mater即可

在 master 设置key,观察是否同步

在中间那个slave查看状态

主从复制优化

主从复制过程

Redis主从复制分为全量同步和增量同步

主从同步完整过程

具体主从同步过程如下:

复制缓冲区(环形队列)配置参数:

避免全量复制

避免复制风暴

主从同步优化配置

Redis在2.8版本之前没有提供增量部分复制的功能,当 络闪断或者slave Redis重启之后会导致主从之间的全量同步,即从2.8版本开始增加了部分复制的功能。

性能相关配置

常见主从复制故障汇总

master密码不对

即配置的master密码不对,导致验证不通过而无法建立主从同步关系。

Redis版本不一致

不同的redis 大版本之间存在兼容性问题,比如:3和4,4和5之间,因此各master和slave之间必须保持版本一致

无法远程连接

在开启了安全模式情况下,没有设置bind地址或者密码

配置不一致

主从节点的maxmemory不一致,主节点内存大于从节点内存,主从复制可能丢失数据 rename-command 命令不一致,如在主节点定义了fushall,flushdb,从节点没定义,结果执行flushdb,不同步

文章知识点与官方知识档案匹配,可进一步学习相关知识MySQL入门技能树数据库组成32256 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年10月11日
下一篇 2021年10月11日

相关推荐