redis 05 篇——主从复制

news2024/9/23 15:30:09

redis 05 篇——主从复制

  • 1. 前言
    • 1.1 什么是复制?
      • 1.1.1 复制概述
      • 1.1.2 主从复制的架构
    • 1.2 为什么要使用主从复制?
    • 1.3 主从复制主要的命令+配置
  • 2. 准备工作
  • 3. 核心配置
    • 3.1 主服务器
    • 3.2 从服务器
  • 4. 实例演示
    • 4.1 简单实例——两台服务器
      • 4.1.1 同一服务多个redis实例——slaveof命令
      • 4.1.2 两台服务
        • 4.1.2.1 slaveof 临时连接
        • 4.1.2.2 通过配置文件永久生效
          • 4.1.2.2.1 主要配置
          • 4.1.2.2.2 查看效果
          • 4.1.2.2.2 注意事项
    • 4.2 简单演示——一主二从
  • 5. 总结
    • 5.0 下面参考网站地址:
    • 5.1 主从复制的原理
      • 5.1.1 主从全量复制
      • 5.1.2 进入平稳,增量复制
      • 5.1.3 从机下线,断点续传
    • 5.2 主从复制的好处
    • 5.3 主从复制的缺点
    • 5.4 主从复制过程的几大注意点
  • 6. 配置常见的问题
    • 6.1 connected_slaves:0
      • 6.1.1 问题描述
      • 6.1.2 connected_slaves:0 之 网络问题
        • 6.1.2.1 查找问题
          • 6.1.2.1.2 解决问题
      • 6.1.3 connected_slaves:0 之 密码问题
    • 6.2

1. 前言

1.1 什么是复制?

1.1.1 复制概述

  • 在redis中,用户可以通过执行 slaveof 命令 或者设置 slaveof 选项(我用的6.0,需要设置replicaof 选项),让一个服务器去复制(replicate)另一个服务器,我们称呼被复制的服务器为主服务器(master),而对主服务器进行复制的服务器则被称为从服务器(slave)。

1.1.2 主从复制的架构

  • Redis Replication是一种 master-slave 模式的复制机制,这种机制使得 slave 节点可以成为与 master 节点完全相同的副本,可以采用一主多从或者级联结构。架构如下:
    在这里插入图片描述

1.2 为什么要使用主从复制?

  • 使用Redis主从复制的原因主要是单台Redis节点存在以下的局限性:
    1. Redis虽然读写的速度都很快,单节点的Redis能够支撑QPS大概在5w左右,如果上千万的用户访问,Redis就承载不了,成为了高并发的瓶颈。
    2. 单节点的Redis不能保证高可用,当Redis因为某些原因意外宕机时,会导致缓存不可用。
    3. CPU的利用率上,单台Redis实例只能利用单个核心,这单个核心在面临海量数据的存取和管理工作时压力会非常大。

1.3 主从复制主要的命令+配置

  1. 查看当前角色命令:
    info replication
    
  2. 从库配置(临时)命令
    slaveof 主库IP 主库端口
    
  3. 从库配置(配置文件-永久)
    replicaof master的IP 6379
    
  4. 反客为主命令
    slaveof no one
    

2. 准备工作

  • 2至3台服务器或者虚拟机,最后3台吧,配置好主机名、IP地址和Redis环境

3. 核心配置

  • 实现主从复制的配置要点:配从库不配主库

3.1 主服务器

  • 如下:

    daemonize yes
    
    # bind 127.0.0.1
    bind 0.0.0.0
    port 6379
    	
    requirepass redis
    
    loglevel notice
    logfile "/home/susu/soft/mkinstall/redis/redis-6.0.16/logs/redis-master.log"
    

3.2 从服务器

  • 这里只看其中一台从服务器的配置即可,如下:
    daemonize yes
    
    bind 127.0.0.1
    port 6372
    
    loglevel notice
    logfile "/home/susu/soft/mkinstall/redis/redis-6.0.16/logs/redis-s1.log"
    
    # replicaof <masterip> <masterport>
    replicaof master的IP 6379
    
    # masterauth <master-password>
    masterauth redis
    

