【Redis】高可用之复制(replica)

news2024/12/23 19:02:13

本文是Redis系列第4篇,前3篇欢迎移步

【Redis】不卡壳的 Redis 学习之路:从十大数据类型开始入手_AQin1012的博客-CSDN博客关于Redis的数据类型,各个文章总有些小不同,我们这里讨论的是Redis 7.0,为确保准确,我们直接看官网。https://blog.csdn.net/aqin1012/article/details/130365083

【Redis】持久化机制详解:从RDB到AOF,你需要知道的一切_AQin1012的博客-CSDN博客持久化其实就4个单词:加强数据安全Redis支持两种不同的持久化机制,RDB和AOF。https://blog.csdn.net/aqin1012/article/details/130481261

【Redis】不卡壳的 Redis 学习之路:事务_AQin1012的博客-CSDN博客

本文目录

什么是Redis的复制

能解决的问题

实际操作

权限细节

主要命令

操作流程

准备阶段

下载镜像(本文用的docker,也可以使用虚拟机)

安装Redis

修改redis配置

如何获取docker镜像的IP呢?

启动测试

先主后从,依次启动

查看主从信息

查看日志

总结


什么是Redis的复制

官网地址: https://redis.io/docs/management/replication/

其实就是主从复制,master以写为主,slave以读为主

当master数据变化的时候,自动将新的数据异步同步到其它slave数据库

能解决的问题

  • 读写分离
  • 容灾备份
  • 数据备份
  • 水平扩容支撑高并发

实际操作

配从库不配主库

权限细节

  • 主机(master)如果配置了requirepass参数,需要密码登陆
  • 那么从机(slave)就要配置masterauth来设置校验密码,否则的话主机会拒绝从机的访问请求

主要命令

  • info replication
    • 可以查看复制节点的主从关系和配置信息
  • replicaof 主库IP 主库端口(主从复制)
    • 一般写入redis.conf配置文件内
  • slaveof 主库IP 主库端口(上面命令的手动配置版,手动指定做谁的小弟,可用于“改换门庭”)
    • 每次与masterl断开之后,都需要重新连接,除非你配置进redis.conf文件
    • 在运行期间修改slave节点的信息,如果该数据库已经是某个主数据库的从数据库,那么会停止和原主数据库的同步关系转而和新的主数据库同步,重新拜码头
  • slaveof no one(“自立为王”)
    • 使当前数据库停止与其他数据库的同步,转成主数据库,自立为王

操作流程

本文以Redis的一主二从(一台主机(master)两台从机(slave))为示例

准备阶段

下载镜像(本文用的docker,也可以使用虚拟机)

取一个centos的镜像(可以跟我用一样的,也可以用你自己的,前提是安装了docker)

docker pull bitnami/centos-base-buildpack:7-r9

安装Redis

1. 下载redis安装包并解压

具体的版本参考地址(本文是用的是redis-7.0.9.tar.gz)

https://download.redis.io/releases/

2. 解压

tar -zxvf redis-7.0.9.tar.gz

3. 进入解压目录

cd redis-7.0.9

4. 编译

make

5. 指定安装目录并进行安装

make install PREFIX=/usr/local/redis

6. 添加软连接

ln -s /usr/local/redis/bin/redis-server /usr/bin/redis-server 
ln -s /usr/local/redis/bin/redis-cli /usr/bin/redis-cli

7. 复制配置文件

cp /root/redis-7.0.9/redis.conf /usr/local/redis/bin/

此时/usr/local/redis/bin/目录下就出现了redis的配置文件

修改redis配置

进入配置文件所在目录(按照上面的操作redis.conf文件复制了一份到/usr/local/redis/bin)

打开redis.conf文件

差不多长这样

使用:set nu可以显示行号,方便查找

:行号可以快速跳转到某一行

/搜索内容可以定位到包含“搜索内容”的行

  1. 开启daemonize yes

  2. 注释掉bind127.0.0.1

  3. protected-mode no

4. 指定端口

主不用改

2个从需要换一下端口号

5. 指定当前工作目录,dir

6. pid文件名字,pidfile

主不用改

从需要对应上面port的设置修改

7. log文件名字,logfile

主不用改

从需要按照上面port的配置进行修改

8. requirepass

为主机(master)设设置密码,后面从机(slave)连接要使用

9. dump.rdb名字(建议添加端口号)

主机

从机

10. aof文件,appendfilename

appendonly yes 时配置

11. 从机(slave)访问主机(master)的通行密码masterauth,必须从机(slave)需要配置,此步骤主机(master)不用配置

从机(slave)需要做如下修改

  1. replicaof 主机(master)IP 主机(master)端口
  2. masterauth 就是主机(master)requirepass配置的密码

补充一下(我真体贴(。・ω・。))~

如何获取docker镜像的IP呢?

查看当前运行的容器信息

根据容器ID获取该容器的IP

在我们这个一主二从的案例中

  • 主机(master)
    • 172.17.0.2
  • 从机(slave)
    • 172.17.0.3
    • 172.17.0.4

