目录

  • 一、关于 Redis 主从复制
    • 1.1 关于 Redis 的主从复制
    • 1.2 Redis 主从架构
    • 1.3 优缺点
  • 二、配置 Redis 主从复制
    • 2.1 准备事项
    • 2.2 同步服务器的时区和时间
    • 2.3 关闭服务器防火墙
    • 2.4 开启端口
    • 2.5 修改配置文件
    • 2.6 重启 Redis 服务
    • 2.7 查看连接状态
    • 2.8 测试
  • 三、全量同步和增量同步
    • 3.1 全量同步
    • 3.2 增量同步
  • 四、常见问题
    • 问题一:使用 info 查看状态的时候 master_link_status 为 down
    • 问题二:关于 repl_baklog
    • 问题三:在不设置哨兵的情况下 master宕机或重启,导致 slave 频繁全量复制
  • 五、结束

一、关于 Redis 主从复制

1.1 关于 Redis 的主从复制

redis 的主从复制分为全量复制和增量复制,全量复制是slave重写master生成的rdb文件。增量复制类似于MySQL主从复制,master将操作记录到日志中,并同步到slave,来完成同步。

1.2 Redis 主从架构


redis 配置主从同步后,默认从库只能读,不可写。

1.3 优缺点

优点:

  • 实现数据备份,提高安全性
  • 实现读写分离,提高性能

缺点:

  • 增加维护成本
  • 当多个 slave 节点宕机,增加主服务压力
  • 数据延迟同步问题

二、配置 Redis 主从复制

2.1 准备事项

ip 端口 角色 redis版本
39.101.1.122 6379 主(master) Redis 6.2.7
175.24.33.200 6379 从(slave) Redis 6.2.7

2.2 同步服务器的时区和时间

2.3 关闭服务器防火墙

centos示例:

  • 查看防火墙
systemctl status firewalld.service
  • 开启防火墙
systemctl start firewalld.service
  • 关闭防火墙
systemctl stop firewalld.service

2.4 开启端口

主服务 在服务器运营商中开启:6379 端口。

2.5 修改配置文件

修改主服务配置文件(redis.conf):

# 默认是 127.0.0.1,0.0.0.0 可非本地访问
bind 0.0.0.0

修改从服务配置文件(redis.conf)(如果需要一主多从,从服务的配置方式一样):

# 默认是 127.0.0.1,0.0.0.0 可非本地访问
bind 0.0.0.0
# 从属于主redis
slaveof 39.101.1.122 6379

2.6 重启 Redis 服务

重启服务,将修改后的配置文件重载。

注意优先级,先重启主服务,在重启子服务。

2.7 查看连接状态

主服务查看:info replication

127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:1
slave0:ip=175.24.33.200,port=6379,state=online,offset=28457,lag=1
master_failover_state:no-failover
master_replid:020a7669df2d1f28093f39e3c344757d56ccd66e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:28457
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:28457

从服务查看:info replication

127.0.0.1:6379> info replication
# Replication
role:slave
master_host:39.101.1.122
master_port:6379
master_link_status:up
master_last_io_seconds_ago:5
master_sync_in_progress:0
slave_read_repl_offset:28807
slave_repl_offset:28807
slave_priority:100
slave_read_only:1
replica_announced:1
connected_slaves:0
master_failover_state:no-failover
master_replid:020a7669df2d1f28093f39e3c344757d56ccd66e
master_replid2:0000000000000000000000000000000000000000
master_repl_offset:28807
second_repl_offset:-1
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:1
repl_backlog_histlen:28807

只要主服务看到的 connected_slaves (从服务连接量正确),和从服务看到的 master_link_statusup 即可,不能是 downdown 代表未连接成功。

其中,role 显示当前角色,master 或 slave。

2.8 测试

主服务:

127.0.0.1:6379> set name haha
OK

从服务:

127.0.0.1:6379> get name
"haha"

三、全量同步和增量同步

上面介绍了主从的搭建过程,这儿在介绍下主从同步的流程。

redis 有两种同步方式:全量同步 和 增量同步

整个流程:

3.1 全量同步

全量同步:master将完整内存数据生成RDB,发送RDB到slave。后续命令则记录在repl_baklog,逐个发送给slave。


过程概述:

  • slave 节点请求增量同步
  • master检查replid不一致,拒绝增量同步,开始全量同步
  • master将完整的内存数据生成RDB文件,发送给slave
  • slave清空本地数据,加载RDB文件
  • master将RDB期间接收到的命令记录在repl_baklog,并持续将log中的命令发送给slave
  • slave执行接收到的命令,与master保持同步

什么时候执行全量同步?

1、slave节点第一次连接master节点时。

2、slave节点断开时间太久,repl_baklog中的offset已经被覆盖时。

3.2 增量同步

增量同步:slave提交自己的offset到master,master获取repl_baklog中从offset之后的命令给slave。

过程概述:

  • slave请求增量同步
  • master检查replid是否一致
  • 一致,master 去 repl_baklog 中获取 offset 后的数据
  • master 发送 offset 后的命令
  • slave 接收后执行命令
  • 完成同步

什么时候执行增量同步?

1、slave节点断开又恢复,并且在repl_baklog中能找到offset时

四、常见问题

问题一:使用 info 查看状态的时候 master_link_status 为 down

  • 原因一:

    虽然 redis 服务已开启,但是 6379 端口在安全组中未开放。

  • 原因二:

    主配置文件和从配置文件中的 bind 为 127.0.0.1,应该设置成 0.0.0.0

  • 原因三:

    replicaof 和 slaveof 的区别:replicaof 是新版的命令,slaveof 是旧版的

    replicaof :>= 5.0.0
    slaveof:>= 1.0.0.

    版本查询:https://www.redis.com.cn/

  • 原因四:

    主服务设置了密码,但是从服务没有配置该密码。可通过 masterauth 在配置文件中配置上即可。

  • 原因五:主服务或从服务没关闭防火墙

