Redis 组网方式入门

文章目录

  • 一、组网方式
    • 1. 单实例模式
      • 描述
      • 优点
      • 缺点
      • 适用场景
    • 2. 主从复制模式(Master-Slave Replication)
      • 描述
      • 优点
      • 缺点
      • 适用场景
      • 基于docker的redis主从复制
        • 1. 配置主节点
        • 2. 配置从节点
        • 3. 查看节点状态
        • 4. 验证主从数据同步
        • 5. 查看同步进度
    • 3. 哨兵模式(Sentinel)
      • 描述
      • 优点
      • 缺点
      • 适用场景
      • 搭建方式
    • 4. 集群模式(Cluster)
      • 描述
      • 优点
      • 缺点
      • 适用场景
    • 5. 分片模式
      • 5.1 代理分片模式(Proxy-based Sharding)
        • 描述
        • 优点
        • 缺点
      • 5.2 客户端分片模式(Client-side Sharding)
        • 描述
        • 优点
        • 缺点
  • 二、总结

Redis 是一个开源的、基于键值对的内存数据存储系统,广泛应用于缓存、消息队列、数据库等多种场景。随着业务需求的不断增长,单一的 Redis 实例往往无法满足高可用性和高性能的要求。因此,Redis 提供了多种组网方式来应对不同的应用场景。本文将详细介绍 Redis 的几种主要组网方式及其优缺点。
在这里插入图片描述

一、组网方式

1. 单实例模式

描述

这是最基本的部署方式,Redis 服务运行在一个单独的服务器上,没有冗余机制。

优点

简单易用:配置和管理都非常简单,适合小型应用或测试环境。
资源利用率高:不需要额外的服务器资源,成本较低。

缺点

单点故障:一旦该实例发生故障,整个服务将不可用,存在较高的风险。
性能瓶颈:所有请求都集中在同一个实例上,容易成为性能瓶颈。

适用场景

小型应用或测试环境
对高可用性和性能要求不高的场景

2. 主从复制模式(Master-Slave Replication)

描述

一个主节点(Master)可以有多个从节点(Slave),主节点负责写操作,从节点负责读操作。数据从主节点异步复制到从节点。

优点

提高读取性能:通过读写分离,从节点可以分担主节点的读取压力。
数据冗余:支持数据备份,提高了数据的安全性。
灵活扩展:可以轻松添加更多的从节点来提升读取性能。

缺点

单点故障:主节点故障时需要手动切换,存在单点故障风险。
数据一致性:由于数据复制是异步的,可能会导致主从节点之间的数据不一致。

适用场景

读多写少的应用场景
需要数据备份和读写分离的场景

基于docker的redis主从复制

1. 配置主节点
  • 编辑主节点配置文件
# 绑定 IP 地址,允许远程连接
bind 0.0.0.0# 配置端口号
port 6379# 设置密码(可选)
requirepass 123456# 开启 AOF 持久化(可选)
appendonly yes# 设置日志级别
loglevel notice# 设置日志文件路径
logfile /var/log/redis/redis.log
  • 启动主节点
docker run -d -P \
--name redis7-master \
-p 6379:6379 \
-p 16379:16379 \
-v /work/docker/redis/data/master_6379:/data \
-v /work/docker/redis/data/master_6379/log:/var/log/redis \
-v /work/docker/redis/conf/master_6379.conf:/etc/redis/redis.conf \
redis:latest \
redis-server /etc/redis/redis.conf
  • 查看主节点IP
$ docker inspect redis7-master | grep IPAdd"SecondaryIPAddresses": null,"IPAddress": "172.17.0.2","IPAddress": "172.17.0.2",

如果是生产环境,一般不使用docker,直接部署到物理机,IP地址也是已知确定的;本人使用docker部署,此处查看主节点IP,方便后续部署从节点时使用该IP。

2. 配置从节点
  • 编辑主节点配置文件
# 绑定 IP 地址,允许远程连接
bind 0.0.0.0# 配置端口号
port 6380# 设置密码(如果主节点设置了密码)
masterauth 123456# 设置密码(可选)
requirepass 12345678# 开启 AOF 持久化(可选)
appendonly yes# 设置日志级别
loglevel notice# 设置日志文件路径
logfile /var/log/redis/redis.log# 指定主节点的地址和端口
replicaof 172.17.0.2 6379

