Redis主从复制总结

  • 今天,自己动手花了几个小时在本地和远程配置了一个Redis主从复制,感觉蛮有意思的,所以分享一波。

知识介绍

  • 首先,我们需要知道什么是主从复制?
    • redis的主从复制就是我们设置一个master服务器,然后设置多个slave从服务器,主服务器存储着最新的数据,每次主服务器的数据出现变化的时候,都会将对应的命令传输到各个slave服务器,这样,我们就可以实现主服务器和从服务器的数据的同步了。
    • 为什么需要?在企业的开发中,主从复制可以避免单机故障导致的数据和服务的丢失,保障了数据安全和服务的稳定运行。
    • 一个master可以有多个slave,一个slave也可以有多个slave,这样,最终可以构成一棵树的结构。

基本原理

  • Redis的复制分为同步和命令传播阶段。同步操作作用于从服务器将从服务器的数据状态更新为主服务器的数据状态。
  • 命令传播则相反,他的命令主要是在主数据库发生数据变化的时候,导致主从服务器的数据不一致的时候,让主从回到一致的过程。
同步
  • 客户端先向从服务器发送slaveof命令,判断是否是第一次复制,如果是第一次复制一般都是刚开始组建主从关系。
  • 如果是第一次复制,从服务器会向主服务器发送PSYNC命令,请求主服务器会执行完整的重同步操作。
  • 主服务器接到完整的请求之后,将在后台执行BGSAVE命令,后台生成一个RDB文件,同时会有一个积压缓冲区记录从现在开始执行的所有的写命令。
  • BGSAVE命令执行之后,从服务器会接受到主服务器发送的RDB文件,同时主服务器还会向从服务器返回一个偏移量。
  • 如果不是第一次复制,那么说明从服务器可能是断线的,导致了主从数据库状态不一样,需要同步主服务器的数据。这个时候从服务器就会向主服务器发送一个之前记录得到的偏移量,这样主服务器就会知道最后一次同步的是在哪个地方,从这个地方开始进行同步即可。
  • 由于之前从服务器可能出现断线的情况,所以主服务器需要发送CONNECT命令,表示将和从服务器执行同步部分数据的操作。但是,假如从服务器将偏移量丢失了呢?那么主服务器将会发起一个全量同步的操作。
命令传播阶段
  • 执行完同步之后,主从并不会一直保持着这个状态,加入主服务器执行了写的命令,那么就会将命令传输给从服务器,从服务器拿到了命令之后就会执行对应的操作。最后保持主从一致的状态。
  • 在命令传播阶段,从服务器会以每秒一次的频率,向从服务器发送命令。作用主要是检测主从服务器的网络状态,辅助实现min-slaves,检测命令丢失。

实践

  • 接下来,我们自己动手实践一下,观察效果。
本地Linux搭建Redis集群
  • 本地搭建,主要是在本地跑多个Redis服务,分到不同的端口上。比如,我测试的时候是将6379端口的作为master结点,将6380和6381端口的作为slave结点。这两个slave阶段都是跟随master节点的。
  • 我们先复制不同的redis配置文件
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述
  • 然后,我们对这几个配置文件的这些地方做如下的修改
daemonize yes
port <对应的端口>
masterauth <密码>
bind <如果是本地搭建,就直接127.0.0.1,如果是远程,就是0.0.0.0>
logfile <对应的文件路径>
  • 修改好配置文件之后,我们通过redis-server 对应的配置文件路径来分别启动三个redis服务。
    在这里插入图片描述

  • 然后,我们使用redis-cli -p <对应的端口>来分别启动三个不同的redis服务客户端。这里建议终端开设三个不同的窗口。

  • 我们先进入master结点。

redis-cli -p 6379
auth <密码>
info replication
  • 然后,我们进入slave结点,同样执行类似上述的命令。但是从服务器开始的时候需要先执行slaveof <master的IP> <master的端口>才会实现主从连接操作。

  • 最后的三个节点的情况如下
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

  • 最后,在主服务器的写命令都会被同步到slave服务器上面,可以自己测试一下。

远程服务器搭建Redis集群
  • 先鸽了,后面再补
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值