【redis】主从复制:单点问题、配置详解、特点详解

文章目录

  • 单点问题
  • 什么是主从复制
  • 主从模式能解决的问题
      • 并发量有限
      • 可用性问题
  • 配置
    • 建立复制
      • 通过配置文件来指定端口
      • 配置主从
      • 查看集群结构
    • 断开复制
  • 特点
    • 安全性
    • 只读
    • 传输延迟

单点问题

分布式系统中,涉及到一个非常关键的问题:单点问题


某个服务器程序,只有一个节点(只搞一个物理服务器,来部署这个服务器程序)。这就可能会遇到一些问题:

  1. 可用性问题。如果这个机器挂了,意味着服务就中断了
  2. 性能/支撑的并发量也是比较有限的

引入分布式系统,主要也就是为了解决上述的单点问题

什么是主从复制

在分布式系统中,往往希望有多个服务器来部署 redis 服务器,从而构成一个 redis 集群。此时就可以让这个集群给整个分布式系统重其他的服务,提供更稳定/更高效的数据存储功能

在分布式系统重,希望使用多个服务器来部署 redis,存在以下几种 redis 部署方式:

  1. 主从模式
  2. 主从+哨兵模式
  3. 集群模式

主从模式:

在若干个 redis 节点中,有的是“主节点”,有的是“从节点”。假设有三个物理服务器(称为三个节点),分别部署了一个 redis-server 进程

此时就可以把其中的一个节点,作为“主节点”,另外两个节点作为“从节点”。

  • 从节点得听主节点的(从节点上的数据要跟随主节点变化;从节点的数据要和主节点保持一致)
  • 本来,在主节点上保存一堆数据,引入从节点后,就是要把主节点上面的数据,复制出来放到从节点中。后续,主节点这边对于数据有任何修改,都会把这样的修改给同步到从节点
  • 从节点就是主节点的副本

redis 主从模式中,从节点上的数据不允许被修改,只能读取数据

主从模式能解决的问题

并发量有限

image.png|529

  • 由于从节点的数据都是时刻和主节点保持一致的,所以其他的客户端从从节点读取数据,和从主节点这里读取数据,是没有区别的
  • 后续如果有客户端来读取数据了,就可以从上述节点中,随机挑一个节点,给这个客户端提供读取数据的服务
    • 引入了更多的计算资源,自然能够支撑的并发量也就大幅提高了

可用性问题

之前只是单个 redis 服务器节点,此时这个机器挂了,整个 redis 就挂了

  • 上述这个主从结构,这些 redis 的机器不太可能“同时挂了”

