Redis三种集群模式-主从模式

2023-11-13

一、引言

  Redis有三种集群模式,第一个就是主从模式,第二种“哨兵”模式,第三种是Cluster集群模式,第三种的集群模式是在Redis 3.x以后的版本才增加进来的,我们今天就来说一下Redis第一种集群模式:主从集群模式。

二、配置说明
         实现主从复制(Master-Slave Replication)的工作原理:Slave从节点服务启动并连接到Master之后,它将主动发送一个SYNC命令。Master服务主节点收到同步命令后将启动后台存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕后,Master将传送整个数据库文件到Slave,以完成一次完全同步。而Slave从节点服务在接收到数据库文件数据之后将其存盘并加载到内存中。此后,Master主节点继续将所有已经收集到的修改命令,和新的修改命令依次传送给Slaves,Slave将在本次执行这些数据修改命令,从而达到最终的数据同步。
        如果Master和Slave之间的链接出现断连现象,Slave可以自动重连Master,但是在连接成功之后,一次完全同步将被自动执行。

主从复制配置:
       第一步:修改从节点的配置文件:slaveof <masterip> <masterport>
       第二步:如果设置了密码,就要设置:masterauth <master-password>
       主从复制的配置很简单,主要操作从节点的配置文件,主节点不需要任何改动。我们可以使用info查看role角色即可知道是主服务或从服务。

版本特点:测试版本为redis-5.0.5

    REPLICATION,主从模式的配置。注意,之前版本的redis,配置为slave of,现在改为REPLICATION。

  主从模式,可以是树状的,从服务属于多台主服务,且从服务也可以有从服务。

  主从模式,可实现读写分离;高可用模式下,主服务出现问题,也可以通过哨兵切换从服务为主服务;

  可实现主服务不用数据持久化,从服务进行持久化工作,减轻主服务负担等等。

  • replicaof <masterip> <masterport>:配置主服务的ip和端口。配置之后,就是这台机器的小弟了。主服务也能知道谁是他的小弟。
  • masterauth <master-password>:如果主服务需要密码认证,这里需要配置从服务连接主服务的密码。
  • replica-read-only:默认为yes,配置从服务默认为只读模式。

三、主从模式的配置

1.redis主从

       1)创建主从目录

         /usr/software/redis/redis-ms/

         mkdir 7001

         mkdir 7002

         mkdir 7003

  2)复制redis.conf到主从目录

    cp /usr/software/redis/redis.conf    /usr/software/redis/redis-ms/7001

    cp/usr/software/redis/redis.conf     /usr/software/redis/redis-ms/7002

    cp /usr/software/redis/redis.conf    /usr/software/redis/redis-ms/7003

  3)修改主./7001/redis.conf

    vim ./7001/redis.conf

bind 0.0.0.0   #任意ip都可以连接

protected-mode no   #关闭保护,允许非本地连接

port 7001   #端口号

daemonize yes    #后台运行

pidfile /var/run/redis_7001.pid    #进程守护文件,就是存放该进程号相关信息的地方

dir /usr/software/redis/redis-ms/7001/data/   #db等相关目录位置

logfile "/usr/software/redis/redis-ms/7001/log/redis.log"

appendonly yes  #开启日志形式

requirepass XX  #密码

  4)修改从./7002/redis.conf

    vim ./7002/redis.conf

 

bind 0.0.0.0    #任意ip都可以连接

protected-mode no    #关闭保护,允许非本地连接

port 7002    #端口号

daemonize yes    #后台运行   

pidfile /var/run/redis_7002.pid    #进程守护文件,就是存放该进程号相关信息的地方

dir /usr/software/redis/redis-ms/7002/data/    #db等相关目录位置  

logfile "/usr/software/redis/redis-ms/7002/log/redis.log"

replicaof <masterip> <masterport>    #主信息

masterauth <master-password>    #主信息

appendonly yes    #开启日志形式

