【Redis 开发】详细搭建Redis主从,并了解数据同步原理

Redis主从搭建

Redis主从

搭建Redis的主从架构

主从节点可以实现读写分离,将都大量的读操作分担与诸多从节点当中去

从节点可以叫做slave或者replica

如何搭建:

在一台Linux虚拟机上开启三个Redis实例,端口不同

  1. 首先在/tmp目录下创建三个目录对应三个不同的端口,这里创建7001,7002,7003
  2. 将之前的redis下载目录下的redis.conf文件分别拷贝到上述创建的三个目录中

拷贝可以使用命令:echo 7001 7002 7003 | xargs -t -n 1 cp redis-7.0.15/redis.conf进行拷贝也可以使用cp命令

  1. 执行命令sed -i -e 's/6379/7001/g' -e 's/dir .\//dir \/tmp\/7001\//g' 7001/redis.conf修改每个文件夹的配置文件,将端口分别修改为7001,7002,7003,将RDB文件保存位置都修改为自己所在目录(在/tmp文件中执行该命令)
  2. 修改每个实例的声明ip,为每个配置文件中指定每一个实例的绑定ip信息

在配置文件中插入replica-announce-ip 192.168.75.135

或者在命令行执行sed -i '1a replica-announce-ip 192.168.75.135' 7001/redis.conf

三个文件都使用该命令进行一遍配置

或者三个命令一键修改printf '%s\n' 7001 7002 7003 | xargs -I{} -t sed -i 'la replica-announce-ip 192.168.150.101' {}/redis.conf

  1. 配置三个节点的主从关系通过replicaof或者slaveof来实现
  • 设置主从关系

永久生效的主从关系:

在redis.conf中添加一行配置:slaveof <masterip> <masterport>

临时生效的主从关系:

在cli客户端使用命令slaveof <masterip> <masterport>(重启后失效)
redis-cli -p 7002:连接7002
slaveof 192.168.75.135 7001

数据全同步原理

其中repl_baklog:是一个缓冲区

  • master如何判断slave是不是第一次来同步数据
  1. Replication id:数据集的标识,id一致则说明是同一数据集,每一个master都有唯一的id,slave则会继承master节点的id
  2. Offset:偏移量,随着记录在repl_baklog中的数据增多而逐渐增大,slave完成同步也会记录当前的offset,如果offset小于master的offset,则说明需要更新

通过传过来的id进行判断,如果id不同则证明是第一次传输

数据的增量同步

主从第一次同步是全量同步,但是如果slave重启后同步,则执行增量同步

slave返回的offset中记录了返回来的在backlog中读取到了哪里,baklog将后边的数据返回

注意:repl_baklog中的存储是进行环形存储的,slave与master一直在环形存储内进行增量同步

这个时候如果redis从节点宕机当他醒过来之后,master已经转了一圈了上一圈的数据被覆盖掉,slave就只能进行全量同步了

优化Redis主从集群

  1. 在master中配置repl_diskless_sync yes 启用无磁盘复制,避免全量同步时的磁盘IO
  2. Redis单节点上的内存占用不要太大,减少RDB导致过多磁盘IO
  3. 适当提高repl_baklog的大小,发现slave宕机时尽快实现故障恢复,尽可能避免全量同步
  4. 限制一个master上的slave节点数量,如果实在太多slave,则可以采用主-从-从链式结构,减少master压力
相关推荐
雨白1 小时前
Java 线程通信基础:interrupt、wait 和 notifyAll 详解
android·java
AAA修煤气灶刘哥3 小时前
别让Redis「歪脖子」!一次搞定数据倾斜与请求倾斜的捉妖记
redis·分布式·后端
AAA修煤气灶刘哥3 小时前
后端人速藏!数据库PD建模避坑指南
数据库·后端·mysql
架构师沉默6 小时前
设计多租户 SaaS 系统,如何做到数据隔离 & 资源配额?
java·后端·架构
Java中文社群7 小时前
重要:Java25正式发布(长期支持版)!
java·后端·面试
RestCloud7 小时前
揭秘 CDC 技术:让数据库同步快人一步
数据库·api
每天进步一点_JL8 小时前
JVM 类加载:双亲委派机制
java·后端
用户298698530149 小时前
Java HTML 转 Word 完整指南
java·后端
渣哥9 小时前
原来公平锁和非公平锁差别这么大
java
渣哥9 小时前
99% 的人没搞懂:Semaphore 到底是干啥的?
java