但是整个机房,是否可能被一锅端了?(也是可能存在的)

  • 这个时候如果考虑到更高的可用性,就可以把这些机器放到多个不同的机房中(异地多活

  • 如果是挂掉了某个从节点,没什么影响。此时继续从主节点或者其他从节点读取数据,得到的效果完全相同

  • 如果挂掉了主节点,还是有一定影响的。从节点只能读取数据,如果需要写数据,就没得写了
    可用性是提高了,但还是没有到非常理想的程度

我们可以弄多个主节点吗?

  • 一山容不得二虎
  • 如果存在两个主节点,相互之间如何同步数据,是个麻烦事

更准确的说,主从模式,主要是针对“读操作”进行并发量&可用性的提高。而写操作的话,无论是可用性还是并发,都是非常依赖主节点,主节点又不能搞多个。实际业务场景中,读操作往往就是比写操作更加频繁

主从结构,是分布式系统中比较经典的一种结构。不仅仅 redis 支持,MySQL 也支持

配置

建立复制

配置 redis 主从结构,首先需要启动多个 redis 服务器。正常来说,每个 redis 服务器程序,应该在一个单独的主机上(才是分布式)

没有多个服务器,我们可以在一个服务器上,运行多个 redis-server 进程

  • 我们要保证 redis-server 的端口是不同的
  • 默认端口为:6379,此时就不能让新启动的 redis-server 再继续使用 6379

如何去指定 redis-server 的端口呢?

  1. 可以在启动程序的时候,通过命令行来指定端口号。-port 选项
  2. 也可以直接在配置文件中,来设定端口

通过配置文件来指定端口

此处我们准备搞一个主节点,两个从节点image.png|234

  • slave1 是从节点 1,配置文件设置的 6380
  • slave2 是从节点 2,配置文件设置的 6381
  • redis 是主节点,端口为 6379
    从节点的配置文件都是复制的主节点的,只是把端口号改了。还需要把守护模式设为 yesdaemonize yes

image.png|454

  • 此时就可以看到启动了三个服务器(一主两从)
  • 但此时这几个节点还未构成主从结构,而是各自为政。要想成为主从结构,还需要进一步的进行配置

配置主从

要想配置成主从结构,就需要使用 slaveof

  1. 在配置文件中加入 slaveof {masterHost} {masterPort}Redis 启动生效
  2. redis-server 启动命令时加入 --slaveof {masterHost} {masterPort} 生效
  3. 直接使用 Redis 命令:slaveof {masterHost} {masterPort} 生效
    一般是使用配置文件更多,修改配置文件是一直持久生效的,重启后也能用

直接加上相关信息:
image.png

  • Redis 服务器的配置文件改完之后,要重启服务器

主从结构配置好之后,我们看一下网络状态image.png

image.png

  • 主节点随时修改,从节点能立即感知到
  • 但是从节点不能改,只能读

查看集群结构

使用:

info replication

image.png

  • offset
    • 主节点上会收到源源不断的“修改数据”请求,从节点就需要从主节点这里同步这些修改请求
    • 从节点和主节点之间的数据同步,不是瞬间完成的
    • offset 就相当于是从节点和主节点之间,同步数据的进度
  • lag
    • 表示延迟,单位为复制日志的条目数。
  • connected slaves
    • 从节点下面还可以接从节点

断开复制

直接使用 slaveof no one 这个命令,来断开现有的主从复制关系 image.png|399

  • 从节点断开主从关系,它就不再从属于其他节点了,里面已经有的数据,是不会抛弃的
  • 但后续主节点再针对数据进行修改,从节点就无法再自动同步数据了

但是重启服务器之后,还是会回到之前一主两从的结构,因为配置文件里面是这样设置的

特点

安全性

对于数据比较重要的节点,主节点会通过设置 requirepass 参数进⾏密码验证,这时所有的客⼾端访问必须使⽤ auth 命令实⾏校验。

从节点与主节点的复制连接是通过⼀个特殊标识的客⼾端来完成,因此需要配置从节点的 masterauth 参数与主节点密码保持⼀致,这样从节点才可以正确地连接到主节点并发起复制流程。

只读

默认情况下,从节点使⽤ slave-read-only=yes 配置为只读模式。

由于复制只能从主节点到从节点,对于从节点的任何修改主节点都⽆法感知,修改从节点会造成主从数据不⼀致。所以建议线上不要修改从节点的只读模式。

传输延迟

主节点和从节点之间通过网络(TCP)来传输。TCP 内部支持了 nagle 算法(默认开启

  • 开启了,就会增加 TCP 的传输延迟,节省了网络带宽
  • 关闭了,就会减少 TCP 的传输延迟,增加了网络带宽
  • 目的和 TCP 的捎带应答是一样的,针对小的 TCP 数据报,进行合并,从而减少包的个数(等待合并的时候就会耗时)

repl-disable-tcp-nodelay 参数就可以用于在主从通信过程中,关闭 TCPnagle 算法,从而减少传输延迟,不过会增加网络带宽

  • 从节点更快的和主节点进行同步
  • 一般游戏开发,有其是及时性要求很高的(fpsmoba…)都要关闭 nagle 算法

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

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

相关文章

VSCode 生成HTML 基本骨架

在VSCode 新建html文件中敲一个英文感叹号 ! <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><titl…

STM32定时器-01定时器概述

内容概述 定时器是STM32中功能最强大、结构最复杂的一个外设&#xff0c;分为四部分&#xff1a; 一部分&#xff1a;定时中断功能 二部分&#xff1a;定时器输出比较&#xff0c;常见的用途&#xff1a;产生PWM波形&#xff0c;驱动电机&#xff08;如驱动舵机和直流电机&…

在 Ubuntu 中用 Docker 安装 RAGFlow

一、安装 1.前提条件 CPU > 4 核 RAM > 16 GB Disk > 50 GB Docker > 24.0.0 & Docker Compose > v2.26.1 安装docker&#xff1a;在Ubuntu中安装Docker并配置国内镜像 2.设置 vm.max_map_count #设置 vm.max_map_count 不小于 262144# 查看 sysctl vm.…

17153 班级活动

17153 班级活动 ⭐️难度&#xff1a;简单 &#x1f31f;考点&#xff1a;2023、思维、国赛 &#x1f4d6; &#x1f4da; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class Main {static int N 10…

Java IO 流:从字节到字符再到Java 装饰者模式(Decorator Pattern),解析与应用掌握数据流动的艺术

在 Java 编程中&#xff0c;IO&#xff08;输入输出&#xff09;流是处理数据输入输出的核心工具。无论是读取文件、网络通信&#xff0c;还是处理用户输入&#xff0c;IO 流都扮演着重要角色。本文将深入探讨 Java IO 流的核心概念、分类、经典代码实例及其应用场景&#xff0…

HTTPS

目录 一 HTTPS是什么 二 加密 三 加密方案 四 CA机构/证书 五 最终方案(对称密钥/非对称密钥/CA证书)和总体流程 一 HTTPS是什么 在应用层存在SSL&#xff0c;TLS(HTTP之下&#xff0c;传输层之上)加密/解密安全协议&#xff0c;如果HTTP经过这个协议&#xff0c;对端也走…

StarRocks 主键(Primary Key)深度解析

一、StarRocks 产品简介 StarRocks 是一款高性能分析型数据库&#xff0c;专为海量数据的实时分析而设计。作为新一代湖仓&#xff08;Lakehouse&#xff09;加速引擎&#xff0c;StarRocks 融合了 MPP 架构和列式存储引擎的优势&#xff0c;能够支持亿级数据秒级查询响应。 …

(学习总结30)Linux 进程优先级、进程切换和环境变量

Linux 进程优先级、进程切换和环境变量 进程优先级基本概念查看系统进程PRI 和 NI 解释进程优先级调整命令行调整进程优先级调整新进程调度优先级命令 nice调整已运行进程调度优先级命令 renice 使用 top 调整进程优先级使用系统调用调整进程优先级 进程的竞争、独立、并行、并…

《Manus学习手册》.pdf(文末附完整版下载地址)

大家好&#xff0c;我是吾鳴。 吾鳴今天要给大家分享的一份比较全面详细的Manus学习手册&#xff0c;该学习手册主要包含Manus产品概述与核心理念、Manus功能与使用场景、Manus技术架构与工作流、Manus案例库与用户实践、邀请码获取与内测信息、Manus与传统AI对比与优势、用户评…

【MySQL】从零开始:掌握MySQL数据库的核心概念(三)

人生碌碌&#xff0c;竞短论长&#xff0c;却不道枯荣有数&#xff0c;得失难量。 前言 这是我自己学习MySQL数据库的第二篇博客总结。后期我会继续把MySQL数据库学习笔记开源至博客上。 上一期笔记是关于MySQL数据库的数据类型&#xff0c;没看的同学可以过去看看&#xff1a…

Web3智能合约与数据交互安全性探讨

Web3智能合约与数据交互安全性探讨 随着区块链技术的飞速发展&#xff0c;Web3的概念已经成为技术圈的热门话题。Web3不仅仅是技术迭代&#xff0c;它代表了一种全新的互联网交互方式&#xff0c;其中智能合约扮演着核心角色。智能合约是自动执行、控制或文档化法律事件和行动…

人工智能赋能山西乡村振兴:智能空间规划与可持续发展

摘要&#xff1a;随着人工智能技术的快速发展&#xff0c;山西乡村振兴面临着从传统农业到智能化现代化转型的重大机遇。本文探讨了人工智能在山西乡村振兴中的具体应用&#xff0c;重点分析了智能空间规划、生态保护与环境治理、产业转型以及基础设施升级的可能路径。文章从数…

QT三 自定义控件

一 自定义控件 现在的需求是这样&#xff1a; 假设我们要在QWidget 上做定制&#xff0c;这个定制包括了关于 一些事件处理&#xff0c;意味着要重写QWidget的一些代码&#xff0c;这是不实际的&#xff0c;因此我们需要自己写一个MyWidget继承QWidget&#xff0c;然后再MyWi…

【C++ 进阶】语句:从基础到实践

目录 一、输入输出体系的范式革命 1.1 C语言的格式化 1.2 C的流抽象革命 二、字符串处理的抽象跃迁 2.1 C语言的字符指针 2.2 C的string类革命 三、结构体到类的类型系统进化 3.1 C语言的结构体局限 3.2 C类的革命性演进 四、基础控制语句差异 4.1 条件语句&#xf…

C语言操作符

&#x1f31f; 各位看官好&#xff0c;我是maomi_9526&#xff01; &#x1f30d; 种一棵树最好是十年前&#xff0c;其次是现在&#xff01; &#x1f680; 今天来学习C语言的相关知识。 &#x1f44d; 如果觉得这篇文章有帮助&#xff0c;欢迎您一键三连&#xff0c;分享给更…

PostgreSQL:语言基础与数据库操作

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…

KMP算法

KMP算法 为什么叫做KMP呢。 因为是由这三位学者发明的&#xff1a;Knuth&#xff0c;Morris和Pratt&#xff0c;所以取了三位学者名字的首字母。所以叫做KMP next数组就是一个前缀表&#xff08;prefix table&#xff09;。 前缀表是用来回退的&#xff0c;它记录了模式串与…

3D点云数据处理中的聚类算法总结

1.欧式聚类&#xff1a; 基于点的空间距离&#xff08;欧几里得距离&#xff09;来分割点云&#xff0c;将距离较近的点归为同一簇。 欧式聚类需要的参数&#xff1a;邻域半径R,簇的最小点阈值minPts&#xff0c;最大点数阈值maxPts。 实现效率&#xff1a; O(n * log n) 实现…

WRC世界机器人大会-2024年展商汇总

2024世界机器人大会 时间&#xff1a;2024年8月21日至25日 地点&#xff1a;北京经济技术开发区北人亦创国际会展中心 大会主题&#xff1a;共育新质生产力&#xff0c;共享智能新未来 2024世界机器人博览会亮点纷呈&#xff0c;20余款人形机器人整机将亮相博览会&#xff…

拉取镜像,推送到阿里云镜像仓库

需求背景&#xff1a;在学习k8s&#xff0c;虚拟机无法正常拉取 wangyanglinux/tools:busybox 镜像。 解决办法&#xff1a;将墙外镜像拉到国内&#xff08;阿里云&#xff09;再使用 准备工作需要创建对应的镜像仓库&#xff0c;然后再进行推送 1. 拉取镜像 docker pull …