redis主从复制玩法全过程笔记(redis7+版本)

目录标题

  • 环境
  • 目的
  • 实操
    • 一主多仆
      • 服务器和本地主机配置环境
      • docker 环境配置
    • 薪火相传
    • 反客为主
  • 主从复制的流程
  • 主从复制的特性
  • 主从复制的缺点
  • 本篇结语

环境

我的环境介绍window环境VM虚拟机一台并安装centos7,一台阿里云Linux服务器,另一台Linux系统主机并安装docker环境。

目的

配置一主三从redis集群,验证主从复制的特性。

  1. 数据复制:在主从复制中,一个 Redis主节点(Master)会将其数据异步地复制给一个或多个从节点(Slave)。这意味着主节点上的数据更改将被自动传播到从节点,从而保持从节点的数据与主节点的数据同步。

  2. 读写分离:在主从复制中,客户端可以向主节点发出写操作(写入数据),而读操作可以分发给主节点或从节点。这使得负载均衡更容易实现,因为读操作可以分散到多个从节点上,减轻了主节点的负担。

  3. 高可用性:如果主节点失败,可以选择一个从节点晋升为新的主节点,以保持Redis集群的可用性。这是通过选举过程完成的,其中从节点中的一个被选为新主节点。

  4. 数据冗余:由于数据被复制到从节点,即使主节点发生故障,也可以从从节点恢复数据,从而减少数据丢失的风险。

  5. 故障转移:主节点故障后,Redis 集群可以自动选择一个从节点作为新主节点,以保持服务的连续性。这是通过 Sentinel或其他监控工具来实现的。

  6. 降低读操作对主节点的负载:通过将读操作分发到从节点,可以减少主节点上的读操作负载,从而提高系统的性能和可伸缩性。

  7. 实时监控:Redis 提供了监控机制,您可以随时查看主从节点的同步状态、延迟等信息,以确保数据一致性。

  8. 数据备份:从节点可以用于生成 Redis您可以定期将从节点的数据进行快照(snapshot)并存储起来,以便在需要时进行数据还原。

实操

一主多仆

在这里插入图片描述

服务器和本地主机配置环境

先下载自己需要的redis版本
在这里插入图片描述
然后在自己的Linux环境选定目录解压,接着make编译,找到redis.conf文件修改配置。主要修改的配置:

bind

在 Redis 的配置文件中,bind 参数用于指定 Redis 服务器监听的网络接口(IP 地址)。默认情况下,Redis 会监听所有可用的网络接口,但您可以通过配置 bind 参数来限制 Redis 只监听特定的 IP 地址或主机名。这可以用于增强安全性,限制 Redis 服务器仅接受来自指定 IP 地址的连接,从而减少未经授权的访问风险。

以下是一些 bind 参数的常见用法和作用:

bind 127.0.0.1:此配置将使 Redis 服务器仅监听本地回环接口(127.0.0.1),从而只能通过本地访问 Redis 服务器,不允许远程连接。这有助于增加 Redis 服务器的安全性,因为只有本地应用可以连接到 Redis。

bind 0.0.0.0:这是默认设置,Redis 服务器将监听所有可用的网络接口,允许来自任何 IP 地址的连接。这在内部网络环境中很常见,但在公共网络上可能会增加安全风险。

bind <IP地址>:您可以指定一个具体的 IP 地址,使 Redis 服务器仅监听该 IP 地址上的连接。这对于在多个网络接口上运行 Redis 服务器的情况很有用,可以选择一个特定的接口。

protected-mode

它是用来控制 Redis 是否启用受保护模式的选项。受保护模式是为了增强 Redis 的安全性而设计的,特别是当 Redis 服务器在公共网络上运行时。以下是 protected-mode 的作用和影响:

防止未经授权访问:当 protected-mode 设置为 “yes” 时,Redis 服务器只接受来自本地回环接口(127.0.0.1)的连接请求,即只有本地应用可以连接到 Redis 服务器。这可以防止未经授权的远程访问,从而增强了 Redis 的安全性。

防止拒绝服务攻击:受保护模式还可以防止潜在的拒绝服务(DoS)攻击,因为只有本地应用可以连接到 Redis 服务器,远程主机无法访问 Redis。