requirepass XX    #密码

  5)修改从./7003/redis.conf

    vim ./7003/redis.conf 

bind 0.0.0.0    #任意ip都可以连接

protected-mode no    #关闭保护,允许非本地连接

port 7003    #端口号

daemonize yes    #后台运行

pidfile /var/run/redis_7003.pid    #进程守护文件,就是存放该进程号相关信息的地方

dir /usr/software/redis/redis-ms/7003/data/    #db等相关目录位置    

logfile "/usr/software/redis/redis-ms/7003/log/redis.log"

replicaof <masterip> <masterport>    #主信息

masterauth <master-password>    #主信息

appendonly yes    #开启日志形式

requirepass XX    #密码

 2.启动测试

  1)启动

    redis-server /usr/software/redis/redis-ms/7001/redis.conf

    redis-server /usr/software/redis/redis-ms/7002/redis.conf

    redis-server /usr/software/redis/redis-ms/7003/redis.conf

    ps -ef|grep redis

    

    # 查看主从是否搭建成功

    /redis-cli -p 7001 -a password

    如图:

    

    

  2)测试

    redis-cli -p 7001 -a ww

    

    redis-cli -p 7002 -a ww

    

    --raw 中文显示

    主7001设置name值,可以在从7002、7003取到,但是从不能设置值。

 

四、主从模式的优缺点
          1.Redis的Replication的特点和优点:
              (1) 同一个Master可以同步多个Slaves。
              (2) Slave同样可以接受其它Slaves的连接和同步请求,这样可以有效的分载Master的同步压力。因此我们可以将Redis的Replication架构视为图结构。
              (3) Master Server是以非阻塞的方式为Slaves提供服务。所以在Master-Slave同步期间,客户端仍然可以提交查询或修改请求。
              (4) Slave Server同样是以非阻塞的方式完成数据同步。在同步期间,如果有客户端提交查询请求,Redis则返回同步之前的数据。
              (5) 为了分载Master的读操作压力,Slave服务器可以为客户端提供只读操作的服务,写服务仍然必须由Master来完成。即便如此,系统的伸缩性还是得到了很大的提高。
              (6) Master可以将数据保存操作交给Slaves完成,从而避免了在Master中要有独立的进程来完成此操作。
              (7) 支持主从复制,主机会自动将数据同步到从机,可以进行读写分离。
         2.Redis的Replication的缺点:
              (1) Redis不具备自动容错和恢复功能,主机从机的宕机都会导致前端部分读写请求失败,需要等待机器重启或者手动切换前端的IP才能恢复。
              (2) 主机宕机,宕机前有部分数据未能及时同步到从机,切换IP后还会引入数据不一致的问题,降低了系统的可用性。
              (3) Redis的主从复制采用全量复制,复制过程中主机会fork出一个子进程对内存做一份快照,并将子进程的内存快照保存为文件发送给从机,这一过程需要确保主机有足够多的空余内存。若快照文件较大,对集群的服务能力会产生较大的影响,而且复制过程是在从机新加入集群或者从机和主机网络断开重连时都会进行,也就是网络波动都会造成主机和从机间的一次全量的数据复制,这对实际的系统运营造成了不小的麻烦。
              (4) Redis较难支持在线扩容,在集群容量达到上限时在线扩容会变得很复杂。为避免这一问题,运维人员在系统上线时必须确保有足够的空间,这对资源造成了很大的浪费。

