从零开始Redis(十六)之主从复制

109 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第26天,点击查看活动详情

🍊作者简介:少年不想说话,努力长大

🍊往期回顾:从零开始Redis(十五)

🍊近期目标:写完基础源码,点赞👍🏼、收藏⭐、留言📩

我们接着说,今天看看redis的主从复制,这讲对于搭建来说也很重要的,对于业务逻辑则无感;话不多说,开始;

什么是主从复制 

主从复制就是我们定义一个主服务,并创建多个从服务,多个从服务都与该主服务对应,将主服务的数据完好的备份到从机上实现复制的功能; 

为什么需要主从复制? 

通常情况下我们的一台机器如果宕机的话,那我们的系统会立即不可用直到修复;甚者会丢是我们的数据无法找回,有人会说那我弄两台机器就好了啊, 那两台机器如何保证数据同步呢?不同步我的一个请求该如何选择哪台机器来处理呢?这些都是问题;所以我们要有一主性,保证数据的准确性我们需要所有数据都从主机生成,那主机既要处理从机,又要处理请求岂不是资源很紧张,所以这里我们又要设置请求获取处理数据的方式;听说最多的就是读写分离;

主从复制如何操作的

 首先开始前我们需要在我们的从机.conf配置文件上加上

masterauth <master-password>

以便连上主机,此处的master-password需要和主机的requirepass保持一致 ,建议将我们所有Redis机器的requirepass和masterauth对应的密码都保持一致,这样万一出故障,方便我们操作;如果是内部虚拟机的话,主机不必设置密码,从机也可忽略这一步;

启动成功我们需要在从机上执行

REPLICAOF 主机redis的host 主机redis的port

以将我们的从机和主机绑定; 以前的redis版本或者我们从机刚上线则要进行的是全量同步,看下流程(以新版本redis6.0执行流程,这里我只大概写下,细节的话估计得网上好好找找,资料参差不齐) 

  1. 从机发送psync同步命令给主机,主机会返回全量同步的确认指令,以及同步数据目前的位置(从机会存储该返回);同时主机会进行bgsave用于生成rdb文件,并记录当前的位置; 
  2. 复制完毕会将该rdb发给从机,从机接收主机发过来的rdb后会清空当前从机的数据, 接着从机读取到内存完成会再去通知主机(此次请求包含上次主机返回的数据), 主机接收到后会匹配从机发过来的ID和偏移量数据,如果不匹配则会重新全量复制,如果匹配主机则会将生成rdb过程中以及从机读取rdb这段时间的命令放入replication buffer缓冲区中,现在再全发出去给从机,此次全量复制就算完成了; 至此全量和部分复制就完成了; 
  3. 下面就算命令的同步了,这是基于TCP的长连接,命令同步受限于网络等多种原因,可能导致主机记录同步的offset值(偏移量)与从机记录的不一致,此时需要重新部分同步,主机会将这部分差异再次发给从机执行bgrewriteaof命令,同步数据,如果offset值一致,不做处理,以此达到数据一致性;

主从复制暂且说这么多,后面的读写分离我们还会说道这里,好啦🥗🥗🥗;

结束结束,那就🛴🛴🛴

如果对你有所帮助

点个赞呗