【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压力
相关推荐
Python私教1 小时前
model中能定义字段声明不存储到数据库吗
数据库·oracle
吾日三省吾码2 小时前
JVM 性能调优
java
弗拉唐3 小时前
springBoot,mp,ssm整合案例
java·spring boot·mybatis
oi773 小时前
使用itextpdf进行pdf模版填充中文文本时部分字不显示问题
java·服务器
BestandW1shEs4 小时前
谈谈Mysql的常见基础问题
数据库·mysql
重生之Java开发工程师4 小时前
MySQL中的CAST类型转换函数
数据库·sql·mysql
教练、我想打篮球4 小时前
66 mysql 的 表自增长锁
数据库·mysql
Ljw...4 小时前
表的操作(MySQL)
数据库·mysql·表的操作
哥谭居民00014 小时前
MySQL的权限管理机制--授权表
数据库