4. 实例演示

4.1 简单实例——两台服务器

4.1.1 同一服务多个redis实例——slaveof命令

  • 我这里是一个简单的操作,没有复杂的配置,就是在一台服务器上配置了两个redis服务,一个6379的端口,一个6372的端口。
  • 把 6379 作为 master 的话,需要在 6372 里执如下命令实现主从复制:
    slaveof 127.0.0.1 6379
    
    在这里插入图片描述
    在这里插入图片描述

4.1.2 两台服务

4.1.2.1 slaveof 临时连接

  • 两台服务器,主服务,端口 6379 ,从服务器端口 6372,如下:
    slaveof 主服务器IP 6379
    
    其实与《4.1.1 同一服务多个redis实例》差不多,不截图了,如果有遇到connected_slaves:0 问题,看下面的6.1
  • 这种临时模式存在的问题:从服务器重启后会失效,需要重新 slaveof

4.1.2.2 通过配置文件永久生效

4.1.2.2.1 主要配置
  • 还是上面的两台服务器,主要配置如下:
    # replicaof <masterip> <masterport>
    replicaof 43.143.190.116 6379
    
4.1.2.2.2 查看效果
  • 连接客户端,已经实现了主从复制,不用使用 slaveof 手动实现主从复制,如下:
    在这里插入图片描述
    在这里插入图片描述
4.1.2.2.2 注意事项
  • 主服务器如果配置了密码,如下:
    # requirepass foobared
     requirepass redis
    
    那么,从服务器需要配置 masterauth 选项,如下:
    # masterauth <master-password>
    masterauth redis
    

4.2 简单演示——一主二从

  • 两台从机的配置基本上是没啥差别的,这里不再说明
  • 配置完成之后,master 里执行查看角色命令 info replication,可以看出下面挂着两个slave
    在这里插入图片描述

5. 总结

5.0 下面参考网站地址:

  • 推荐两篇写的不错的文章,如下:

    Redis主从复制原理.

5.1 主从复制的原理

  • 从总体上来说,Redis主从复制的策略就是:当主从服务器刚建立连接的时候,进行全量同步;全量复制结束后,进行增量复制。当然,如果有需要,slave 在任何时候都可以发起全量同步。

5.1.1 主从全量复制

  • Redis全量复制一般发生在Slave初始化阶段,这时Slave需要将Master上的所有数据都复制一份,具体步骤如下:
    • 首先,slave 启动,同步申请:
      slave启动成功后连接到master后会发送一个sync命令。
      slave首次全新连接master,一次完全同步(全量复制)将被自动执行,slave自身原有数据会被master数据覆盖清除。

    • master 首次连接,全量复制:
      master节点收到sync命令后会开始在后台保存快照(即rdb持久化,主从复制时会触发R D B),同时收集所有接收到的用于修改数据集命令缓存起来,master节点执行RDB持久化完后,master将RDB快照文件和所有缓存的命令发送打所有slave,以完成一次完全同步。

      而slave服务在接收到数据库文件数据后,将其存盘并加载到内存中,从而完成复制初始化。

5.1.2 进入平稳,增量复制

  • Redis的增量复制是指在初始化的全量复制并开始正常工作之后,master服务器将发生的写操作同步到slave服务器的过程。
    增量复制的过程主要是master服务器每执行一个写命令就会依次向slave服务器发送相同的写命令,slave服务器接收并执行收到的写命令,完成同步。

5.1.3 从机下线,断点续传

  • 当master-slave网络连接断掉后,slave重新连接master时,会触发全量复制,但是从2.8版本开始,slave与master能够在网络连接断开重连后,只从中断处继续进行复制,而不必重新同步,这就是所谓的断点续传。

    master会检查backlog里面的offset,master和slave都会保存一个复制的offset,还有一个masterId,offset是保存在backlog中的,master只会把已经复制的offset后面的数据复制给slave。