默认值:protected-mode 的默认值为 “yes”,这意味着默认情况下,Redis 只接受本地连接。这有助于确保 Redis 在初始配置下更加安全。

如果您需要允许远程访问到 Redis,您可以将 protected-mode 参数设置为 “no”,但这需要非常谨慎,因为这可能会增加潜在的安全风险。在生产环境中,通常建议保持 protected-mode 为 “yes” 并使用其他方法来安全地允许远程访问,如配置密码认证、使用防火墙规则等。

port 

这个就是你的redis服务端口,检查一下有没有被占用。不然启动不了reids服务。

daemonize 

它用于控制 Redis 服务器是否以守护进程(daemon)的方式运行。Redis 是一个内存数据库,通常情况下,它在终端窗口中启动并以前台进程的方式运行,方便在终端观察日志和输出。但在生产环境中,通常希望 Redis 以守护进程的方式运行,不依赖于终端会话,以确保持久稳定的运行。

以下是 daemonize 参数的作用和取值:

daemonize yes:将 Redis 服务器以守护进程的方式运行。它会在后台运行,不会占用终端窗口,并且不依赖于终端会话。这通常是在生产环境中的推荐设置。

daemonize no:Redis 服务器将以前台进程的方式运行,通常用于开发和调试目的。在这种模式下,Redis 会将日志和输出信息发送到终端窗口,方便监视和调试。

这个要在docker中注意一下如果设置守护进程会启动不了

logfile

logfile配置redis日志地址。

RDB和AOF的那些配置大家默认就好,这里先不详解不然篇幅太大
requirepass

用于设置 Redis 服务器的密码认证。当 requirepass 被设置为一个非空的密码时,客户端连接到 Redis 服务器时必须提供正确的密码才能进行操作

replicaof

用于设置 Redis 主从复制(replication)的关系。通过配置 replicaof,您可以指定一个 Redis 服务器作为主服务器,而当前的 Redis 服务器将成为该主服务器的从服务器,从而建立主从复制关系。

主从复制是 Redis 的一种特性,它允许一个 Redis 主服务器将其数据实时复制到一个或多个从服务器上,以实现数据冗余、负载均衡、高可用性等目标。主服务器负责处理写操作,而从服务器则负责复制主服务器的数据并处理读操作,从而分担了主服务器的负载。

以下是一些关于 replicaof 参数的说明:

replicaof 的格式是 replicaof ,其中 和 分别是主服务器的 IP 地址和端口号。

在 Redis 服务器配置文件中配置 replicaof 后,Redis 将尝试连接指定的主服务器,并开始复制主服务器上的数据。

主服务器和从服务器之间的数据同步是实时的,主服务器上的写操作将立即被复制到从服务器上。

在配置主从复制时,通常情况下,从服务器的数据将被清空,然后从主服务器开始复制数据。如果需要保留从服务器上的数据,可以使用快照(RDB 文件)来初始化从服务器。

masterauth
masteruser

masterauth:

masterauth 是用于配置主服务器密码认证的参数。当主服务器启用了密码认证(通过设置 requirepass 参数)时,从服务器必须提供正确的密码才能连接到主服务器并进行数据同步。

masteruser:

masteruser 是用于配置主服务器用户名认证的参数。当主服务器启用了用户名认证时,从服务器必须提供正确的用户名和密码才能连接到主服务器并进行数据同步。

docker 环境配置

其他配置一样,但是最好做好部分文件的映射这样有利于查看日志和修改配置,我给出一个实例

docker run --name redis01 -id -p 6380:6380 -v /etc/node02:/usr/local/etc/redis -v /usr/node02/data:/data redis:latest redis-server /usr/local/etc/redis/redis.conf

小提示:
新版的docker redis容器中好像没有redis.conf文件了。大家可以映射进去。

这个几个是经常会用到的命令

info replication  显示集群或者节点信息
replicaof 主从复制
salveof  改换门庭
replica no 自立为王

在这里插入图片描述
从主节点查看集群信息可以观察到,这里有一个主节点三个从节点。

薪火相传

在这里插入图片描述
大概就是这样,配置也很多可以在开始的时候就在配置文件中配置也可以使用命令

