「Redis」08 主从复制

news2024/7/6 19:17:14

笔记整理自【尚硅谷】Redis 6 入门到精通 超详细 教程

Redis——主从复制

1. 简介

主机数据更新后根据配置和策略, 自动同步到备机的 master/slaver 机制,Master 以写为主,Slaver 以读为主。

image-20220922171435049

主从复制的好处

  • 读写分离,性能扩展
  • 容灾快速恢复

2. 搭建 一主多从

一主两从

  • 创建文件目录

    mkdir /opt/etc
    
  • redis.conf 复制到当前目录

    cp /etc/redis.conf /opt/etc/
    
  • 创建 3 3 3redis.conf 配置文件(一主两从)

    vim redis6379.conf
    vim redis6380.conf
    vim redis6381.conf
    
    • 配置文件内容:include引入公共部分,再进行单独的配置。

      # redis6379.conf
      include /opt/etc/redis.conf
      pidfile /var/run/redis_6379.pid
      port 6379
      dbfilename dump6379.rdb
      
      # redis6380.conf
      include /opt/etc/redis.conf
      pidfile /var/run/redis_6380.pid
      port 6380
      dbfilename dump6380.rdb
      
      # redis6381.conf
      include /opt/etc/redis.conf
      pidfile /var/run/redis_6381.pid
      port 6381
      dbfilename dump6381.rdb
      
  • 启动 3 3 3redis 服务器

    image-20220922175705175

  • 查看主机运行情况

    info replication
    

    目前 3 3 3 台服务器都是主机 master

    image-20220922175526186

  • 配从不配主

    slaveof <ip><port>
    # 成为某个实例的从服务器
    

    在6380和6381上执行:

    slaveof 127.0.0.1 6379
    

    image-20220922172915278

    image-20220922172920231

  • 再次查看主机运行情况

    6379 6379 6379 为主机 master 6380 6380 6380 6381 6381 6381 为从机 slave

    image-20220922200719808

    成功搭建, master 负责写操作,slave 负责读操作。

3. 主从复制原理

  • slave 启动成功连接到 master 后会发送一个 sync 命令(同步命令)。
  • master 接到命令启动后台的存盘进程,对数据进行持久化操作,同时收集所有接收到的用于修改数据集命令,在后台进程执行完毕之后,master 将传送整个数据文件(rdb)到 slave,以完成一次完全同步。
  • 当主服务进行写操作后,和从服务器进行数据同步。
  • 全量复制:而 slave 服务在接收到数据库文件数据后,将其存盘并加载到内存中。
    • 从服务器主动(第一次)向主服务器发起请求就是全量复制。
  • 增量复制:master 继续将新的所有收集到的修改命令依次传给 slave,完成同步。
    • 每次主服务器进行写操作后,主动对从服务器进行同步,是增量复制。
  • 只要是重新连接 master,一次完全同步(全量复制)将被自动执行。

image-20220922192318183

image-20220922192836187

4. 常用三招

Ⅰ. 一主二仆

  • 切入点问题

    • slave1slave2 是从头开始复制还是从切入点开始复制?
      • 假如此时 slave2 挂掉了,主机新添加了 k4 进来,那之前的 k1, k2, k3 是否也可以复制?
      • 答案:从头开始复制k1, k2, k3, k4 的数据都会被复制到重新启动的从机中。
      • 从机重启需重设:slaveof 127.0.0.1 6379
  • 从机是否可以写?set 可否?

    • 在从机上写数据报错

      image-20220922185639863

  • 主机 shutdown 后情况如何?从机是上位还是原地待命?

    • 从机原地待命,依旧是主机的 slave,但此时显示主机已经 down 掉了。
    • 主机重新启动后,一切正常
  • 主机又回来了后,主机新增记录,从机还能否顺利复制?

    • ,一切正常。
  • 其中一台从机 down 后情况如何?依照原有它能跟上大部队吗?

    • ,从机启动后,会从头开始复制主机的内容。

Ⅱ. 薪火相传

  • 上一个 slave 可以是下一个 slavemasterslave 同样可以接收其他 slave 的连接和同步请求,那么该 slave 作为了链条中下一个的 master,可以有效减轻 master 的写压力,去中心化降低风险。

    slaveof <ip><port>
    
    slaveof 127.0.0.1 6380
    

    6379 6379 6379 为主机 master 6380 6380 6380 6381 6381 6381 为从机 slave,但此时 6381 6381 6381 主机为 6380 6380 6380

    image-20220922201100421

  • 中途变更转向:会清除之前的数据,重新建立拷贝最新的。

  • 当某个 slave 宕机,后面的 slave 都没法备份。

    • 即当主机挂掉,从机还是从机,但是无法继续写数据。

