【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压力
相关推荐
OC溥哥999几秒前
Paper MinecraftV3.0重大更新(下界更新)我的世界C++2D版本隆重推出,拷贝即玩!
java·c++·算法
星火开发设计4 分钟前
C++ map 全面解析与实战指南
java·数据结构·c++·学习·算法·map·知识
洛阳纸贵5 分钟前
Redis
数据库·redis·缓存
*才华有限公司*7 分钟前
RTSP视频流播放系统
java·git·websocket·网络协议·信息与通信
gelald18 分钟前
ReentrantLock 学习笔记
java·后端
计算机学姐26 分钟前
基于SpringBoot的校园资源共享系统【个性化推荐算法+数据可视化统计】
java·vue.js·spring boot·后端·mysql·spring·信息可视化
一条咸鱼_SaltyFish30 分钟前
[Day15] 若依框架二次开发改造记录:定制化之旅 contract-security-ruoyi
java·大数据·经验分享·分布式·微服务·架构·ai编程
跟着珅聪学java35 分钟前
JavaScript 底层原理
java·开发语言
l1t36 分钟前
DeepSeek辅助编写的利用位掩码填充唯一候选数方法求解数独SQL
数据库·sql·算法·postgresql
Mr. Cao code41 分钟前
Docker数据管理:持久化存储最佳实践
java·docker·容器