salveof  改换门庭

反客为主

这个更简单,就是把salve节点变成master节点可以使用命令

replica no 自立为王

主从复制的流程

  1. 连接建立: 从服务器通过发送 SYNC 命令向主服务器请求建立连接。主服务器接受请求后,开始准备复制数据。
  2. 快照: 主服务器将当前的数据集快照保存到一个 RDB 文件中。这个 RDB 文件包含了主服务器的完整数据集。
  3. 缓冲区同步: 主服务器将 RDB 文件中的数据块发送给从服务器。从服务器接收到数据后,存储在内存中的缓冲区开始更新。
  4. redis也会通过ping检查主从是否保持联系。当主服务器接收到来自从服务器的 PING 命令后,它会回复 PONG,表示它仍然处于活跃状态。这有助于从服务器检测到主服务器是否仍然在线。如果主服务器不再响应 PING,从服务器可能会认为主服务器已经宕机,并采取适当的措施,例如触发故障转移操作。
  5. 命令传播: 主服务器将执行在 RDB
    文件生成期间的所有写命令记录到一个缓冲区中,并将这些命令发送给从服务器。从服务器在接收到命令后,执行这些命令以更新自己的数据集。
  6. 增量复制: 一旦数据同步完成,主服务器将进入增量复制模式。在这个模式下,主服务器将实时将写命令传播给从服务器,以保持数据的一致性。

在 Redis 复制中,数据是通过异步复制的,因此在主从服务器之间可能会有一定程度的延迟。这意味着从服务器的数据不一定与主服务器的数据完全同步。如果需要更高的数据一致性,可以使用 Redis 集群。

我用我的window版本的redis连接master节点时可以直观的观察到上述的几个步骤。
在这里插入图片描述
虽然这个连接失败了但是也可以看到上述过程的影子。

主从复制的特性

数据冗余和高可用性:主从复制提供了数据冗余,即从服务器复制了主服务器的数据。如果主服务器故障,可以快速切换到从服务器,从而提高了系统的可用性。

先停掉主机
在这里插入图片描述
从机数据正常保留
在这里插入图片描述

读写分离:主服务器负责写入操作,从服务器负责读取操作。这允许主服务器专注于写入性能,而从服务器可以分担读取请求,提高了系统的吞吐量。

在主机先写入
在这里插入图片描述
在从机写入
在这里插入图片描述
在主机查

在这里插入图片描述
在从机查
在这里插入图片描述

热备份:从服务器可以用于创建热备份,而不影响主服务器的性能。这使得可以在运行中进行备份操作,而不需要停机。
我没有启用AOF目前的备份只有RDB这个时从节点的热备份文件。
在这里插入图片描述

总是搞混的是主从复制不具有负载均衡的特性

故障恢复:如果主服务器出现故障,可以快速将一个从服务器升级为新的主服务器,从而恢复服务。

把目前的master节点停掉
在这里插入图片描述
把其中一台自立为王
在这里插入图片描述
给它设置一个从机
在这里插入图片描述
查看这个主机的结果
在这里插入图片描述

增加数据中心:可以将从服务器部署在不同的数据中心,实现数据的跨数据中心复制,提高数据的可用性和灾难恢复能力。

主从复制的缺点

复杂性:配置和维护主从复制环境可能会增加系统的复杂性,需要考虑数据一致性和故障转移等问题。

网络带宽:复制过程需要占用网络带宽,特别是在复制大数据集时,可能会对网络产生较大压力。

延迟:从服务器的数据复制通常存在一定的延迟,这意味着读取从服务器的数据可能不是实时的。

数据一致性:在主从复制中,可能存在数据不一致的情况,特别是在网络分区或复制延迟的情况下。

本篇结语

为什么有主从复制呢,我觉得他是后面学习哨兵,集群的基础。只是单纯的主从复制显然是达不到生产的要求的。这些缺点都是致命的。下一篇我们记录哨兵的实操笔记。进入更好玩的世界。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第四章:人工智能深度学习教程-激活函数(第三节-Pytorch 中的激活函数)