image-20220922193042454

Ⅲ. 反客为主

  • 当一个 master 宕机后,后面的 slave 可以立刻升为 master,其后面的 slave 不用做任何修改。

    • 此时 master 6379 6379 6379 down,将 6380 6380 6380 从机变为主机:

      slaveof no one
      

      image-20220922201504612

    • 缺点:还需要手动完成。

      • 解决:参考下方哨兵模式。

5. 哨兵模式(Sentinel)

Ⅰ. 概述

反客为主的自动版,能够后台监控主机是否故障,如果故障了根据投票数自动将从库转换为主库。

image-20220922202033968

  • Sentinel 哨兵主要用来监控 redis 主从集群,提高了 redis 主从集群的可用性。
  • 哨兵机制解决了主从复制架构中的主节点宕掉后从节点无法作为主节点对外服务的问题
  • Sentinel(哨兵)是 Redis 的高可用性解决方案:由一个或多个 Sentinel 实例 组成的 Sentinel 系统可以监视任意多个主服务器,以及这些主服务器属下的所有从服务器,并在被监视的主服务器进入下线状态时,自动将下线主服务器属下的某个从服务器升级为新的主服务器。简单的说哨兵就是带有自动故障转移功能的主从架构。

Ⅱ. 哨兵模式实现机制

哨兵可以设置多个,哨兵刚开始监控主节点,向主节点发送心跳检测,检测主节点是否还在运行,一旦半数以上的哨兵判断主节点已经挂掉了 ,那么就会从从节点中选举出一个节点作为主节点对外服务。

image-20221129200016413#pic_center)

Ⅲ. 配置哨兵模式

  • 调整为一主二仆模式

    • 6379 6379 6379 为主机 master 6380 6380 6380 6381 6381 6381 为从机 slave
  • 创建 sentinel.conf 文件

    • 名字一定不能错

      vim /opt/etc/sentinel.conf
      
  • 配置哨兵

    sentinel monitor mymaster 192.168.232.102 6379 1
    
    # mymaster:监控对象起的服务器名称
    # 1:至少有多少个哨兵同意迁移的数量。 
    
  • 启动哨兵

    redis-sentinel  /opt/etc/sentinel.conf 
    

    image-20221129195912100

Ⅳ. 故障恢复

image-20220922213305785

哨兵对 Redis 的主从服务进行监控,如果主机挂掉了会选举新的主机,保证整个系统的高可用。

  • 主机挂掉,会从机选举中产生新的主机。

    • 大概 10 10 10 秒左右可以看到哨兵窗口日志,切换了新的主机

      通过哨兵,将主机切换为 6381 6381 6381

      1

    • 哪个从机会被选举为主机呢?根据优先级别:slave-priority

      • 参考下方选举规则。
    • 原主机宕机重启后会变为从机。

      2

选举规则

按下列三项顺序判断选举哪个节点作为主机:

  • 根据优先级别,slave-priority/replica-priority,优先选择优先级靠前的。

    • 优先级在 redis.conf 中默认:replica-priority 100,值越小优先级越高。

    image-20220922213708799

  • 偏移量是指获得原主机数据最全的,优先选择偏移量大的。

  • 每个 redis 实例启动后都会随机生成一个 40 位的 runid,优先选择 runid 最小的服务。

Java代码

private static JedisSentinelPool jedisSentinelPool = null;

public static Jedis getJedisFromSentinel() {
    if (jedisSentinelPool == null) {
        Set<String> sentinelSet = new HashSet<>();
        sentinelSet.add("192.168.11.103:26379");// 26379:哨兵Sentinel端口号

        JedisPoolConfig jedisPoolConfig =new JedisPoolConfig();
        jedisPoolConfig.setMaxTotal(10); // 最大可用连接数
        jedisPoolConfig.setMaxIdle(5); // 最大闲置连接数
        jedisPoolConfig.setMinIdle(5); // 最小闲置连接数
        jedisPoolConfig.setBlockWhenExhausted(true); // 连接耗尽是否等待
        jedisPoolConfig.setMaxWaitMillis(2000); // 等待时间
        jedisPoolConfig.setTestOnBorrow(true); // 取连接的时候进行一下测试 ping pong

        jedisSentinelPool = new JedisSentinelPool("mymaster", sentinelSet, jedisPoolConfig); // mymaster:主机的名字
        return jedisSentinelPool.getResource();
    } else {
        return jedisSentinelPool.getResource();
    }
}

