Redis 主从复制

概念

主从复制,是指将一台Redis服务器的数据,复制到其他的Redis服务器。前者称为主节点(master),后者称为从节点(slave); 数据的复制是单向的,只能由主节点到从节点

默认情况下,每台Redis服务器都是主节点;且一个主节点可以有多个从节点(或没有从节点),但一个从节点只能有一个主节点。

主从复制的作用

主从复制的作用主要包括:

  • 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
  • 故障恢复:当主节点出现问题时,可以由从节点提供服务,实现快速的故障恢复;实际上是一种服务的冗余。
  • 负载均衡:在主从复制的基础上,配合读写分离,可以由主节点提供写服务,由从节点提供读服务(即写Redis数据时应用连接主节点,读Redis数据时应用连接从节点),分担服务器负载;尤其是在写少读多的场景下,通过多个从节点分担读负载,可以大大提高Redis服务器的并发量。
  • 高可用基石:除了上述作用以外,主从复制还是哨兵和集群能够实施的基础,因此说主从复制是Redis高可用的基础。

    一般来说, 要将 Redis 运用于工程中, 只使用一台 Redis 是万万不能的(宕机)
  • 主从结构下, 单个 Redis 服务器会发生单点故障, 并且一台服务器需要处理所有的请求负载, 压力较大
  • 从容量上看, 单个 Redis 服务器内存容量有限, 就算一台Redsi 服务器的内存容量为 256G , 也不能将所有的内存用作 Redis 存储内存, 一般来说, 单台Redis最大使用内存不因该超过20G

    电商网站上的2商品, 一般都是一次上传, 无数次浏览, 专业术语 多读少写



    主从复制, 读写分离, 80% 的情况下都是在进行读操作, 减缓服务器压力, 架构中经常使用, 一主二从


环境配置

只配置从库, 不用配置主库
查看一些信息

127.0.0.1:6379> info replication            # 查看当前库信息
# Replication
role:master                                 # 角色 master
connected_slaves:0                          # 没有从机
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6379>



复制三个配置文件, 然后修改对应的信息

  • 端口
  • pid名字
  • 日志名字
  • dump.rdb名字

    redis-server redis.windows.conf
    Linux类同

redis-cli -p 6379
redis-cli -p 6380
redis-cli -p 6381

一主二从

默认情况下, 每台redis 服务器都是主节点; 我们一般情况下只用配置从机就可

127.0.0.1:6380> SLAVEOF 127.0.0.1 6379          # 端口 6380 认准 127.0.0.1 6379 为主
OK
127.0.0.1:6380> info replication
# Replication
role:slave
master_host:127.0.0.1
master_port:6379
master_link_status:up
master_last_io_seconds_ago:7
master_sync_in_progress:0
slave_repl_offset:15
slave_priority:100
slave_read_only:1
connected_slaves:0
master_repl_offset:0
repl_backlog_active:0
repl_backlog_size:1048576
repl_backlog_first_byte_offset:0
repl_backlog_histlen:0
127.0.0.1:6380>


主机测试

127.0.0.1:6379> info replication
# Replication
role:master
connected_slaves:2
slave0:ip=127.0.0.1,port=6380,state=online,offset=169,lag=0
slave1:ip=127.0.0.1,port=6381,state=online,offset=169,lag=0
master_repl_offset:169
repl_backlog_active:1
repl_backlog_size:1048576
repl_backlog_first_byte_offset:2
repl_backlog_histlen:168
127.0.0.1:6379>





命令行的配置仅仅是暂时的, 需要永久的话可以在redis配置文件中进行修改

细节

主机可以写, 从机不能写, 从机只能读

测试: 主机断开连接, 从机依旧连接到主机, 但是没有写操作, 这时候主机如果回来了, 从机依旧可以获取到主机所写的信息


如果使用命令行, 来配置的主从, 这个时候如果重启了, 那么从机就会变成主机, 只要变成从机, 立马就会从主机中获取值

复制原理

全量同步

Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份。具体步骤如下:

  • 从服务器连接主服务器,发送SYNC命令;
  • 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用缓冲区记录此后执行的所有写命令;
  • 主服务器BGSAVE执行完后,向所有从服务器发送快照文件,并在发送期间继续记录被执行的写命令;
  • 从服务器收到快照文件后丢弃所有旧数据,载入收到的快照;
  • 主服务器快照发送完毕后开始向从服务器发送缓冲区中的写命令;
  • 从服务器完成对快照的载入,开始接收命令请求,并执行来自主服务器缓冲区的写命令;

    而slave服务在接受到数据文件后, 将其存到内存中



    完成上面几个步骤后就完成了从服务器数据初始化的所有操作,从服务器此时可以接收来自用户的读请求.

增量同步

Redis增量复制是指Slave初始化后开始正常工作时主服务器发生的写操作同步到从服务器的过程.
增量复制的过程主要是主服务器每执行一个写命令就会向从服务器发送相同的写命令,从服务器接收并执行收到的写命令.

Master继续将新的所有收集到的修改命名依次传给slave, 完成同步

Redis主从同步策略

主从刚刚连接的时候,进行全量同步;全同步结束后,进行增量同步。当然,如果有需要,slave 在任何时候都可以发起全量同步。redis 策略是,无论如何,首先会尝试进行增量同步,如不成功,要求从机进行全量同步.

层层链路

上一个master 连接下一个slave



此时也可以完成主从复制, 但是80端口的依旧仅仅可以读(不能写)

如果没有主

这个时候 80 能不能变成老大

