Redis_主从复制

8. 主从复制

8.1 简介

主从库采用读写分离的方式

  • 读操作:主库、从库都可以处理
  • 写操作:首先写到主库执行,然后再将主库同步给从库。

实现读写分离,性能扩展
容灾快速恢复
在这里插入图片描述

8.2 主从复制步骤

  1. 创建一个目录 ,在root下创建一个myredis的目录
    mkdir myredis//创建目录
    cd myredis //进行目录
    cp /opt/reids-6.2.6/redis.conf redis_1.conf //cp 源文件 目标文件
    ls
    
  2. 关闭aof
  3. 使用vi编辑三个conf文件,redis_6379.conf,redis_6380.conf,redis_6381.conf做为一主二从配置,配置文件内容如下所示:
    include redis_1.conf
    pidfile /var/run/reids_6379.pid
    port 6379
    dbfilename dump6379.rdb
    
  4. 分别启动三个服务
    [root@localhost myredis]# redis-server redis_6379.conf
    [root@localhost myredis]# redis-server redis_6380.conf
    [root@localhost myredis]# redis-server redis_6381.conf
    [root@localhost myredis]# ps -ef|grep redis
    root 7289 1 0 17:35 ? 00:00:00 redis-server 127.0.0.1:6379
    root 7296 1 0 17:35 ? 00:00:00 redis-server 127.0.0.1:6380
    root 7302 1 0 17:35 ? 00:00:00 redis-server 127.0.0.1:6381
    root 7316 6663 0 17:35 pts/0 00:00:00 grep --color=auto redis
    
  5. 在三个客户端,模拟分别连接到不同服务器
    redis-cli -p 端口号
    redis-cli -p 6379
    redis-cli -p 6380
    redis-cli -p 6381
    
  6. 查看服务器状态
    info replication
    
  7. 在6380和6381上调用replicaof ,将其从属于6379(如果是三台服务器以上步骤可以跳过,直接配置从属服务器)
    replicaof 127.0.0.1 6379
    
  8. 在主库上可以写入数据,从库不能写入数据
  9. 主库和从库都可以读数据

8.3 服务器宕机演示

8.3.1 从服务器宕机

  • 6381上调用shutdown
  • 在主服务器上写入数据
  • 6381重新连上时,仍然可以接收到主服务器的数据

8.3.2 主服务器宕机

  • 6379服务器调用shutdown
  • 在从服务器上仍然可以读取数据
  • 从服务器显示主服务器的状态为down
  • 当主服务器重新启动,从服务器显示主服务器的状态是up

8.4 主从同步原理

在这里插入图片描述

第一阶段

  • 主从建立连接,协商同步。从库和主库建立连接,告诉主库即将进行同步操作。主库需要确认并回复,主从就可以开始进行同步处理了。
  • 从库向主库发送一个psync指令,包含两个参数。一个是主库的runID,另一个是复制进度offset。
    • runID是每个redis实例启动时生成的一个随机ID,唯一标识。第一次复制时,从库不知道主库的runid,所以设为一个"?"。
    • offset,-1表示第一次复制
  • 主库收到指令后,会发送给从库fullresync指令去响应,带着主库的runid,还有目前复制进度offset。
  • 从库会记录下这两个参数。fullresync表示全量复制。主库把所有内容都复制给从库

第二阶段

  • 主库将所有数据发送给从库进行同步。从库收到rdb文件后,在本地把原有的数据清除,同步从主库接收到的rdb文件 。
  • 如果在主库把数据跟从库同步的过程中,主库还有数据写入,为了保证主从数据的一致性,主库会在内
  • 存中给一块空间replication buffer,专门记录rdb文件生成后收到的所有写操作

第三阶段

  • 主库把第二阶段执行过程中新收到的操作,再发送给从库,从库再加载执行这些操作,就实
    现同步处理了。

8.5 主-从-从模式

采用主-从-从模式,将主库生成和传输rdb文件的压力,以级联方式分散到从库上。
在这里插入图片描述

8.6 网络连接异常情况