Ⅴ. 存在的问题

复制延时

  • 由于所有的写操作都是先在 master 上操作,然后同步更新到 slave 上,所以从 master 同步到 slave 从机有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,slave 机器数量的增加也会使这个问题更加严重。

集群模式

  • 虽然哨兵解决了主从复制架构中的主节点挂掉后从节点无法对外服务的缺陷,但是仍然存在着整个结构只有一台服务进行工作的问题,在高并发情况下显然是会崩掉的,而且由于做持久化,久而久之 AOF 文件会越来越大,服务器迟早会崩掉,所有我们要做成集群的模式,多台 Redis 对外进行服务,实现高可用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/68818.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

利用styleSheet,避免js手动频繁修改样式

styleSheet是一个样式表&#xff0c;记录了一个html文件中<style>标签中的样式 &#x1f5a8;️体感styleSheet 对于下面一个html文件 <!DOCTYPE html> <html lang"en"><head><style>h1 {color: red;}div {color: green; }</styl…

VMware替换难?听听ZStack 的这3家制造业客户怎么说……

随着国家对信创转型的持续扶持&#xff0c;加之VMware原有的产品与客户云建设需求的契合度不高&#xff0c;越来越多的用户选择将自身的IT系统替换为国产化的信创产品&#xff0c;且已经在金融、交通、制造业、教育、房地产等领域落地出现从VMware迁移转型的成功案例。在此趋势…

Python实战案例,PyQt5+socket模块,Python制作小型桌面应用

前言 本文给大家分享的是如何通过用PyQt5制作小型桌面应用 PyQt概述 PyQt5是Qt框架的Python语言实现&#xff0c;由Riverbank Computing开发&#xff0c;是最强大的GUI库之一。PyQt提供了一个设计良好的窗口控件集合&#xff0c;每一个PyQt控件都对应一个Qt控件&#xff0c;…

js实现的在线绘图板,写字板

一个像素完美的基于web的MS Paint重制版和更多…试试看&#xff01; JS Paint高度逼真地再现了MS Paint的每个工具和菜单&#xff0c;甚至是鲜为人知的功能。 它支持主题、其他文件类型和辅助功能&#xff0c;如眼睛注视模式和语音识别。 在线demo地址在线绘图板&#xff0c;在…

CorelDRAW破解版是如何一步一步坑人的

如果你还在说破解版软件免费好用&#xff0c;那我真的要用一个朋友的例子和你讲讲破解版CorelDRAW的害人之处了。 小赵是我的朋友学设计的&#xff0c;学生党一枚苦于囊中羞涩经常上破解版的车。一次他接了一个设计LOGO的活儿&#xff0c;准备用CorelDRAW来做这个LOGO。于是从…

web安全之post注入和cookie注入

目录 环境 靶场11&#xff08;POST注入&#xff09; 靶场20&#xff08;cookie注入&#xff09; 环境 靶场&#xff1a;sqli-labs&#xff0c;工具&#xff1a;burp 靶场11&#xff08;POST注入&#xff09; 抓包修改请求体 uname-1 union select 1,2 #&passwd&s…

2023年天津仁爱学院高职升本科专业考试报考须知

2023年天津仁爱学院高职升本科专业考试报考须知 一、报名条件 1.报考我校2023年高职升本科各专业的考生&#xff0c;应符合天津市教育招生考试院制定的2023 年天津市高职升本科及我校专业考试有关报考条件&#xff0c;须完成2023年天津市高职升本科文化考试报名相关手续&#x…

【Web端智能聊天客服】之HTML、CSS、Bootstrap的讲解及实例(超详细必看 附源码)

觉得有帮助请点赞关注收藏~~~ 一、HTML基础 HTML全称是HyperText Markup Language 是网页的标准标记语言&#xff0c;使用HTML可以创建自定义网站或者模板网站&#xff0c;HTML代表超文本标记语言&#xff0c;主要用于描述网页结构&#xff0c;HTML页面元素体现浏览器如何显示…

商业智能BI在面向报表和模型开发时,有什么不同?

企业在面试商业智能BI技术开发人员&#xff0c;发现基本上90%的人分不清什么是面向报表开发&#xff0c;什么是面向模型开发&#xff0c;不明白这个问题背后的意思。10%左右的人稍微暗示一下&#xff0c;大概就懂你想了解的是什么了&#xff0c;这10%的是真正有过完整的数据仓库…

