Redis

一、简介

主从复制的特点:

  • 一个主服务器可以同步多个从服务器。
  • 从服务器可以直接连接主服务器,也可以连接到其他从服务器。这样可以分载主服务器的同步压力。
  • 主服务器以非阻塞的方式提供服务。所以在同步期间,主服务器能继续处理客户端的请求。
  • 从服务器同样以非阻塞的方式完成数据同步。所以在同步期间,从服务器可以对数据集进行处理,当然这些数据是未完成同步的数据。
  • 从服务器可以为客户端提供只读查询服务。这样可以降低主服务器的读操作压力。

二、主从复制的工作原理

  1. 当你建立一个从服务器,连接时就会发送一个 SYNC 命令。
  2. 然后主服务器开始在后台保存,并且开始缓冲所有新收到的会修改数据集的命令。
  3. 当后台保存完成以后,主服务器传输数据库文件给从服务器,从服务器将其保存到磁盘上,然后加载到内存中。
  4. 然后主服务器开始发送缓冲的命令给从服务器。这是通过命令流完成的,和 Redis 的协议是一样的格式。

当主从链路由于某些原因断开时,从服务器可以自动重连。如果主服务器收到多个并发的从服务器的同步请求,只会执行一个后台保存来服务所有从服务器。

当主服务器和从服务器断开后重连上,总是执行一次完整重同步。然而,从 Redis 2.8 以后,可以选择执行部分重同步。

部分重同步是通过在主服务器上创建一个复制流的内存缓冲区实现的,复制偏移量在缓冲区可用 并且 主服务器运行 ID 还是一样的条件下,才会执行部分重同步,否则会执行完整重同步。

 

三、如何配置

在 redis.conf 中加上 slaveof  masterIP  masterPort 即可。

 

四、主服务器关闭持久化时的安全性

当使用了 Redis 的复制时,强烈建议在主服务器上开启持久化,或者,当不可能开启持久化时,例如由于关注延迟,实例应该被配置为避免自动重启。

为了更好的理解为什么关闭了持久化的主服务器被配置为自动重启是很危险的,查看下面的失败模型,数据从主服务器以及其所有从服务器上被清除:

  • 我们设置节点 A 作为主服务器,关闭了持久化,节点 B 和节点 C 从节点 A 复制。
  • A 崩溃了,但是它拥有某个自动重启系统,重启了这个进程。但是,由于持久化是被关闭的,这个节点以空的数据集重启。
  • 节点 B 和节点 C 从空的 A 复制,于是它们完全销毁了他们的数据拷贝。
原文地址:https://www.cnblogs.com/xmsx/p/5392110.html