5.2 主从复制的好处

  1. 数据冗余:主从复制实现了数据的热备份,是持久化之外的一种数据冗余方式。
  2. 故障恢复:如果master宕掉了,使用哨兵模式,可以提升一个 slave 作为新的 master,进而实现故障转移,实现高可用
  3. 负载均衡:可以轻易地实现横向扩展,实现读写分离
    一个 master 用于写,多个 slave 用于分摊 的压力,从而实现高并发;

5.3 主从复制的缺点

  • 由于所有的写操作都是先在Master上操作,然后同步更新到Slave上,所以从Master同步到Slave服务器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,Slave机器数量的增加也会使这个问题更加严重。
  • 如果master挂了的话,默认情况下不会在slave节点中自动重选一个master,如果每次都人工干预的话也不太现实。

5.4 主从复制过程的几大注意点

  • 如果是通过配置文件实现的主从复制:
    1. 从机不能操作写命令,只能读,从而体现读写分离。
    2. 主机shutdown后,从机不会上位,但是主机重启后,主从关系依然存在。
    3. 某从机shutdown后,主机还在继续,当从机重启后主从关系还在,并实现主机所有复制。

6. 配置常见的问题

6.1 connected_slaves:0

6.1.1 问题描述

  • 问题描述:
    进行主从连接配置时,主服务器使用 info replication 查到的 connected_slaves数一直是0。
    在这里插入图片描述
    在这里插入图片描述

6.1.2 connected_slaves:0 之 网络问题

6.1.2.1 查找问题

  • 先看从服务器上的日志,如下:
    11176:S  * Connecting to MASTER 主服务器IP:6379
    11176:S  * MASTER <-> REPLICA sync started
    11176:S  # Error condition on socket for SYNC: Connection refused
    
    在这里插入图片描述
  • 连接被拒绝了,然后我们 telent一下端口,是不通的
    telnet master的IP 6379
    
    在这里插入图片描述
6.1.2.1.2 解决问题
  • 第一步:修改主服务器上的配置文件里的 bind 选项

    • 我这里将 bind 127.0.0.1 暂且改为了bind 0.0.0.0
      # bind 127.0.0.1
      bind 0.0.0.0
      
    • 关于bind的更多解释,如下:
      • bind 配置的用法:bind配置了什么ip,别人就得访问bind里面配置的ip才访问到redis服务。
      • 官方说明,bind是用于,在一台redis服务器中有多块网卡的场景下。如果不配置 “bind”,redis会监听来自宿主机器上所有网卡的请求,官方认为这是很危险的。
      • bind默认的是 127.0.0.1,说明只能用redis宿主机的redis-cli去访问redis,不允许网络上其他主机访问。
      • 所以,要解决这个报错,比较推荐的做法是:配置宿主机的内或外网ip(redis从服务器 能访问的到的ip)。
        或者将bind 127.0.0.0 改为 bind 0.0.0.0,这配置表明接收所有网卡的请求。
  • 第二步:再尝试一下 telnet,看到从服务器已经能访问了
    在这里插入图片描述
    好了,主服务器上再次执行 info replication 命令查看,可以看到问题已经解决了
    在这里插入图片描述

6.1.3 connected_slaves:0 之 密码问题

  • 首先,看日志是不是这方面的问题:
    在这里插入图片描述

  • 然后,查看master上配置的密码:

    requirepass redis
    

    在这里插入图片描述

  • 接着再设置从服务器的 masterauth

    # masterauth <master-password>
    masterauth redis
    

    在这里插入图片描述
    好了,设置完之后,重启从服务器,问题解决!

6.2

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

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

相关文章

小程序:使用分包异步化解决一个分包引入另一个分包的组件/函数的问题

背景 我们一般使用小程序插件的时候&#xff0c;喜欢将其放在分包中&#xff0c;因为插件体积会打包进主包内&#xff0c;很容易造成主包体积超过 2M 从而无法发布&#xff0c;我们暂且叫这个有插件的分包叫分包P&#xff0c;这时候另外两个业务分包XY&#xff0c;想引入这个分…