五、结束
         其实redis的主从模式很简单,在实际的生产环境中是很少使用的,我也不建议在实际的生产环境中使用主从模式来提供系统的高可用性,之所以不建议使用都是由它的缺点造成的,在数据量非常大的情况,或者对系统的高可用性要求很高的情况下,主从模式也是不稳定的。虽然这个模式很简单,但是这个模式是其他模式的基础,所以必须深刻的理解,对其他模式的学习才会有帮助作用。

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Redis三种集群模式-主从模式 的相关文章

  • Redis键空间事件不触发

    我有两个 Redis 客户端 在一个文件中我有一个简单的脚本设置并删除了 Redis 键 var redis require redis var client redis createClient 6379 127 0 0 1 client
  • 是否有可嵌入的 Java 替代 Redis?

    根据这个线程 https stackoverflow com questions 3047010 best redis library for java 如果我想从Java中使用Redis Jedis是最好的选择 然而 我想知道是否有任何库
  • Caffeine Expiry 中如何设置多个过期标准?

    我正在使用 Caffeine v2 8 5 我想创建一个具有可变到期时间的缓存 基于 值的创建 更新以及 该值的最后一次访问 读取 无论先发生什么都应该触发该条目的删除 缓存将成为三层值解析的一部分 The key is present i
  • 如何将node.js管道传输到redis?

    我有很多数据要插入 SET INCR 到redis DB 所以我正在寻找pipeline http redis io topics pipelining 质量插入 http redis io topics mass insert通过node
  • 使用Redis从有限范围内生成唯一ID

    我有一些数据库项目 除了主键之外 还需要项目所属组的唯一索引 我们来调用属性nbr 以及将项目分组在一起并定义唯一范围的属性nbr 我们会打电话group This nbr必须在 1 N 范围内 并且may从外部源导入项目时进行设置 由于所
  • socket.io 广播功能 & Redis pub/sub 架构

    如果有人能帮助我解决一个小疑问 我将不胜感激 使用socket io广播功能和在Redis上使用pub sub设计架构有什么区别 例如 在另一个示例中 node js 服务器正在侦听 socket io 针对 键 模型 todo 和值 数据
  • Redis Docker compose无法处理RDB格式版本10

    我无法在 docker compose 文件中启动 redis 容器 我知道docker compose文件没问题 因为我的同事可以成功启动项目 我读到有一个删除 dump rdb 文件的解决方案 但我找不到它 我使用Windows机器 任
  • Node Js:Redis 作业在完成其任务后未完成

    希望你们做得很好 我在我的 Nodejs 项目中实现了 BullMQ Bull 的下一个主要版本 来安排发送电子邮件的作业 例如 发送忘记密码请求的电子邮件 所以 我编写了如下所示的代码 用户服务 await resetPasswordJo
  • 2 个具有共享 Redis 依赖的 Helm Chart

    目前 我有 2 个 Helm Charts Chart A 和 Chart B Chart A 和 Chart B 对 Redis 实例具有相同的依赖关系 如Chart yaml file dependencies name redis v
  • 有没有办法用Lettuce自动发现Redis集群中新的集群节点IP

    我有一个Redis集群 3主3从 运行在一个库伯内斯簇 该集群通过Kubernetes 服务 Kube 服务 我将我的应用程序服务器连接到 Redis 集群 使用Kube 服务作为 URI 通过 Redis 的 Lettuce java 客
  • StackExchange.Redis的正确使用方法

    这个想法是使用更少的连接和更好的性能 连接会随时过期吗 对于另一个问题 redis GetDatabase 打开新连接 private static ConnectionMultiplexer redis private static ID
  • 使用redis进行树形数据结构

    我需要为基于树的键值开发一个缓存系统 与Windows注册表编辑器非常相似 其中缓存键是字符串 表示树中到值的路径 可以是原始类型 int string bool double 等 或子树本身 例如 key root x y z w val
  • Amazon Elasticache Redis 集群 - 无法获取端点

    我需要获取 Amazon Elasticache 中 Redis 集群的终端节点 以下代码适用于 Memcached 集群 但不适用于 Redis import com amazonaws auth AWSCredentials impor
  • 创建 C++ Redis 模块 - “不导出 RedisModule_OnLoad() 符号”

    我在加载 Redis 模块时遇到一些问题 我只是复制来自的示例https redis io topics modules intro https redis io topics modules intro 但我把它剥下来了 include
  • Redis 队列工作程序在 utcparse 中崩溃

    我正在尝试按照以下教程获得基本的 rq 工作 https blog miguelgrinberg com post the flask mega tutorial part xxii background jobs https blog m
  • 节点应用程序之间共享会话?

    我目前有两个独立的节点应用程序在两个不同的端口上运行 但共享相同的后端数据存储 我需要在两个应用程序之间共享用户会话 以便当用户通过一个应用程序登录时 他们的会话可用 并且他们似乎已登录到另一个应用程序 在本例中 它是一个面向公众的网站和一
  • 当 Jedis 与 Spring Data 一起使用时,为什么数据会以奇怪的键存储在 Redis 中?

    我将 Spring Data Redis 与 Jedis 一起使用 我正在尝试存储带有密钥的哈希值vc list id 我能够成功插入到redis 但是 当我使用 redis cli 检查密钥时 我没有看到密钥vc 501381 相反我看到
  • docker-compose:容器之间的 Redis 连接被拒绝

    我正在尝试设置一个 docker compose 文件 该文件旨在替换运行多个进程 RQ 工作线程 RQ 仪表板和 Flask 应用程序 的单个 Docker 容器解决方案导师 http supervisord org 主机系统是 Debi
  • Laravel Redis 配置

    我目前正在使用 Laravel 和 Redis 创建一个应用程序 几乎一切都工作正常 我按照文档中的说明扩展了身份验证 用户可以订阅 登录 注销 我可以创建内容 所有内容都存储在 Redis 中 但我有一个问题 我无法运行 php arti
  • ServiceStack.Redis:无法连接:sPort:

    我经常得到 ServiceStack Redis 无法连接 sPort 0 或 ServiceStack Redis 无法连接 sPort 50071 或其他端口号 当我们的网站比较繁忙时 就会出现这种情况 Redis 本身看起来很好 CP

