Redis主从复制

209 阅读4分钟

这是我参与8月更文挑战的第29天,活动详情查看:8月更文挑战

Redis主从复制

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master/leader),后者称为从节点(slave/follower);数据复制是单向的,只由主节点到从节点。Master以写操作为主,Slave以读操作为主。主从复制,读写分离。80%的情况下都是在进行读操作,利用主机进行写操作,从机用来读操作,如此可以来减缓主机的压力。默认情况下,每台Redis服务器都是主节点。且一个主节点可以有多个从节点,但一个从节点只能有一个主节点。

主从复制的好处

  • 故障恢复,避免单个Redis服务器故障造成的服务不可用
  • 读写分离,负载均衡。主节点负责写,从节点负责读,提高服务器并发量,减轻单个Redis服务器的压力。

主从复制原理

  1. Slave从机成功连接到Master主机后会发送一个sync同步命令,Master接收到命令后,会启动后台的存盘进程,同时收集所有接收到用于修改数据集的命令,在后台进程执行完毕后,Master主机将传送整个数据文件到Slave从机,并完成一次完全同步

  2. 全量复制:Slave从机重新连接到Master主机后,Slave从机在接收到数据文件后,将其存盘并加载内存中。

  3. 增量复制:Slave没有与Master断开或重新连接,Master继续将新的所有收集到的修改命令依次传给Slave从机,完成主从同步。

  4. 只要从机Slave重新连接上Master主机,一次**完全同步(全量复制)**将被自动执行。

配置主从复制

下面,我们用同一Redis服务器通过使用不同的redis.conf配置文件、端口号来启动三个Redis客户端进程,模拟主从复制,采用一主二从的模式,设定端口为6379的为主服务器、6381和6382为对应的从服务器。

  • 端口号为6381的从服务器执行slaveof 主服务器IP 主服务器端口号命令,指定Master服务器。

无标题.png

  • 端口号为6382的从服务器执行slaveof 主服务器IP 主服务器端口号命令,指定Master服务器。

截图.png

  • 查看绑定后的主服务器

无标题.png

  • 经过以上的配置之后,我们的一主二从的模式就配置好了。Redis的从机默认只能读不能写,可以通过配置文件中的slave-read-only yes或no选项配置是否开启只读模式,默认是yes表示开启只读模式。下面我们测试该模式下对主机读写、对从机读写。

无标题.png

  • 下面测试如果主机崩了,两个从机的角色会不会还是slave,如果此时主机再上线,主机继续写数据,另外两个从机能不能读到呢?

无标题.png

从上面的测试结果可以看出:即使主机崩了,但两个从机的角色仍然是slave,如果此时主机再上线,主机继续写数据,在两个从机中任然能够读取得到。

  • 下面测试如果是从机崩了或者重启,从机的角色会不会变为原来默认的主机,重启之后能不能继续获取主机中的新set的内容。

无标题.png 从上面的结果可以看出,如果使用的是命令行的方式配置主从,一旦从机崩了或者重启了,就会变回主机,是获取不到主机的set的内容的,如果重新绑定与主机的关系变为从机,就会触发一次完全同步,就可以重新从主机中get数据。

🏁以上就是对Redis主从复制的简单介绍,如果有错误的地方,还请留言指正,如果觉得本文对你有帮助那就点个赞👍吧😋😻😍

默认标题_动态分割线_2021-07-15-0.gif