手动配置

SLAVEOF no one     # 使自己变成主机


此时80就为老大

文章已上传gitee https://gitee.com/codingce/hexo-blog
项目地址: https://github.com/xzMhehe/codingce-java

Redis 主从复制相关推荐

  1. Redis主从复制配置

    环境描述 Redis Master:192.168.1.100 6379(Ubuntu系统) Redis Slave1:192.168.1.101 6380(Ubuntu系统) Redis Slave ...

  2. redis主从复制故障转移

    Redis主从复制与故障切换 目录 目录1 一.概述1 二. 实验目的2 三.试验环境2 四. 说明2 五. 拓扑2 六. 实施步骤2 6.1.分别安装redis2.8.32 6.2.配置主从同步3 ...

  3. redis+主从复制+集群配置

    redis+主从复制+集群配置 redis是一个key-value存储系统.和memcached类似,不过redis支持的value类型更多,主要有:string(字符串).list(链表).set( ...

  4. cxgrid主从表 点+号展开_深入理解Redis主从复制

    一.背景 前面的文章中,我们介绍过Redis的持久化机制,它可以实现Redis实例数据的crash-safe.但是这里有一个问题,就是Redis其实还存在着单点故障问题,比如说Redis的硬盘坏掉了, ...

  5. Redis主从复制下的工作原理

    Redis主从复制下的工作原理 Redis主从复制的配置十分简单,它可以使从服务器是主服务器的完全拷贝.需要清楚Redis主从复制的几点重要内容: 1)Redis使用异步复制.但从Redis 2.8开 ...

  6. php连接redis 主从复制,redis怎么进行主从复制

    redis主从复制同步实现的过程 1.从服务发送一个sync同步命令给主服务要求全量同步 (推荐学习:Redis视频教程) 2.主服务接收到从服务的sync同步命令时,会fork一个子进程后台执行bg ...

  7. redis主从复制如何保证数据一致性_面试官:Redis 主从复制时网络开小差了怎么整?...

    上周因为实在太忙就认认真真写了一篇水文,吹了一下自己过去的经历,反响竟然超出了我的预期,并且后台还有读者留言表示想看续集的.哈哈,果然大家还是对水文更有热情. 这期我们继续回到之前的 Redis 话题 ...

  8. Redis主从复制的搭建与.哨兵.数据持久

    目录 一.redis主从复制 1.主从复制的概述 2.一主一从结构的配置 二.哨兵服务 1. 哨兵服务的简单介绍 2.配置哨兵服务 三.数据持久化 1.RedisDataBase(RDB) 2.App ...

  9. 深入Redis 主从复制原理

    复制原理 1.复制过程 复制的过程步骤如下: 1.从节点执行 slaveof 命令        2.从节点只是保存了 slaveof 命令中主节点的信息,并没有立即发起复制        3.从节点 ...

  10. [转载] 深入剖析 redis 主从复制

    转载自http://www.cnblogs.com/daoluanxiaozi/p/3724299.html 主从概述 redis 支持 master-slave(主从)模式,redis server ...

最新文章

  1. I.MX6 Android i2c-tools porting
  2. java面试精典问答
  3. 前端学习(2592):当前用户显示
  4. unity许可证不可用_不可思议之梦蝶从PC版移植到Nintendo Switch经验分享(上)
  5. PageObjectPageFactory
  6. php 判断 小米 手机浏览器,javascript - uc、qq、搜狗 以上三个手机浏览器判断移动端的js代码不执行...
  7. mysql 速度评测_[评测]低配环境下,PostgresQL和Mysql读写性能简单对比(欢迎大家提出Mysql优化意见)...
  8. 新的Steam控制器,ScummVM上的Sherlock Holmes以及更多开放游戏新闻
  9. 英语诗歌中的格律与韵 | Meter Rhyme
  10. lae界面开发工具入门之介绍十一--安卓系统如何编译打包?
  11. 游戏化学习:让学习之路成为游戏升级系统。
  12. 第七章集合与字典作业
  13. html将图片做成书的封面,把照片做成杂志 个人照片制作成报纸、杂志封面效果|封面设计软件[图文教程]...
  14. 【lwIP(第三章)】内存管理
  15. KTorrent for KDE 4 已抵达
  16. 利用form表单上传图片,图片保存到本地,得到图片名字(后期可以将图片名字存进数据库)
  17. 支付公司如何预防和治理重复出款的风险
  18. c++ 用 eigen与opencv计算两个向量的夹角,两个向量之间的夹角,向量的朝向
  19. 2020身高体重标准表儿童_儿童身高体重对照表下载-2020儿童身高体重标准表最新版高清版 - 极光下载站...
  20. 【问题排查】InheritableThreadLocal类引发的生产事故

热门文章

  1. 对话系统有哪些最新进展?这17篇EMNLP 2021论文给你答案
  2. 想快速发表CV/NLP论文?试试这几个方向!
  3. 巧断梯度:单个loss实现GAN模型(附开源代码)
  4. POJ 2251 Dungeon Master(三维BFS求最短路径)
  5. java判断字符串有中文_JAVA入门之正则表达式判断字符串包含中文
  6. springboot+springsecurity+mybatis+jwt实现单点登录(详细到爆了)
  7. springboot集成测试时@RunWith和@SpringBootTest爆红不能测试
  8. oracle获取当前日期的前一天,判断两个日期是否相等
  9. 软件测试——StringFunction测试
  10. Vue——Vue-Router的push和replace方法[Uncaught (in promise) Error]解决方案