【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压力
相关推荐
FF在路上20 分钟前
Knife4j调试实体类传参扁平化模式修改:default-flat-param-object: true
java·开发语言
真的很上进27 分钟前
如何借助 Babel+TS+ESLint 构建现代 JS 工程环境?
java·前端·javascript·css·react.js·vue·html
m0_7482338831 分钟前
SQL语句整理五-StarRocks
数据库·sql
州周42 分钟前
Ftp目录整个下载
linux·服务器·数据库
码农君莫笑1 小时前
使用blazor开发信息管理系统的应用场景
数据库·信息可视化·c#·.net·visual studio
NiNg_1_2341 小时前
Echarts连接数据库,实时绘制图表详解
前端·数据库·echarts
众拾达人1 小时前
Android自动化测试实战 Java篇 主流工具 框架 脚本
android·java·开发语言
皓木.1 小时前
Mybatis-Plus
java·开发语言
不良人天码星1 小时前
lombok插件不生效
java·开发语言·intellij-idea
Azoner1 小时前
postgresql安装部署(linux)
数据库·postgresql