在redis2.8之前,如果网络异常,再次连接后,需要做全量复制
从redis2.8之后,采用增量复制方式。repl_backlog_buffer缓冲区。当主从网络断开后,主库把收到写
操作,写入replication buffer,同时,也写入到repl_backlog_buffer缓冲区.
这个缓冲区,是一个环形缓冲区,主库会记录自己写到的位置,从库会记录自己读到的位置。
在之前还是会识别一下环形缓冲区还能不能够提供完整的数据,如果不能就进行全量同步了
在这里插入图片描述

  • repl_backlog_size参数
    • 缓冲空间大小=主库写入速度 * 操作大小-主从库网络传输速度 * 操作大小
    • repl_backlog_size=缓冲空间大小*2
    • 2000 * 2-1000 * 2=2000 大约为2M 乘2 所以repl_backlog_size值为4M

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【从零学习python 】21.Python中的元组与字典

文章目录 元组一、访问元组二、修改元组三、count, index四、定义只有一个数据的元组五、交换两个变量的值 字典介绍一、列表的缺点二、字典的使用进阶案例 元组 Python的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号…

使用Python解析通达信本地lday数据结构

通达信软件中的vipdoc是一个存储股票行情数据的文件夹。在通达信软件的安装目录下,可以找到一个名为vipdoc的文件夹,里面存放着各个股票的分时、日线、周线、月线等行情数据文件。这些数据文件可以用于自定义分析和回测股票的走势和交易策略,…

2023最新Windows编译ffmpeg详细教程,附msys2详细安装配置教程

安装MSYS2 msys2是一款跨平台编译套件,它模拟linux编译环境,支持整合mingw32和mingw64,能很方便的在windows上对一些开源的linux工程进行编译运行。 类似的跨平台编译套件有:msys,cygwin,mingw 优势&…

【视频】使用OBS将MP4推流至腾讯云直播

1、下载OBS OBS官网:https://obsproject.com/ OBS支持Win、Mac、Linux,如果下载速度很慢,建议使用迅雷下载 2、OBS推流设置 2.1 添加场景 默认会有一个“场景”,如果想继续添加可以点击“+”按钮 2.2 添加媒体源 1)点击“来源”窗口中“+”按钮 2)支持的媒体源如…

培训报名小程序-订阅消息发送

目录 1 创建API2 获取模板参数3 编写自定义代码4 添加订单编号5 发送消息6 发布预览 我们上一篇讲解了小程序如何获取用户订阅消息授权,用户允许我们发送模板消息后,按照模板的参数要求,我们需要传入我们想要发送消息的内容给模板&#xff0c…

JS逆向系列之某多多 anti_content

文章目录 声明目标网址anti_content参数分析参考js 环境python 调用测试往期逆向文章推荐声明 本文章中所有内容仅供学习交流,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请私信我立即删除! 目标网址 aHR0cHM6Ly9tb2JpbGUueWFuZ2tlZHVvL…

MySQL之深入InnoDB存储引擎——redo日志

文章目录 一、为什么需要redo日志二、redo日志的类型1)简单的redo日志类型2)复杂的redo日志类型 三、Mini-Transaction四、redo日志的写入过程五、redo日志文件1、刷盘时机2、redo日志文件组 六、log sequence number1、lsn的引入2、flushed_to_disk_lsn…

STL文件格式详解【3D】

STL(StereoLithography:立体光刻)文件是 3 维表面几何形状的三角形表示。 表面被逻辑地细分或分解为一系列小三角形(面)。 每个面由垂直方向和代表三角形顶点(角)的三个点来描述。 切片算法使用…

[C++] 模板template

讲模板之前呢,我们先来谈谈泛型编程: 泛型编程:编写与类型无关的通用代码,是代码复用的一种手段。模板是泛型编程的基础。 模板分为两类:函数模板与类模板 1、函数模板 1.1 函数模板概念 函数模板代表了一个函数家…

【第二阶段】kotlin的lambda学习

匿名函数lambdm表达式 1.两数相加 fun main() {//匿名函数lambda表达式//两数相加 等价:val addResult:(Int,Int)->String{a,b->"两数相加结果:${ab}"}val addResult{a:Int,b:Int->"两数相加结果${ab}"}println(addResul…

安装docker的报错问题

先关闭安全机制 systemctl stop firewalld.service setenforce 0 安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm2 设置阿里云镜像云 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 安装d…

计算机网络:网络通信相关概念入门

目录 一、网络发展背景二、理解网络通信三、理解IP地址1.简述IP地址2.IP地址的版本3.提高地址利用率的技术 四、理解端口1.简述端口2.使用端口的原因 五、理解网络通信协议 一、网络发展背景 网络发展背景: 最初的计算机是单机,那么单机是这样传输数据的…