问题二:关于 repl_baklog

repl_baklog这个文件是一个固定大小的数组,只不过数组是环形,也就是说角标到达数组末尾后,会再次从0开始读写,这样数组头部的数据就会被覆盖。

数组一旦写满,再有新数据写入时,就会覆盖数组的旧数据。此时slave来增量同步,发现自己offset已经被覆盖了,此时只能全量同步。

问题三:在不设置哨兵的情况下 master宕机或重启,导致 slave 频繁全量复制

https://www.cnblogs.com/qq1971590238/p/16140998.html

五、结束

参考文档:

https://www.cnblogs.com/tangs1/p/15784878.html

https://blog.csdn.net/qq_45748269/article/details/121622447

https://blog.csdn.net/weixin_43889841/article/details/105078298

https://sunnyboy.blog.csdn.net/article/details/117483197

Redis搭建主从同步流程及原理相关推荐

  1. Redis的主从同步 - 邱乘屹的个人技术博客

    Redis的主从同步 redis主从原理 一.复制过程 二.数据间的同步 psync 命令需要 3 个组件支持: 主从节点各自复制偏移量: 主节点复制积压缓冲区: 主节点运行 ID: 如果在重启时不改 ...

  2. redis mysql主从同步_手撕Redis,主从同步

    原标题:手撕Redis,主从同步 一.主从同步的工作原理 redis主从复制过程: 当配置好slave后,slave与master建立连接,然后发送sync命令.无论是第一次连接还是重新连接,mast ...

  3. Redis(九):Redis的主从同步

    1. 主从同步     1.1 初次全同步     1.2 命令传播 2. 断线后重复制     2.1 旧版重复制功能     2.2 新版重复制功能 3. 主从同步的一致性分析 redis中,用户 ...

  4. 【图解】redis主从同步流程——全量同步、部分同步、命令传播

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.全量同步 二.部分同步 三.命令传播 总结 前言 本文主要介绍Redis高可用下的主从同步问题,包括全量同步.部分 ...

  5. memcache高集群搭建----主从同步实验

    目录 一.环境部署 二.主从服务器搭建 2.1 修改主机名 2.2 上传软件包并解压 2.3 主服务器上安装magent代理 2.4 主从服务器搭建keepalived 2.5 主服务器中keepal ...

  6. redis mysql主从同步_Redis主从数据库同步

    Redis主从同步原理-SYNC 和MySQL主从复制的原因一样,Redis虽然读取写入的速度都特别快,但是也会产生读压力特别大的情况.为了分担读压力,Redis支持主从复制,Redis的主从结构可以 ...

  7. redis搭建主从哨兵模式+分片集群部署(redis系列二)

    前言:在前一章了解redis的基本介绍后,这一章主要介绍redis的实战部署,文章有点长请一步步耐心看完,我相信肯定会有收获的,这里用的资源包是2022年最新的redis版本可能会跟旧版本不同,在此章 ...

  8. redis的主从同步及高可用集群

    redis 是一个高性能的 key-value 数据库. redis 的出现,很大程度补偿了 memcached 这类 keyvalue 存储的不足,在部分场合可以对关系数据库起到很 好的补充作用.它 ...

  9. MySQL(17) 通过Docker搭建主从同步

    一.前言 本文将基于Docker部署2台MySQL服务实现主从同步,即主master用于写(增删改),从slave用来读(查) 二.Docker搭建MySQL实现主从同步 1.master(主)配置 ...

最新文章

  1. 第十五届全国大学生智能车全国总决赛获奖信息-东北赛区
  2. centos ruby通过rvm更新版本
  3. 体验XHProf(linux版本)
  4. [BZOJ4320][ShangHai2006]Homework(根号分治+并查集)
  5. 013.Zabbix的Items(监控项)
  6. 使用Magicodes.IE.Excel完成Excel图片的导入和导出
  7. http端口_PhpStorm 修改默认端口号63342
  8. winform 64位系统中使用
  9. MFC使用GDI+编程设置
  10. php中的加密解密模块-mcrypt
  11. 诺基亚x6升级android9体验,诺基亚X6手机怎么样?诺基亚X6全面详细评测
  12. 计算机cpu多大,电脑cpu多少容量
  13. php jion用法,ThinkPHP关于JOIN使用方法详细说明
  14. vba python 基金历史排名_“科技基金”万里挑一:近三年各阶段排名前10“科技基金”全在这...
  15. 老年人怎么办理美国旅游签证?
  16. python规范化货币_Python货币资金科目分析
  17. php ajax向后台怎么传数组,利用ajax传递数组及后台接收的方法详解
  18. C语言实现人机五子棋
  19. 安全多方计算-入门学习笔记(二)
  20. 使用python在pycharm中制作二维码

热门文章

  1. 虚拟机联网图标丢失,连不上网的问题
  2. Largest Square
  3. [警告][vue-router] Duplicate named routers definition: {name: “index“, path: “/index“}
  4. 转载:uIP之ARP:地址解析协议
  5. tuend/stratis/vdo总结
  6. 预计保持30%增速,2022年酒店该如何发力亲子游市场?
  7. 材料学博士怎么读计算机硕士,差距!有的在读博士生已年薪25w了!
  8. 网络营销(直播营销)
  9. 牛奶不宜和酸性水果一起食用
  10. linux userdel,linux userdel命令详解