Redis节点复制

/ Redis / 2 条评论 / 438浏览

在分布式系统中为了解决单点登陆问题,通常会把数据复制多个副本并部署到不同的机器上来解决此类问题。那么Redis也一样,在集群环境,怎么保证不同的实例与实例之间Redis数据的一致呢?答案就是Redis中的复制功能。在这一篇中我们主要介绍Redis有关复制功的内容。


默认情况下Redis都是主节点,但在复制情况下Redis实例通常会被划分为主节点(master)和从节点(slave),并且每个从节点只有一个主节点,而主节点可以同时有多个从节点。除此之外Redis复制的时候,只能从主节点复制到从节点,而不能从从节点复制到主节点。下面我们了解一下怎么配置Redis中的复制功能。


配置复制的方式主要有以下三种:

  1. 在配置文件中加入slaveof{masterHost}{masterPort}。
  2. 在redis-server启动命令后加入--slaveof{masterHost}{masterPort}
  3. 直接使用命令:slaveof{masterHost}{masterPort}

下面我们启用两个端口来演示Redis复制的功能。 img img

slaveof配置都是在从节点发起的,所以上图中命令执行完成后,会将6379作为主节点,6380作为从节点,并且如上图所示,当我在6379主节点中执行set操作,在6380从节点中已经成功获取到的value值,说明Redis的复制功能已经成功了。

slaveof命令是异步命令,执行slaveof命令时,节点只保存主节点信息饭后返回,后续的复制操作在节点的内部异步执行。当主从节点复制功能建立成功时,可以使用info repliication命令查看复制相关状态。具体操作如图所示: img img


slaveof命令不但可以建立复制,还可以在从节点执行slaveof no one断开与主节点复制关系。断开复制主要有两大流程:

  1. 断开与主节点复制关系
  2. 从节点晋升为主节点。

**备注:**从节点断开复制后并不会清除原有数据,只是无法继续从主节点获取数据。通过slaveof命令还可以实现切主操作。那么顾名思义切主操作,就是从节点更换主节点。在Redis中执行slaveof{newMasterIp}{newMasterPort}命令即可完成切主操作。切主操作主要流程如下:

  1. 断开与旧主节点复制关系
  2. 与新节点建立复制关系
  3. 删除从节点当前所有数据
  4. 对新主节点进行复制操作

**备注:**正是因为切主操作会将从节点的数据全部清除掉,所以在生产环境中执行切主操作时要特别注意。


下图为断开复制与切主操作的详细流程:

img


下图演示了断开复制的具体操作:

img


下图演示了切主操作的具体操作:

img

img

img


上述内容就是Redis中的复制相关的知识,如有不正确的地方,欢迎留言,在下一篇中我们将重点了解Redis复制功能中的一主一从及一主多从结构,谢谢。

  1. Redis总结的很好 很实用 要是把Redis在做分布式锁的情况 整理一下就更好了

    回复
    1. @刘学勇

      嗯,以后的文章中,会有相关内容

      回复