我是如何开始能写python爬虫的?给零基础入门Python小白一条清晰的学习路线

重要的事说三遍&#xff1a;不要从看书开始&#xff0c;不要从看书开始&#xff0c;不要从看书开始&#xff01;~~ 爬虫这么有意思的东西&#xff0c;看书多没有乐趣&#xff0c;从网上找个视频&#xff0c;直接跟着写&#xff0c;然后再根据视频&#xff0c;按照自己的想法写…

Polaris 和 dubbogo 全面对接,让微服务更简单

作者 | 邓正威&#xff0c;廖春涛&#xff08;春少&#xff09;&#xff0c;赵新&#xff08;花名 于雨&#xff09;背景概述什么是 PolarisPolaris 是腾讯开源的服务治理平台&#xff0c;致力于解决分布式和微服务架构中的服务管理、流量管理、配置管理、故障容错和可观测性问…

公路交叉数(POJ3067)-树状数组解决逆序对

题目大意&#xff1a; 东海岸有N个城市&#xff0c;西海岸有M个城市&#xff08;N≤1000&#xff0c;M≤1000&#xff09;&#xff0c;将建K条公路。每个海岸的城市从北到南编号为1,2&#xff0c;…每条高速公路都是直线&#xff0c;连接东海岸和西海岸的城市。建设资金由高速公…

各开发语言DNS缓存配置建议

作者&#xff1a;翟贺龙 一、背景 在计算机领域&#xff0c;涉及性能优化动作时首先应被考虑的原则之一便是使用缓存&#xff0c;合理的数据缓存机制能够带来以下收益&#xff1a; 1.缩短数据获取路径&#xff0c;热点数据就近缓存以便后续快速读取&#xff0c;从而明显提升…

小侃设计模式(十六)-备忘录模式

1.概述 备忘录模式&#xff08;Memento Pattern&#xff09;是一种行为型模式&#xff0c;它的主要思想是在不破坏封装性的前提下&#xff0c;捕获一个对象的内部状态&#xff0c;并将该状态保存在该对象之外&#xff0c;这样以后就可将该对象恢复到原先保存的状态。它是相对简…

【项目问题】程序里,oracle相关的内容,为什么有些能显示表有些不能显示表,但是用oracle工具就可以看到所有表

运行过程中的问题客户提出问题找一下原因问题找到了那如何解决这个看不到的问题呢客户提出问题 1、oracle数据源链接成功了&#xff0c;但是在产品使用过程中发现&#xff0c;没有表&#xff0c;空空如也 找一下原因 先看一下用户&#xff1a;zd202207 2、再去看看数据库工…

效率倍增!5款超级好用的Python工具库!

Python 是一门简单易学却功能非常强大的语言。好玩实用的工具层出不穷&#xff0c;也给我们的工作生活带来极大的方便。在之前文章中我已多次分享过一些实用的工具&#xff0c;有兴趣的可以翻阅一下&#xff0c;今天我再分享 5 款非常实用的工具: LuxTranslatorsTextShotFancy…

C规范编辑笔记(六)

往期文章&#xff1a; C规范编辑笔记(一) C规范编辑笔记(二) C规范编辑笔记(三) C规范编辑笔记(四) C规范编辑笔记(五) 正文&#xff1a; 今天我们继续来分享一下我们C规范编辑笔记第六篇~ 话不多说&#xff0c;我们直接来看&#xff1a; 1、 结构体变量不得在未指定初始化…

华为云大数据BI 为中小型企业智慧运营保驾护航

华为云大数据BI 为中小型企业智慧运营保驾护航 企业数字化转型中&#xff0c;必然面临信息数据潜在价值变现的问题&#xff0c;在解决这一问题的途中&#xff0c;企业可能面临多种困难&#xff0c;尤其是信息数据分析&#xff0c;这直接关系到企业能否实现潜在价值变现。对于小…

[附源码]Python计算机毕业设计Django疫情管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

chrome新特性-recorder

chrome新特性-recorder一、简介二、录制三、录制回放1.Chrome DevTool工具2.Puppeteer脚本(1) 介绍(2) 使用一、简介 recorder 与Selenium IDE浏览器插件类似&#xff0c;可用于自动化测试及脚本生成(Puppeteer脚本);前者为Web自动化测试框架Selenium的配套浏览器插件支持Java、…