【11月10日】Redis 主从复制技术
(Remind) MySQL 主从复制的方式
MySQL 数据库支持的主从复制方式如下:
-
异步复制(Asynchronous replication)
MySQL 默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返回给客户端,并不关心从库是否已经接受并处理。这样就会有一个问题,主库如果宕机,会导致数据丢失。
-
全同步复制(Fully synchronous replication)
指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。因为需要等待所有从库执行完该事物才能返回,所以全同步复制的性能必然会收到严重的影响。
-
半同步复制(Semisynchronous replication)
介于异步复制和全同步之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库收到并写到 relay log 中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性。
-
主从复制的优势 - 读写分离
通过读写分离操作,可以实现服务器负载均衡,提升数据库的并发访问能力
- 读写分离在读数据时存在一定的延时问题
- 读写分离非常适合查询数据库操作频繁地系统
-
主从复制的优势 - 异地备份
-
主从复制的优势 - 故障容灾
当主数据库出现问题时,数据库管理员可以立即让从数据库代替主数据库,快速恢复系统服务
Redis 主从复制概念
- Redis 支持主从复制,而且支持一主多从以及多级从结构(与 MySQL 一样)
- Redis 主从复制一是为了纯粹的冗余备份,二是为了提升读性能(读写分离)
- Redis 主从复制是异步进行的(主从同步不会影响主逻辑,也不会降低 Redis 的处理性能)
- 生产一边关闭主服务器的持久化功能,只让从服务器持久化(提高主服务器的处理性能)
- 生产一般从服务器被设置为只能模式(避免从服务器的数据被误
Redis 主从复制流程图
Redis 主从复制作用
-
数据冗余
主从复制实现了数据的热备份(一种数据的冗余方式)
-
故障恢复
当节点出现问题,可以由从节点提供服务,实现快速的故障恢复(一种服务的冗余方式)
-
负载均衡
在主从复制的基础上,配合读写分离,可以由主节点提供写功能,由从节点提供读功能,分担服务器负载,尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高 Redis 服务器的并发量和处理性能
-
高可用基
主从复制还是哨兵和集群能够实施的基础(因此说主从复制是 Redis 高可用的基石)
Redis 哨兵模式
主从架构的弊端
哨兵模式
哨兵模式工作原理
- 哨兵模式通过间隔时间发送命令,让 Redis 服务器返回监控其运行状态,包括主服务器和从服务器(心跳检测)
- 当哨兵模式监测到 Master 主服务器宕机,会自动将 Slave 从服务器切换成 Master 主服务器,然后通过发布/订阅模式通知其他的 Slave 从服务器修改配置文件,让它们切换配置的 Master 主服务器 IP 地址和端口号(投票机制)
Redis 集群架构
Redis 集群架构图
Redis 集群投票机制
缓存服务器集群
路由算法
- 余数 Hash 路由算法
- 一致性 Hash 路由算法