在本文中&#xff0c;我们将了解 PyTorch 激活函数。 目录 什么是激活函数以及为什么使用它们&#xff1f; Pytorch 激活函数的类型 ReLU 激活函数&#xff1a; Python3 Leaky ReLU 激活函数&#xff1a; Python3 S 形激活函数&#xff1a; Python3 Tanh 激活函数&am…

死锁问题概述

文章目录 死锁的概念死锁的定义相似概念&#xff1a;饥饿死锁产生的原因死锁产生的必要条件死锁的预防破坏互斥条件破坏不可剥夺/不可抢占条件破坏请求并保持条件破坏循环等待条件 死锁避免安全性算法 死锁的处理策略死锁的检测死锁的解除 死锁的概念 死锁的定义 多个进程由于…

使用超融合,网络交换机如何选型与配置?

很多用户在部署超融合集群时&#xff0c;都会关注网络交换机的选型与配置。我们在这篇文章中整理了一些关于网络交换机的常见提问&#xff0c;并邀请 SmartX 技术专家进行了详细解答。 Q1. 超融合架构下&#xff0c;网络交换机是如何部署的&#xff1f;需要多少台交换机&#x…

火爆全网!用 Pyecharts 就能做出来“迁徙图“和“轮播图“

1.pyecharts知识点回顾 1&#xff09;知识回顾 前面我们已经讲述了&#xff0c;如何使用pyecharts进行图形的绘制&#xff0c;一共涉及到如下四步。我们今天就是按照下面这几步来进行迁徙图和轮播图的绘制。 ① 选择图表类型&#xff1b; ② 声明图形类并添加数据&#xff1…

Linux-Shell命令行解释器的模拟实现

引言&#xff1a;本篇文章主要是简单实现一个shell命令行解释器&#xff0c;可以支持基础常见的linux的命令&#xff0c;支持内建命名echo、cd&#xff0c;同时支持重定向的操作&#xff01; 一、代码剖析 1. 头文件引入&#xff1a; 因代码是在linux下实现&#xff0c;引入的…

全国5米高程DEM数据及衍生的全国地形起伏度数据

地表起伏度&#xff0c;也有称为地势起伏度、地形起伏度&#xff0c;是指某点在其确定面积的域内的最高点与最低点之间的高差。地表起伏度概念的核心在于如何确定该点的计算域。在统计意义上&#xff0c;随着计算域范围的增大&#xff0c;地表起伏度将逐渐增大。 因此&#xff…

GitHub上的开源工业软件

github上看到一个中国人做的流体力学开源介绍&#xff0c;太牛了&#xff01; https://github.com/clatterrr/FluidSimulationTutorialsUnity 先分析一下工业仿真软件赛道 工业仿真软件的赛道和产品主要功能如下&#xff1a; 1. 工艺仿真赛道&#xff1a; - 工厂布局优化&am…

linux 下 mysql8 修改root初始密码

背景 linux下安装完mysql8以后&#xff0c;无法使用root用户登录或者忘记了root用户的密码&#xff0c;需要修改root用户的密码&#xff1b; 步骤 不想翻译了&#xff0c;专业人员都能看懂。完结 链接 MySQL :: MySQL 8.0 Reference Manual :: B.3.3.2 How to Reset the Roo…

MATLAB|不给糖果就捣蛋

目录 扫一扫关注公众号 效果图 代码 绘制南瓜 绘制无脸男小鬼 其中绘制风车代码&#xff1a; 其中 EllipsePlotter类函数代码如下 属性 (properties) 方法 (methods) 扫一扫关注公众号 效果图 代码 绘制南瓜 clc;clear;close all; [X,Y,Z]sphere(200); R1(-(1-mod(0:…

centos 7.9系统安装老版本jenkins,并解决插件问题

1.初衷 因为jenkins随着时间推移&#xff0c;其版本也越来越新&#xff0c;支持它运行的JDK也越来越新。基于不折腾的目标&#xff0c;我们安装一个老的固定版本就行。以前安装新版本&#xff0c;经常碰到的问题就是插件安装不兼容的问题。现在这个问题&#xff0c;可以把以前…

MySQL的默认引擎为什么是InnoDB