从Java培训班出来好找工作吗?

个人觉得这个问题要从两方面来看&#xff0c;首先是培训班的Java课程质量如何&#xff0c;是否贴合用人单位实际需求&#xff0c;学出来的技术能对口&#xff1b;其次是培训班是否保障就业&#xff0c;有就业机会渠道推荐&#xff0c;比如老学员内推、合作企业人才输送以及企业…

【Spring Cloud Alibaba】008-Sentinel

【Spring Cloud Alibaba】008-Sentinel 文章目录【Spring Cloud Alibaba】008-Sentinel一、服务雪崩1、概述2、解决方案常见的容错机制二、Sentinel&#xff1a;分布式系统的流量防卫兵1、**Sentinel** 概述简介特性Sentinel 的开源生态Sentinel 的历史2、Sentinel 基本概念资源…

低代码系统能够解决哪些痛点?

低代码系统能够解决哪些痛点&#xff1f;如果用4句话去归纳&#xff0c;低代码开发可以解决以下问题—— 为企业提供更高的灵活性&#xff0c;用户可以突破代码的限制自主开发业务应用&#xff1b;通过减少对专业软件开发人员的依赖&#xff0c;公司可以快速响应市场上的新业务…

cartographer中分支定界法理解——为什么能保证上界

定界原理 储存的不同分辨率栅格图&#xff0c;为保证上边界正确性&#xff0c;即高层中的评分一定高于其底层节点的评分&#xff0c;压缩的地图并非直接从原图固定间隔采样&#xff0c;而是将固定间隔中所有坐标概率值最大值作为低分辨率地图。 理解&#xff1a; 1、其在计算…

ESP32中MQTT通讯

MQTT文档介绍 一、在PC上可以使用 MQTT X 工具&#xff1a;&#xff08;参考地址&#xff09; 1、客户端下载&#xff1a;MQTT X 工具下载地址 2、EMQX服务器下载地址 3.打开命令行工具&#xff0c;进入目录运行EMQX服务。 电脑左下角&#xff0c;右键开始->运行->输…

“双碳”目标下二氧化碳地质封存技术应用前景及模型构建

我国二氧化碳地质封存技术起步较晚&#xff0c;目前仍没有一套相对完整的行业规范&#xff1b;且就该技术而言&#xff0c;涉及环节众多&#xff0c;理论相对复杂&#xff0c;对于行业的新入局者不太友好。因此&#xff0c;结合时代背景&#xff0c;我们首次尝试对二氧化碳地质…

升级多语言,应用国际化_三叠云

国际化配置 路径 表单设计 >> 字段属性 功能简介 【字段】新增 「国际化配置」 这是一个和国际化配合的功能&#xff0c;可以在用户通过切换不同的语言环境时&#xff0c;表单的标题、提示语等将会根据相应的语言环境切换到相应的表单字段标题、提示语&#xff0c;使…

Eureka注册中心-Ribbon负载均衡

1、Eureka注册中心服务注册与发现提供了一个服务注册中心、服务发现的客户端&#xff0c;还有一个方便查看所有注册的服务的界面。所有的服务使用Eureka的服务发现客户端来将自己注册到Eureka的服务器上。1.1 、Eureka的结构和作用1.1.1、Eureka的作用1.1.2、获取地址信息的流程…

【C++进阶】三、二叉搜索树

目录 一、二叉搜索树 1.1 概念 1.2 二叉搜索树操作 二、二叉搜索树实现 2.1 框架总览 2.2 实现接口总览 2.2.1 构造函数 2.2.2 拷贝构造 2.2.3 赋值重载 2.2.4 析构函数 2.2.5 二叉搜索树的遍历 2.2.6 插入函数 2.2.7 查找函数 2.2.8 删除函数 2.3 二叉搜索数完整…

MotionLayout动画效果实现的几种方式