replicaof 命令使用的IP即是主节点的IP。

  • 启动从节点
docker run -d -P \
--name redis7-slave \
-p 6380:6380 \
-p 16380:16380 \
-v /work/docker/redis/data/slave_6380:/data \
-v /work/docker/redis/data/slave_6380/log:/var/log/redis \
-v /work/docker/redis/conf/slave_6380.conf:/etc/redis/redis.conf \
redis:latest \
redis-server /etc/redis/redis.conf
3. 查看节点状态
  • 检查主节点状态
docker exec -it redis7-master bash
redis-cli -a 123456
info replication
# Replication
role:master
connected_slaves:1
slave0:ip=172.17.0.4,port=6380,state=online,offset=43,lag=0
……

应该能看到 role:masterconnected_slaves:1,表示有一个从节点连接成功。

  • 检查从节点状态
docker exec -it redis7-slave bash
redis-cli -p 6380 -a 12345678
> info replication
# Replication
role:slave
master_host:172.17.0.2
master_port:6379
master_link_status:up
master_last_io_seconds_ago:4
master_sync_in_progress:0
……

应该能看到 role:slavemaster_host:<master_ip>master_link_status:up,表示从节点已成功连接到主节点。

在从节点执行slaveof <master_ip> <master_port>slaveof no one也可以快速搭建和解散主从网络。

4. 验证主从数据同步
  • 在主节点上写入数据
set k1 hello
  • 在从节点上读取数据
get k1

如果返回 hello,说明数据同步成功。

5. 查看同步进度
  • 在主节点执行info replication命令
# slave0后面显示从节点的IP、端口、状态、偏移量和延迟
slave0:ip=172.17.0.4,port=6380,state=online,offset=3179,lag=1
master_repl_offset:3179 # 表示主节点的复制偏移量
  • 在从节点执行info replication命令
slave_repl_offset:3501 # 表示从节点的复制偏移量
master_repl_offset:3501 # 表示主节点的复制偏移量
  • 在主节点或任意从节点执行MONITOR命令
    该命令将显示所有接收到的命令,包括主从同步相关的命令。

  • 在主节点执行CLIENT LIST命令
    在这里插入图片描述
    flags=S:表示这是一个从节点连接。

3. 哨兵模式(Sentinel)

描述

哨兵模式在主从复制模式的基础上增加了哨兵节点,哨兵节点负责监控主从节点的健康状态,并在主节点故障时自动进行故障转移。

优点

自动化故障恢复:哨兵节点可以自动检测并恢复主节点故障,提高了系统的可用性。
高可用性:通过自动故障转移,减少了服务中断时间。

缺点

配置复杂:需要配置多个哨兵节点和主从节点,管理较为复杂。
资源消耗:哨兵节点会占用一定的系统资源。

适用场景

高可用性要求较高的生产环境
需要自动故障恢复的场景

搭建方式

请翻阅我的另一篇文章:在docker中搭建redis哨兵环境

4. 集群模式(Cluster)

描述

Redis 集群模式支持数据分片(Sharding),每个节点负责一部分数据,通过哈希槽(Hash Slot)机制实现数据的分布式存储。

优点

水平扩展:支持水平扩展,提高了系统的存储容量和处理能力。
高可用性:通过数据分片和副本机制,提高了系统的可用性。
负载均衡:请求均匀分布在多个节点上,避免了单点性能瓶颈。

缺点

配置复杂:需要配置多个节点和哈希槽,管理较为复杂。
客户端要求:客户端需要支持集群模式,增加了客户端的复杂度。

适用场景

大规模分布式系统
需要高可用性和高性能的场景

5. 分片模式

5.1 代理分片模式(Proxy-based Sharding)

描述

通过代理层实现数据分片,客户端请求先经过代理层,由代理层决定将请求路由到哪个Redis实例。

优点

客户端无需关心数据分片逻辑,易于实现读写分离。

缺点

代理层可能成为性能瓶颈,增加了系统复杂度。

5.2 客户端分片模式(Client-side Sharding)

描述

客户端直接负责数据分片逻辑,将请求直接发送到相应的Redis实例。

优点

减少了代理层的开销,提高了性能。

缺点

客户端实现复杂,数据分片逻辑需要在客户端维护,增加了客户端的负担。

二、总结