在每个docker都完成上面的配置后,可以将配置文件复制一份到我们配置中用到的aqinredis文件夹下,并加上端口重命名下(方便管理非必需)

启动测试

先主后从,依次启动

主机(master)启动需要添加密码(requirepass中指定了的)

从机(slave)启动记得指定端口

在主里存入值,可以看到在两台从机(slave)中都可以获取到

但是从机(slave)是不能存值的(是只读的)

查看主从信息

主机(master)

从机(slave)

查看日志

我们查看下主机的日志(就是一开始配置文件redis.conf中设置的log文件),可以发现,已经记录了两台从机挂到主机上的日志了

可以再看下从机的日志,也可以看到相关信息

总结

  • 主机(master)能读能写,从机(slave)只能读
    • 无论主机已经写了多少数据,从机一旦启动,就会全部复制过来,后续主机写,从机跟
  • 配置文件🆚命令配置
    • 使用配置文件进行主从配置时,如果主机挂了,从机不会变化,还可以提供读的功能,等待主机恢复(重启后主从关系仍在)
    • 使用命令配置时,主机A可以通过slaveof 主机B的IP 主机B的端口命令,动态的绑定成为主机B的从机,但只是单次生效,重启会失效
  • 主从属性可以传递
    • 上一个从机可以是下一个从机的主机,从机同样可以接收其他从机的连接和同步请求,那么该从机作为了链条中下一个的主机(但仍然是只读的),可以有效减轻主master(最开始的主机)的写压力
    • 使用命令slaveof 新主库IP 新主库端口可以中途变更绑定的主机
      • 会清除之前的数据,重新建立拷贝最新的
    • 使用命令slaveof no one可以解除绑定,自己成为主机
  • 复制原理和工作流程
    • 从机启动,同步初请
      • 从机启动成功连接到主机会发一个sync命令
      • 从机首次全新连接主机会自动一次性全量复制,原有数据会被覆盖
    • 首次连接,全量复制
      • 主机节点收到sync命令后会开始在后台保存快照(即RDB持久化,主从复制时会触发RDB),同时收集所有接收到的用于修改数据集命令缓存起来,主机节点执行RDB持久化完后,master将rdb快照文件和所有缓存的命令发送到所有从机,以完成一次完全同步
      • 而从机服务在接收到数据库文件数据后,将其存盘并加载到内存中,从而完成复制初始化
    • 心跳持续,保持通信
      • 默认10秒repl-ping-replica-period 10
    • 进入平稳,增量复制
      • 主机持续将新的所有收集到的修改命令自动依次传给从机,完成同步
    • 从机下线,重连续传
      • 主机会检查backlog中的offset,主机和从机都会保存一个复制的offset(保存在backlog中),还有一个masterId,主机只会把已经复制的offset后面的数据复制给从机(类似断点续传)
  • 复制的缺点
    • 复制延时,信号衰弱(从机的增加会使这个问题更严重)
    • 主机挂了无法自动恢复
       

于是,有了后面要介绍的哨兵和集群

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

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

相关文章

Raft算法之Leader选举

Raft算法之Leader选举 一、Leader选举概述 Raft 使用心跳(heartbeat)触发Leader选举。当服务器启动时,初始化为Follower。Leader向所有Followers周期性发送heartbeat。如果Follower在选举超时时间内没有收到Leader的heartbeat,就…

图像视频基础

参考学习资料:https://blog.csdn.net/qq_28258885/article/details/116192244 文章目录 图像颜色深度分辨率 视频帧率比特率帧类型消除冗余的方法时间冗余(帧间预测)空间冗余(帧内预测) 视频编码器1.分区2.预测3.转换…

软件测试基础教程学习4

文章目录 软件测试技术和方法4.1 静态测试和动态测试4.2 黑盒测试和白盒测试概述4.3 黑盒测试技术4.3.1 等价类划分4.3.2 边值分析4.3.3 因果图法4.3.4 正交实验设计法4.4.5 决策表驱动测试4.5.6 错误推荐法 4.4 白盒测试技术4.4.1 程序结构分析测试4.4.2 逻辑覆盖测试4.4.3 路…

JSP页面跳转刷新