MySQL支持InnoDB、MyISAM、MEMORY、CSV等多个存储引擎&#xff0c;那为什么选InnoDB作为默认引擎呢&#xff1f; 主要原因有几点&#xff1a; 事务 事务主要用于保持数据一致性&#xff0c;是一组操作的集合&#xff0c;要么全部成功&#xff0c;要么全部失败。InnoDB引擎提供…

Kubernetes平台部署Grafana Loki Promtail系统

部署结构图&#xff1a; Loki 是主服务&#xff0c;负责存储日志和处理查询promtail 是代理&#xff0c;负责收集日志并将其发送给 lokiGrafana 用于 UI 展示 只要在应用程序服务器上安装promtail来收集日志然后发送给Loki存储&#xff0c;就可以在Grafana UI界面通过添加Lok…

通过docker快速部署RabbitMq

查询镜像&#xff1a; docker search rabbitmq拉去RabbitMq镜像&#xff1a; docker pull rabbitmq:management创建数据卷&#xff1a; docker volume create rabbitmq-home运行容器&#xff1a; docker run -id --namerabbitmq -v rabbitmq-home:/var/lib/rabbitmq -p 156…

解决docker tag打标签时报错:Error response from daemon: no such id

现象&#xff1a; 原因&#xff1a; docker tag时不仅仅要Repository仓库名&#xff0c;也需要原有的tag作为版本号 解决办法&#xff1a; docker tag 原有仓库名: 原有tag值 新的打标名称 问题解决&#xff01;

【LeetCode百道热题】1.两数之和

一&#xff0c;题目描述 给定一个整数数组nums和一个整数目标值target&#xff0c;请你在改数组中找出和为目标值target的那两个整数&#xff0c;并返回他们的数组下标。 你可以假设每种输入只会对应一个答案&#xff0c;但是&#xff0c;数组中同一个元素在答案里不能重复出现…

陈海波:OpenHarmony技术领先,产学研深度协同,生态蓬勃发展

11月4日&#xff0c;以“技术筑生态&#xff0c;智联赢未来”为主题的第二届OpenHarmony技术大会在北京隆重举办。本次大会由OpenAtom OpenHarmony&#xff08;简称“OpenHarmony"&#xff09;项目群技术指导委员会&#xff08;TSC&#xff09;主办&#xff0c;由华为技术…

【STM32-DSP库的使用】基于Keil5 + STM32CubeMX 手动添加、库添加方式

STM32-DSP库的使用 一.CMSIS-DSP1.1 DSP库简介1.2 支持的函数类别1.3 宏定义 二、操作2.1 STM32CubeMX 配置基本工程2.2 Lib库的方式实现(推荐)2.3 手动添加DSP文件&#xff08;可以下载官方最新库&#xff0c;功能齐全&#xff09; 三、MFCC测试DSP加速效果 为验证语音识别MFC…

搭建 Makefile+OpenOCD+CMSIS-DAP+Vscode arm-none-eabi-gcc 工程模板

STM32F407-GCC-Template Arm-none-eabi-gcc MakefileOpenOCDCMSIS-DAPVscode工程模板 一、本次环境搭建所用的软硬件 1&#xff09;Windows or Linux (本文以Windows为主) 2&#xff09;JLink、Daplink、Wch-Link烧录器 3&#xff09;GNU Arm Embedded Toolchain交叉编译…

C++模板元模板实战书籍讲解第一章题目讲解

目录 第一题 C代码示例 第二题 C代码示例 第三题 3.1 使用std::integral_constant模板类 3.2 使用std::conditional结合std::is_same判断 总结 第四题 C代码示例 第五题 C代码示例 第六题 C代码示例 第七题 C代码示例 总结 第一题 对于元函数来说&#xff0c;…

贺天下功夫酱酒闪耀亮相2023佛山秋色系列活动

11月1日至5日&#xff0c;2023年广东非遗周暨佛山秋色巡游系列活动在佛山举行&#xff0c;以“品味佛山 秋醉岭南”为主题&#xff0c;好戏连台。贵州贺天下酒业独家赞助佛山祖庙秋祭、乡饮酒礼&#xff0c;还全面参与佛山秋色巡游、佛山非遗美食展、佛山非遗音乐会等多个活动&…