前言MotionLayout 的使用大家应该都会了&#xff0c;如果不会看这里。本文就不科普如何使用&#xff0c;什么属性是什么意思&#xff0c;怎么使用之类的了&#xff0c;这里只是探讨一下 MotionLayout 效果实现的几种方式。一、ConstraintLayout 的方式定义我们知道 MotionLayou…

第三回:布局格式定方圆

import numpy as np import pandas as pd import matplotlib.pyplot as plt plt.rcParams[font.sans-serif] [SimHei] #用来正常显示中文标签 plt.rcParams[axes.unicode_minus] False #用来正常显示负号一、子图 1. 使用 plt.subplots 绘制均匀状态下的子图 返回元素分…

ROS1学习笔记:ROS中的坐标管理系统(ubuntu20.04)

参考B站古月居ROS入门21讲&#xff1a;ROS中的坐标系管理系统 基于VMware Ubuntu 20.04 Noetic版本的环境 文章目录一、机器人中的坐标变换二、TF功能包三、小海龟跟随实验3.1 启动实验3.2 查看当前的TF树3.3 坐标相对位置可视化3.3.1 tf_echo3.3.2 rviz一、机器人中的坐标变换…

2023上半年软考,广州/东莞/深圳/江苏报班是明智的选择

软考是全国计算机技术与软件专业技术资格&#xff08;水平&#xff09;考试&#xff08;简称软考&#xff09;项目&#xff0c;是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试&#xff0c;既属于国家职业资格考试&#xff0c;又是职称资格考试。 系统集成…

飞桨paddlenlp安装报错python setup.py egg_info did not run successfully.

原因缺少setuptools_scm 安装setuptools_scm pip install setuptools_scm 然后再安装paddlenlp就会噼里啪啦的下载一大堆东东了 下载OVER

【K8S系列】第十四讲:初识K8s架构之服务器的变迁

目录 序言 1简介 1.1 物理机时代 物理服务器的缺点 1.2 虚拟机 虚拟机优缺点 1.3 容器时代 1.4 总结 2 容器编排 2.1 什么是容器编排 序言 人生犹如一股奔流&#xff0c;没有暗礁&#xff0c;激不起美丽的浪花。 三言两语&#xff0c;不如细心探索 今天学习一下K8s…

ROS从入门到精通2-6:Rviz可视化进阶(画坐标轴、直线、平面、圆柱等)

目录0 专栏介绍1 Rviz可视化2 环境配置3 使用方法4 测试用例0 专栏介绍 本专栏旨在通过对ROS的系统学习&#xff0c;掌握ROS底层基本分布式原理&#xff0c;并具有机器人建模和应用ROS进行实际项目的开发和调试的工程能力。 &#x1f680;详情&#xff1a;《ROS从入门到精通》…

因《狂飙》张颂文,吐槽广东人比内地人聪明,周杰才是地域黑鼻祖

最近一段时间&#xff0c;电视剧《狂飙》落下帷幕&#xff0c;但是关于这部电视剧的争议&#xff0c;却从来就没有停止过。尤其是主演张颂文&#xff0c;更是受到了大家的关注&#xff0c;不但圈住了很多的粉丝&#xff0c;影视圈很多同行也对他赞许有加。 自古以来同行是冤家&…

SSM-SpringBoot(快速启动,yaml配置)

1 SpingBoot简介 1.1 创建SpringBoot项目 创建 层次 boot程序最基本的架子 开发 RestController RequestMapping("/books") public class BookController {GetMapping("/{id}")public String getById(PathVariable Integer id){System.out.println(&qu…

亚马逊云科技张文翊:云计算正成为企业数字化的“技术底座”

在走进经济筑底重启回升的2023年&#xff0c;我们该如何直面这场需要时间验证的修复之旅&#xff1f;亚马逊全球副总裁、亚马逊云科技大中华区执行董事张文翊与《经济观察报》App的“企业家说2023”栏目展开对谈&#xff0c;分享亚马逊云科技如何立于云端&#xff0c;帮助企业上…