随机推荐

  • kettle使用常见问题解决-03

    kettle使用常见问题解决 03 一 kettle资源库总是断开 报的错误信息如下 An error occured loading the directory tree from the repository Error comitti
  • 如何在屏幕上打印

    这是本人发的第一个博客 我想用写博客来回顾和复习本人学习c语言的过程 我们学习计算机语言是为让计算机完成一定的任务 而任务的结果是在屏幕上显示出来的 因此 我们要学习如何在屏幕上打印内容 include
  • SAP之FIORI(1)-绪论

    SAP之FIORI 1 绪论 web IDE的下载地址 https tools hana ondemand com sapui5 下载好运行之后orion exe之后登录网址 http localhost 8080 webide index
  • 全面解析JavaScript中对于字符串子串的查询方法

    一 基本应用场景 Q1 给定字符串a xxx 给定字符串b xxxxxx 判定a是否为b的子串 基础手写实现方法 function checkHas longStr shortStr for let i 0 i lt longStr len
  • 基于遗传算法GA算法优化BP神经网络(Python代码实现)

    一 概述 BP GA算法的设计 基于遗传算法的BP神经网络算法 以下简称BP GA 就是在BP神经网络的学习过程中 将权重和阀值描述为染色体 并选取适宜的适应函数 然后进行GA迭代 直到某种意义上的收敛 与普通BP学习算法相比 算法 BP一
  • redis 主从配置

    转 https blog csdn net github 26672553 article details 69568259 redis主从配置初步 2个节点主从 如果我们redis的压力很大 如果我们的并发高到我们读数据和写数据都有了很大
  • 二维码的生意几乎革掉了钱包的命

    刷脸支付无需结账台 无需手机 如果说说二维码让手机成为了钱包 那刷脸支付则索性让钱包这个东西都直接革掉 而这也点燃了国内的新零售浪潮 二维码 革命的祸首在移动支付普及 线上线下建立联系这件事上 二维码其实功不可没 在此之前 线上的归线上 线
  • Cmake 官方中文教程

    CMake官方教程 2018年04月03日 22 00 21 SoftGit 阅读数 23072 很好的一个官方教程翻译文档 CMake简介 CMake是一个跨平台的 开源的构建工具 cmake是makefile的上层工具 它们的目的正是为
  • Node js 项目启动报错,错误码,events.js:141,throw er; //Unhandled 'error' event,解决办法

    Node js 项目启动报错 错误码 events js 141 throw er Unhandled error event 解决办法 当我遇到这个问题的时候 我纠结了好半天 找了好多资料 都说是端口占用 必须杀死端口重新启动 确实是这样
  • 上架发布应用市场资料填写规则限制

    应用名称填写时 名字长度有没有限制呢 1 名称 1 字数限制 iOS 30 Android 64 2 应用市场显示的名称 2 副标题 1 字数限制 iOS 30 2 应用市场显示的副标题 宣传文本填写时 可以编写多少个字 1 字数限制 iO
  • 目标检测分块知识总结 2

    tags 目标检测 1 FSAF 论文题目 Feature Selective Anchor Free Module for Single Shot Object Detection 2019 文章主要解决在进行多尺度检测的时候 利用特征金
  • C语言数据类型32位和64位不同

    http blog csdn net kongdefei5000 article details 38866985 C语言编程需要注意的64位和32机器的区别 一 数据类型特别是int相关的类型在不同位数机器的平台下长度不同 C99标准并不
  • linux修改启动内核版本

    cd etc default sudo gedit grub 编辑grub文件 修改grub文件如下 GRUB DEFAULT 1 gt 9 其中 1 代表开机启动界面中 选择 Advancded options for Ubuntu 选项
  • 初学黑客攻防[1]--禁止其他电脑访问本地电脑的80端口

    首先 win10家庭版需添加 本地安全策略 后进行该练习 1 打开 记事本 输入以下代码 echo off pushd dp0 dir b SystemRoot servicing Packages Microsoft Windows Gr
  • xilinx axi_iic IP使用分享

    仿真环境 例化了两组axi iic 的IP 一个slv一个mst slv地址固定为0x33 7bit模式 iic总线速率为4000K 仿真发现每次只能发送3byte数据 和实际不符 仿真仅作参考 由于iic为双向端口 通过例化顶层将IO连接
  • rsync实时监控以及守护进程

    rsync守护进程模式 服务端的操作 1 安装 root backup yum install y rsync 2 修改配置文件 下面有配置文件详解 root m01 vim etc rsyncd conf uid rsync gid rs
  • 关于jax,tensorflow的安装详细教程

    jax在下面pycharm中有提示你在哪里下载 所以如果下次遇到有什么要下载的包都可以尝试这种方式去下载 在找找pycharm有没有提示 然后直接点网站看教程 这嘎是官网的教程 很详细 为了下载一个版本只有JAX的cpu 可能要用到当地的开
  • 第四章 云原生架构之Kubernetes基础知识

    1 K8S整体架构 1 1 概述 Kubernetes是一个可移植 可扩展的开源平台 用于管理容器化的工作负载和服务 简称 K8S K8S的本质是一组服务器集群 可以在对应服务器集群的每个节点上运行程序 来对节点中的容器进行管理 类似Mas
  • 图形编程丨图形绘制基础imgui篇—D3D9 HOOK 创建内部Imgui窗口

    作者 小阿栗 Imgui又称为Dear ImGui 它是与平台无关的C 轻量级跨平台图形界面库 没有任何第三方依赖 可以将Imgui的源码直接加到项目中使用 也可以编译成dll Imgui使用DX或者OpenGL进行界面渲染 Imgui主要
  • Redis三种集群模式-主从模式

    一 引言 Redis有三种集群模式 第一个就是主从模式 第二种 哨兵 模式 第三种是Cluster集群模式 第三种的集群模式是在Redis 3 x以后的版本才增加进来的 我们今天就来说一下Redis第一种集群模式 主从集群模式 二 配置说明