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

news2024/10/5 21:20:31

目录标题

  • 环境
  • 目的
  • 实操
    • 一主多仆
      • 服务器和本地主机配置环境
      • 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.coloradmin.cn/o/1184348.html

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

相关文章

【STM32】TIM2的PWM:脉冲宽度调制

PWM是一种周期固定&#xff0c;脉宽可调整的输出波形。 0.通用寄存器输出 1.捕获/比较通道1的主电路--中间部分 2.捕获/比较通道的输出部分--输出 3.通用定时器输出PWM原理 PWM波周期或者频率由ARR&#xff08;就是要进递增/递减的值&#xff09;决定&#xff0c;PWM波占空比由…

卫浴服务信息展示预约小程序的作用如何

卫浴产品多种多样&#xff0c;尤其对经销商来说&#xff0c;各种品牌规格的产品都有&#xff0c;品牌商也一样&#xff0c;该产品在市场中并不缺客户&#xff0c;但想要获取却绝非易事&#xff0c;那么卫浴商家面临哪些痛点&#xff0c;又该如何解决呢&#xff1f; 1、品牌传播…

Ionic header content footer toolbar UI实例

1 ionic的button图标 <ion-header [translucent]"true"><ion-toolbar><ion-buttons slot"start"><ion-back-button default-href"/tabs/tab1" text"back" icon"caret-back"></ion-back-button&…

Python实现JS逆向解密采集网站数据

嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! python更多源码/资料/解答/教程等 点击此处跳转文末名片免费获取 环境使用: Python 3.8 Pycharm nodejs 模块使用: import requests --> pip install requests import execjs --> pip install pyexecjs import json 实…

告诉大家4个常见的免费备份方法!

​什么是不花费一分钱的数据备份方式&#xff1f;对于那些有特殊兴趣爱好的用户来说&#xff0c;他们的常用存储设备里往往会充满各种各样丰富的数据。举个例子&#xff1a;对于那些热衷于探索四方的旅行者&#xff0c;随着他们足迹的延展&#xff0c;需要对数量众多的美丽景色…

每日汇评:黄金正在期待鲍威尔的讲话以获取新的方向动力

周三早盘&#xff0c;金价盘整了连续两天的跌势&#xff0c;等待鲍威尔发言&#xff1b; 美元在不同的美联储评论和风险偏好减弱的情况下寻求方向&#xff1b; 黄金价格确认了上升三角形的突破&#xff0c;但美债收益率较低可能会限制跌幅&#xff1b; 周二早些时候&#xf…

零基础Linux_26(多线程)线程池代码+单例模式+线程安全

目录 1. 线程池 1.1 前期代码 thread.hpp 1.2 加上锁的代码 lockGuard.hpp 1.3 加上任务的代码 1.4 加上日志的代码 log.hpp Task.hpp 2. 单例模式的线程安全 2.1 线程池的懒汉模式 threadPool.hpp testMain.cc 3. STL和智能指针的线程安全 4. 笔试题 答案及解…

KubeSphere v3.4.0 部署K8S Docker + Prometheus + grafana

KubeSphere v3.4.0 部署K8S 1、整体思路2、修改linux主机名3、 离线安装3.1 问题列表3.2 执行命令成功列表 1、整体思路 将KubeSphere v3.4.0 安装包传输到其中一台机器修改Linux主机名&#xff08;选取3台&#xff0c;修改为master01、master02、master03&#xff09;安装官方…

箭头函数 跟匿名函数this的指向问题

var id 10; function foo() {// 创建时 this->windowthis.id 20; // 等价于 window.id 20let c () > {console.log("id1:", this.id); // 创建时父级 创建时 this->window};let d function () {console.log("id2:", this.id); // 执行时本…

全面解析:如何快速搭建AI数字人系统源码,都有哪些平台?

随着数字人直播系统的兴起&#xff0c;越来越多的人对数字人直播系统源码搭建感兴趣。数字人直播系统源码在一些市场上是可以找到的&#xff0c;但是鱼目混杂、五花八门想要找一个合适自己的就需要一定技巧&#xff0c;要选择一个技术专业的AI数字人直播系统源码服务商。下面是…

【IO多路转接】pollepoll

文章目录 1 :peach:poll:peach:1.1 :apple:poll函数接口:apple:1.2 :apple:poll接口的使用:apple:1.3 :apple:poll的优缺点:apple: 2 :peach:epoll:peach:2.1 :apple:epoll函数接口:apple:2.1.1 :lemon:epoll_create:lemon:2.1.2 :lemon:epoll_ctl:lemon:2.1.3 :lemon:epoll_wa…

OGG将Oracle全量同步到kafka

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是【IT邦德】&#xff0c;江湖人称jeames007&#xff0c;10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】&#xff01;&#x1f61c;&am…

C语言之pthread_once实例总结(八十三)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

ClickHouse介绍和使用

ClickHouse介绍和使用 1. 简介2. ClickHouse特点3. 数据类型3.1. 整型3.2. 浮点型3.3. Decimal型3.4. 布尔型3.5. 字符串3.6. 枚举类型3.7. 时间类型 4. 表引擎4.1. TinyLog4.2. Memory4.3. MergeTree4.3.1. partition by分区&#xff08;可选&#xff09;4.3.2. primary key 主…

微信小程序将后端返回的图片文件流解析显示到页面

说明 由于请求接口后端返回的图片格式不是一个完整的url,也不是其他直接能显示的图片格式&#xff0c;是一张图片 后端根据模板与二维码生成图片,返回二进制数据 返回为文件流的格式,用wx.request请求的时候&#xff0c;就自动解码成为了下面这样的数据数据格式,这样的数据没…

Spring的缓存机制-循环依赖

群公告 Java每日大厂面试题&#xff1a; 1、Spring 是如何解决循环依赖&#xff1f; 答案&#xff1a;三级缓存&#xff0c;简单来说&#xff0c;A创建过程中需要B&#xff0c;于是A将自己放到三级缓存里面&#xff0c;去实例化B&#xff0c;B实例化的时候发现需要…

智能AI系统ChatGPT系统源码+支持GPT4.0+支持ai绘画(Midjourney)/支持OpenAI GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于OpenAI很火的ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如…

交流负载发电机测试

交流负载发电机测试是一种常用的测试方法&#xff0c;用于评估发电机在负载条件下的性能和稳定性。测试过程中需要使用负载设备模拟实际负载&#xff0c;并通过测量电压、电流、功率等参数来评估发电机的输出能力和稳定性。 在进行测试之前&#xff0c;首先需要准备好测试设备和…

30张图详解IP地址网络知识

你们好&#xff0c;我的网工朋友。 IP地址是所有网络初级课程里最先涉及到的技术点&#xff0c;对于IP地址的合理规划是网络设计的重要环节&#xff0c;必须拿捏。 IP地址规划的好坏&#xff0c;影响到网络路由协议算法的效率&#xff0c;影响到网络的性能&#xff0c;影响到网…

短剧出海火爆,Flat Ads独家流量助泛娱乐赛道App迅速获客增长

10月26日&#xff0c;由扬帆出海主办的GICC2023 | 第四届全球互联网产业CEO大会正式圆满落幕&#xff0c;Flat Ads等出海企业应邀参加。 据悉&#xff0c;本届GICC深圳站邀请200CXO行业领袖、300各路优质厂商、1200全球互联网产业代表共聚一堂&#xff0c;聚焦短剧、游戏、泛娱…