问题: 当前的jsp页面触发ajax请求后,能够获得新的相应页面,但是浏览器上展示的依然是老的页面,数据不刷新 尝试使用页面重定向依然无效, 最后使用js的window.location.href, 让浏览器的页面url 重加载才ok function submitDate() {var date1 document.getElementById("d…

【uniapp】uniapp反向代理解决跨域问题(devServer)

背景介绍 前段时间,在拿uniapp开发的时候,出现了跨域问题,按理说跨域应该由后端解决,但既然咱前端可以上,我想就上了(顺手装个13) 首先介绍什么是跨域 出于浏览器的同源策略,在发…

docker-使用harbor搭建私有仓库

前提 安装docker-ce 安装docker-compose 安装 安装docker-ce # step 1: 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2 # Step 2: 添加软件源信息 sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce…

金蝶云星空无需代码连接钉钉考勤的方法

金蝶云星空用户使用场景: 企业的销售渠道人员出差之前需要在金蝶云星空上提交出差申请单,并等待审批通过;每当销售任务完成,金蝶云星空上的审批通过后,需要人力在考勤系统中手动修改考勤信息。看似比较简单的流程&…

基于Java+SpringBoot+vue的汽车改装方案网站设计与实现

博主介绍:✌擅长Java、微信小程序、Python、Android等,专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟 Java项目精品实战案…

Bitbucket 新版本的安全限制

新版本的安全限制 是继续按照他给的第二个链接进入Bitbucket仓库后台添加App密码,也就是每个仓库需要单独的秘密码,这样的话就更加安全。 生产新密码: 这一坨务必要妥善保存,因为一旦点了关闭之后你就再也没有机会看到这个密码了…

Hive一分钟

分区和分桶 1.分区表是将大的表文件划分成多个小文件以利于查询,但是如果数据分布不均衡,也会影响查询效率。 2.桶表可以对数据进行哈希取模,目的是让数据能够均匀的分布在表的各个文件中。 3.物理上,每个桶就是表和分区目录里的…

14个在你的WordPress网站上使用OpenAI的最好方法(2003)

您是否想知道如何在您的WordPress网站上使用OpenAI和ChatGPT? OpenAI可以提供一切帮助,从为您的帖子生成元描述到撰写电子邮件销售文案。您可以在您的WordPress网站上使用OpenAI来节省时间、降低成本、改善您的搜索引擎优化和工作流程,并发展…

推荐大型电商项目【谷粒商城】

谷粒商城项目是尚硅谷研究院最新推出的完整大型分布式架构电商平台,技术全面、业务深入,全网无出其右。 技术涵盖:微服务架构分布式全栈集群部署自动化运维可视化CICD,对标阿里P6/P7,冲击40-60w年薪。 项目由业务集群…

吐血整理!可免费使用的国产良心软件分享,几乎满足你办公需求

在这个信息化时代,软件已经成为我们办公和生活的必备工具。然而,市面上的大部分国产软件都需要付费才能使用,给我们的经济负担增加了不少。幸运的是,国内有一些良心软件,它们质量上乘,功能强大,…

myCobot机器人ChatGPT应用:设计原则和模型能力

我们将 ChatGPT 的功能扩展到机器人,并通过语言直观地控制机器人手臂、无人机和家庭助理机器人等多个平台。 你有没有想过用你自己的话告诉机器人该怎么做,就像你对人类一样?只是告诉你的家庭助理机器人:“请加热我的午餐”&…

SpringBoot+ Dubbo + Mybatis + Nacos +Seata整合来实现Dubbo分布式事务

1.简介 “ 本文主要介绍SpringBoot2.1.5 Dubbo 2.7.3 Mybatis 3.4.2 Nacos 1.1.3 Seata 0.8.0整合来实现Dubbo分布式事务管理,使用Nacos 作为 Dubbo和Seata的注册中心和配置中心,使用 MySQL 数据库和 MyBatis来操作数据。 ” 如果你还对SpringBoot、Dubbo、Nacos…

数据湖真的能取代数据仓库吗?【SNP SAP数据转型 】

数据湖和数据仓库的存在并不冲突,也并不是取代的关系,而是相互的融合关系。 数据湖是近两年中比较新的技术在大数据领域中,对于一个真正的数据湖应该是什么样子,现在对数据湖认知还是处在探索的阶段,像现在代表的开源产…

(五)复函数积分的定义与性质

本文内容主要如下: 1. 复积分的概念1.1. 复积分的定义1.2. 复积分的存在性与计算1.3. 一个圆周上的重要积分公式1.4. 复积分的基本性质 1. 复积分的概念 1.1. 复积分的定义 定义: 如图,C为平面上一条光滑的简单曲线: z z ( t ) x ( t )…

GAD7980/CL1680/AD7980详解与开发说明

目录 1 概述2 GAD7980简介3 用法时序4 参数计算与参数解释4.1 采样率4.2 转换时间4.3 采集时间5 采样数值折算6 设计注意事项7 代码demo 1 概述 本文用于讲述GAD7980的功能与用法,以及其中一些参数的计算方法,用法时序,输出数值等等&#xf…

chatglm+langchain

目录 chatglmlangchain 1.1. 主要功能: 1.2. Langchain中提供的模块 1.3. Langchain应用场景 2.1. chatglm应用: 1.1. 基于单一文档问答的实现原理 chatglmlangchain GitHub - imClumsyPanda/langchain-ChatGLM: langchain-ChatGLM, local knowledge bas…

基于Java+SpringBoot+Mybaties-plus+Vue+ElementUI 在线考试管理系统的设计与实现

一.项目介绍 学生在线考试系统分为三类角色 超管、老师、学生 超级管理员:维护考试管理、提供管理、成绩查询、学生管理以及教师管理 老师:维护考试管理、提供管理、成绩查询以及学生管理 学生:我的试卷…