《Redis学习整理--第六期Redis的主从复制》

当将Redis使用在具体的项目中时,只使用单台的Redis会有以下两种问题
  1. 从结构上,单个Redis服务器会发生单点故障,并且一台服务器需要处理所有的请求负载,压力较大;
  2. 从容量上,单个Redis服务器内存容量有限,就算一台Redis服务器内容容量为256G,也不能将所有内容用作Redis存储内存,一般来说,单台Redis最大使用内存不应该超过20G
以上问题的解决方案之一 主从复制
大部分网站可能都是 一次写入,多次读取(少写多读),所以可以将关系设置为 主写从读

这样做的好处
  1. 读写分离,可以根据阅读数据情况自由扩展从库
  2. 数据被备份多份,出现故障可以快速恢复
配置
主从数据库在设置上非常简单 主库不需要增加任何配置,只需要在从库增加 slaveof 主库IP 主库端口
从库要默认为只读模式 若需配置为可写 slave-read-only no(需要注意的是,从库修改数据不会被同步到主库,并且主库一旦修改数据,将会把从库的数据覆盖,所以不建议将从库设置为可写)

主从复制原理
当从数据库启动时,会向主数据库发送SYNC命令,主数据库接收到命令后,在后台保存快照(即 RDB持久化),并将保存快照期间接收到的命令缓存起来,当完成持久化后,主数据库会将缓存的命令和快照文件传给从数据库,从数据库载入快照文件并缓存。这一过程被称为 复制初始化
复制初始化后,每次主数据库进行写操作都会将命令同步给从数据库,从而保证主从一致,这一过程叫 复制同步阶段

乐观复制
Redis容忍主从数据库在一段时间内数据看的内容是不同的,但两者最终会保持一致,也就是说,主从数据库的数据复制是异步的,主数据库完成写操作后,会直接反馈给客户端结果,这一特性保证了复制后主从数据库的性能不会受到影响,但另一方面也会产生一个主从数据库数据不一致的时间窗口,当主数据库执行一条写命令之后,主数据库的数据已经发生变动,然而在主数据库将该命令传送给从数据库之前,如果两个数据库之间的连接断开了,此时二者间的数据就不一致了。从这个角度看,主数据库无法得知命令最终同步给了几个从数据库,不过Redis提供了两个配置选项来限制只有至少同步给指定数量的数据库时,主数据库才是可写的:
min -slaves- to - write 3
min -slave2- max -lag 10

第一个参数表示只有当3个或3个以上的从数据库连接到主库时,主数据库才是可写的,否则返回错误。
第二个参数表示允许从数据库失去连接的最长时间,该选项默认是关闭的,在分布式系统中,打开并合理配置该选项可以降低主从架构因为网络分区导致的数据不一致问题。














猜你喜欢

转载自blog.csdn.net/qq794096244/article/details/79557558
今日推荐