Redis 提供了多种组网方式,每种方式都有其适用的场景和优缺点。选择合适的组网方式需要根据具体的业务需求、性能要求和运维能力来决定。例如,对于简单的应用,单实例模式或主从复制模式可能就足够了;而对于高可用性和高性能要求的场景,集群模式或哨兵模式可能是更好的选择。
希望本文能够帮助到你。

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

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

相关文章

信号-2-信号捕捉

相关概念&#xff1a;递达 未决 / 阻塞 忽略 阻塞 vs 忽略 阻塞&#xff1a; 如果指定信号信号被阻塞&#xff0c; block期间该信号不能被递达&#xff0c;一直在pending表中。知道block被撤销后&#xff0c; 该信号才能递达&#xff0c;递达后对应pending位置置零。 忽…

(蓝桥杯C/C++)——基础算法(下)

目录 一、时空复杂度 1.时间复杂度 2.空间复杂度 3.分析技巧 4.代码示例 二、递归 1.递归的介绍 2.递归如何实现 3.递归和循环的比较 4.代码示例 三、差分 1.差分的原理和特点 2.差分的实现 3.例题讲解 四、枚举 1.枚举算法介绍 2.解空间的类型 3. 循环枚举解…

【极限编程(XP)】

极限编程&#xff08;XP&#xff09;简介 定义与核心价值观&#xff1a;极限编程&#xff08;Extreme Programming&#xff0c;XP&#xff09;是一种轻量级、敏捷的软件开发方法。它强调团队合作、客户参与、持续测试和快速反馈等价值观&#xff0c;旨在提高软件开发的效率和质…

如何编写安全的 Go 代码

原文&#xff1a;Jakub Jarosz - 2024.11.02 在编写 Go 代码时&#xff0c;如何时刻考虑安全性&#xff1f;要在一篇简短的文章中回答这个问题似乎不太可能。因此&#xff0c;我们将把范围缩小到一些具体做法上。 这些实践如果持续应用&#xff0c;将有助于我们编写健壮、安全…

Go八股(Ⅳ)***slice,string,defer***

***slice&#xff0c;string&#xff0c;defer*** 1.slice和arry的区别 arry&#xff1a; Go语言中arry即为数据的一种集合&#xff0c;需要在声明时指定容量和初值&#xff0c;且一旦声明就长度固定&#xff0c;访问时按照索引访问。通过内置函数len可以获取数组中的元素个…

使用 Mac 数据恢复从 iPhoto 图库中恢复照片

我们每个人都会遇到这种情况&#xff1a;在意识到我们不想丢失照片之前&#xff0c;我们会永久删除 iPhoto 图库中的一些照片。永久删除这些照片后&#xff0c;是否可以从 iPhoto 图库中恢复照片&#xff1f;本文将指导您使用免费的 Mac 数据恢复软件从 iPhoto 中恢复照片。 i…

Spark 的介绍与搭建:从理论到实践

目录 一、分布式的思想 &#xff08;一&#xff09;存储 &#xff08;二&#xff09;计算 二、Spark 简介 &#xff08;一&#xff09;发展历程 &#xff08;二&#xff09;Spark 能做什么&#xff1f; &#xff08;三&#xff09;spark 的组成部分 &#xff08;四&…

Spring Boot2(Spring Boot 的Web开发 springMVC 请求处理 参数绑定 常用注解 数据传递 文件上传)

SpringBoot的web开发 静态资源映射规则 总结&#xff1a;只要静态资源放在类路径下&#xff1a; called /static (or /public or /resources or //METAINF/resources 一启动服务器就能访问到静态资源文件 springboot只需要将图片放在 static 下 就可以被访问到了 总结&…

Vue2中使用firefox的pdfjs进行文件文件流预览

