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节点停掉
在这里插入图片描述
把其中一台自立为王
在这里插入图片描述
给它设置一个从机
在这里插入图片描述
查看这个主机的结果
在这里插入图片描述

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

主从复制的缺点

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

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

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

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

本篇结语

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

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

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

相关文章

Mybatis-Plus使用Wrapper自定义SQL

文章目录 准备工作Mybatis-Plus使用Wrapper自定义SQL注意事项目录结构如下所示domain层Controller层Service层ServiceImplMapper层UserMapper.xml 结果如下所示&#xff1a;单表查询条件构造器单表查询&#xff0c;Mybatis-Plus使用Wrapper自定义SQL联表查询不用&#xff0c;My…

C# OpenCvSharp 去除字母后面的杂线

效果 项目 代码 using OpenCvSharp; using System; using System.Drawing; using System.Windows.Forms;namespace OpenCvSharp_Demo {public partial class frmMain : Form{public frmMain(){InitializeComponent();}string image_path "";private void Form1_Loa…

最近的总结(2023.11.8)

菜鸟本来是不打算写文章的&#xff0c;奈何1500的曝光券让我心痒难耐 菜鸟主要是想把这篇博客&#xff08;平凡人的一生的意义是什么&#xff1f;&#xff09;推出去&#xff0c;看看大家的看法&#xff01; 不过既然写&#xff0c;菜鸟自然要好好写&#xff0c;就来聊聊最近…

如何选择SVM中最佳的【核函数】

参数“kernel"在sklearn中可选以下几种 选项&#xff1a; 接下来我们 就通过一个例子&#xff0c;来探索一下不同数据集上核函数的表现。我们现在有一系列线性或非线性可分的数据&#xff0c;我们希望通过绘制SVC在不同核函数下的决策边界并计算SVC在不同核函数下分类准确…

NeRF神经辐射场渲染过程详解,三维重建渲染过程基本原理_光线采样sample_pdf()和光线渲染render_rays ()代码详解

目录 1 神经辐射场 1.1 基本原理 1.2 基本流程 1.3 数学解释 2 三维场景图像渲染详解 2.1射线采样 2.2 NeRF 模型预测 2.3 体积渲染 3 采样与渲染代码详解 &#xff08;rending.py&#xff09; 3.1 神经体积渲染代码解析 3.2 sample_pdf 函数 3.3 render_rays 函数 …

持续集成交付CICD:Jenkins Pipeline与远程构建触发器

目录 一、实验 1.Jenkins Pipeline本地构建触发器 2.Jenkins Pipeline与远程构建触发器&#xff08;第一种方式&#xff09; 3.Jenkins Pipeline与远程构建触发器&#xff08;第二种方式&#xff09; 4.Jenkins Pipeline与远程构建触发器&#xff08;第三种方式&#xff0…

3.JMeter高级使用-让你与众不同

目录 概述插件下载与安装插件下载配置插件 服务器硬件资源监控(精简版)配置服务端代理JMeter配置监控CPU监控网络 JMeter下载结束 概述 今日目标&#xff1a; 插件下载与安装Basic Graphs 主要点 Average Response Time 平均响应时间Active Threads 活动线程数Successful/Fai…

windows11使用docker部署安装minio

时间 2023-11-08 windows11使用docker部署安装minio 目录 1.docker 下载镜像2.docker安装镜像3.访问控制台4.安装问题解决5.使用教程 1.docker 下载镜像 调整镜像源到国内&#xff0c;否则会很慢 docker pull minio/minio2.docker安装镜像 设置用户名和密码时需要注意&…

闪客网盘系统源码,已测试对接腾讯COS及本地和支付(支持限速+按时收费+文件分享+可对接易支付)- 修复版

正文概述 资源入口 支持对文件下载限速 对接易支付 推广赚钱啥的功能 源码非常的好 支持腾讯cos 阿里云cos 本地储存 远程存储 源码仅支持服务器搭建 php7.2 伪静态thinkphp 运行目录public 导入数据库 修改config目录下的database.php数据库信息 后台地址&#xff1a; 域名/ad…

大型企业是否有必要进行数字化转型?_数据治理平台_光点科技

数字化转型是大型企业在现代商业环境中保持竞争力的关键。一开始我们要明确数字化转型指的是利用数字技术来改变企业的业务模式和企业文化&#xff0c;以提高效率和效益。对于大型企业而言&#xff0c;进行数字化转型有着多重必要性。 1.数字化转型可以帮助企业优化内部流程&am…

P02项目诊断报警组件(学习操作日志记录、单元测试开发)

★ P02项目诊断报警组件 诊断报警组件的主要功能有&#xff1a; 接收、记录硬件设备上报的报警信息。从预先设定的错误码对照表中找到对应的声光报警和蜂鸣器报警策略&#xff0c;结合当前的报警情况对设备下发报警指示。将报警消息发送到消息队列&#xff0c;由其它组件发送…

【delphi】中 TNetHTTPClient 注意事项

一、TNetHTTPClient 是什么&#xff1f; 用于管理 HTTP 客户端的组件。相当于indy中的TidHTTP控件&#xff0c;是实现HTTP请求的客户端控件。 二、TNetHTTPClient 需要注意什么&#xff1f; 需要注意的是几个Timeout&#xff0c;因为我们使用TNetHTTPClient控件的时候&#x…

JavaScript使用正则表达式

正则表达式(RegExp)也称规则表达式(regular expression)&#xff0c;是非常强大的字符串操作工具&#xff0c;语法格式为一组特殊字符构成的匹配模式&#xff0c;用来匹配字符串。ECMAScript 3以Perl为基础规范JavaScript正则表达式&#xff0c;实现Perl 5正则表达式的子集。Ja…

2023年云计算发展趋势:生活的智能未来

目录 引言1 智能家居的崭新时代2 无人驾驶的崭新时代3 虚拟现实的扩展与改进4 人工智能的综合应用5 云计算的可持续性结语 引言 时光荏苒&#xff0c;科技的飞速发展已经成为当今社会的标志之一。在这个数字化时代&#xff0c;云计算已经成为推动技术革新和生活方式改变的关键…

uniapp subNvue 写的视频播放

文件下载地址(没会员的留下邮箱&#xff0c;有空就发过去) https://download.csdn.net/download/weixin_47517731/88500016https://download.csdn.net/download/weixin_47517731/88500016 1:在pages.json中配置视频播放页面 {/* 视频详情页面 */"path": "pag…

力扣每日一题 ---- 2918. 数组的最小相等和

贪心题(吐槽一下&#xff0c;最烦贪心题了&#xff0c;每次遇到没见过的就只能连蒙带骗) 好在本题比较容易发现 数组1 &#xff1a;3 2 0 1 0 数组2 &#xff1a;6 5 0 我们遇到这种题&#xff0c;先将小的凑成相同的&#xff0c;(我们预处理出来两个数组的分别的元素和和0的个…

vue3+ts 项目遇到的问题和bug

1.router中使用pinia报错 pinia.mjs:1709 Uncaught Error: [&#x1f34d;]: "getActivePinia()" was called but there was no active Pinia. Are you trying to use a store before calling "app.use(pinia)"? See https://pinia.vuejs.org/core-concep…

python爬虫怎么翻页 ?

首先&#xff0c;你需要安装相关的库。在你的命令行窗口中&#xff0c;输入以下命令来安装所需的库&#xff1a; pip install requests beautifulsoup4然后&#xff0c;你可以使用以下代码来爬取网页内容并翻页&#xff1a; package mainimport ("fmt""net/htt…

【沐风老师】3dMax快速平铺纹理插件QuickTiles教程

QuickTiles是3ds max的一个插件&#xff0c;允许您将常规瓷砖纹理转换为交互式纹理&#xff0c;就在mat.editor中。 换言之&#xff0c;您可以根据需要对任何纹理进行修改和重新创建&#xff1a;更改布局、瓷砖大小、格式、颜色、接缝、体积、随机化形状或纹理等等。 这种方法大…

打造高效的客服体系,就在于这个“专属链接”

想要追踪特定数据&#xff0c;但是得在数据库中大海捞针&#xff1f; 想要知道某个推广的效果&#xff0c;但是无法追踪&#xff1f; 想要获得个性化的报告&#xff0c;但是数据不够精准&#xff1f; 面对这些情况&#xff0c;只需要靠一条“专属链接”就能一一击破&#xff…