文章目录 1.使用场景2. 使用方式1. npm 包下载,[点击查看](https://www.npmjs.com/package/pdfjs-dist)2. 官网下载1. 放到public文件夹下面2. 官网下载地址[点我,进入官网](https://github.com/mozilla/pdf.js/tags?afterv3.3.122) 3. 代码演示4. 图片预览5. 如果遇到跨域或者…

2024软件测试面试热点问题

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 大厂面试热点问题 1、测试人员需要何时参加需求分析&#xff1f; 如果条件循序 原则上来说 是越早介入需求分析越好 因为测试人员对需求理解越深刻 对测试工…

C语言 | Leetcode C语言题解之第542题01矩阵

题目&#xff1a; 题解&#xff1a; /*** Return an array of arrays of size *returnSize.* The sizes of the arrays are returned as *returnColumnSizes array.* Note: Both returned array and *columnSizes array must be malloced, assume caller calls free().*/ type…

C++总结

目录 一、面向对象的三大特性 二、引用 2.1 概念 2.2特性 三、类与对象 3.1概念 3.2 类的内容 3.3对象的创建 四、构造函数与析构函数 五、封装 六、继承 6.1概念与基础使用 6.2 继承权限 6.2.1 权限修饰符 6.2.2 继承权限 6.3构造函数 6.3.1 派生类与基类的构造函数关系 6.3.2…

2024 CSS保姆级教程二 - BFC详解

前言 - CSS中的文档流 在介绍BFC之前&#xff0c;需要先给大家介绍一下文档流。​ 我们常说的文档流其实分为定位流、浮动流、普通流三种。​ ​ 1. 绝对定位(Absolute positioning)​ 如果元素的属性 position 为 absolute 或 fixed&#xff0c;它就是一个绝对定位元素。​ 在…

在PHP8内,用Jenssegers MongoDB扩展来实现Laravel与MongoDB的集成

在现代 web 开发中&#xff0c;MongoDB 作为一种流行的 NoSQL 数据库&#xff0c;因其灵活的文档结构和高性能而受到许多开发者的青睐。Laravel&#xff0c;作为一个优雅的 PHP Web 框架&#xff0c;提供了丰富的功能和优雅的代码风格。本文将指导你如何在 Laravel 项目中集成 …

GPU 环境搭建指南:如何在裸机、Docker、K8s 等环境中使用 GPU

本文主要分享在不同环境&#xff0c;例如裸机、Docker 和 Kubernetes 等环境中如何使用 GPU。 跳转阅读原文&#xff1a;GPU 环境搭建指南&#xff1a;如何在裸机、Docker、K8s 等环境中使用 GPU 1. 概述 仅以比较常见的 NVIDIA GPU 举例&#xff0c;系统为 Linux&#xff0c;…

Axure设计之左右滚动组件教程(动态面板)

很多项目产品设计经常会遇到左右滚动的导航、图片展示、内容区域等&#xff0c;接下来我们用Axure来实现一下左右滚动的菜单导航。通过案例我们可以举一反三进行其他方式的滚动组件设计&#xff0c;如常见的上下滚动、翻页滚动等等。 一、效果展示&#xff1a; 1、点击“向左箭…

每天五分钟深度学习框架pytorch:如何加载手写字体数据集mnist?

本文重点 那个这节课程之后,我们就将通过代码的方式来搭建CNN和RNN模型,然后训练,我们使用的数据集为pytorch中已经封装好的数据集,比如mnist,cafir10,本文我们学习一下如何在pytorch中使用它们,然后为之后的章节做准备,现在我们拿mnist来举例。 mnist和cafir10 MIN…

itextpdf打印A5的问题

使用A5打印的时候&#xff0c;再生成pdf是没有问题的。下面做了一个测试&#xff0c;在打印机中&#xff0c;使用A5的纸张横向放入&#xff0c;因为是家用打印机&#xff0c;A5与A4是同一个口&#xff0c;因此只能这么放。 使用itextpdf生成pdf&#xff0c;在浏览器中预览pdf是…

AJAX 全面教程:从基础到高级

AJAX 全面教程&#xff1a;从基础到高级 目录 什么是 AJAXAJAX 的工作原理AJAX 的主要对象AJAX 的基本用法AJAX 与 JSONAJAX 的高级用法AJAX 的错误处理AJAX 的性能优化AJAX 的安全性AJAX 的应用场景总结与展望 什么是 AJAX AJAX&#xff08;Asynchronous JavaScript and XML…

CKA认证 | Day1 k8s核心概念与集群搭建

第一章 Kubernetes 核心概念 1、主流的容器集群管理系统 容器编排系统&#xff1a; KubernetesSwarmMesos Marathon 2、Kubernetes介绍 Kubernetes是Google在2014年开源的一个容器集群管理系统&#xff0c;Kubernetes简称K8s。 Kubernetes用于容器化应用程序的部署&#x…