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 SYNC 套接字上的错误情况:连接被拒绝

    在我的 django 应用程序中使用 celery 和 redis 一切都工作正常 直到我遇到了问题 redis 文件的位置已更改 redis 无法访问它们 经过查找 原来这是由于网络随机攻击造成的 需要添加confg 我添加文件后 一段时
  • 使用 Sentinels 升级 Redis 的最佳实践?

    我有 3 个 Redis 节点 由 3 个哨兵监视 我进行了搜索 文档似乎不清楚如何最好地升级此类配置 我目前使用的是 3 0 6 版本 我想升级到最新的 5 0 5 我对这方面的程序有几个疑问 升级两个大版本可以吗 我在我们的暂存环境中执
  • Spring Data JPA Redis:无法编写基于自定义方法的查询

    我已经使用 Redis 配置了 Spring Data JPA 并使用RedisRepositorieswith 提供了类似的方法find findAll 所有这些方法似乎都工作得很好 但我无法编写我的自定义方法 RedisEntity f
  • 有没有办法让特定的key在集群模式下定位到特定的redis实例上?

    我想让我的多锁位于不同的redis实例上 我发现redission可以指定一个实例来执行命令 但是如果该命令与key相关 则指定的实例会将命令传输到另一个实例 你能给我一些建议吗 你可以 但这并不是微不足道的 首先 Redis 在键中使用大
  • StackExchange.Redis的正确使用方法

    这个想法是使用更少的连接和更好的性能 连接会随时过期吗 对于另一个问题 redis GetDatabase 打开新连接 private static ConnectionMultiplexer redis private static ID
  • 如何使 Redis 缓存中数据层次结构(树)的部分内容无效

    我有一些产品数据 需要在 Redis 缓存中存储多个版本 数据由 JSON 序列化对象组成 获取普通 基本 数据的过程很昂贵 将其定制为不同版本的过程也很昂贵 因此我想缓存所有版本以尽可能进行优化 数据结构看起来像这样 BaseProduc
  • 为什么Redis中没有有序的hashmap?

    Redis 数据类型 http redis io topics data types包括排序集 http redis io topics data types intro sorted sets以及其他用于键值存储的必要数据结构 但我想知道
  • 想要在后台不间断地运行redis-server

    我已经下载了 redis 2 6 16 tar gz 文件并安装成功 安装后我运行 src redis server 它工作正常 但我不想每次都手动运行 src redis server 而是希望 redis server 作为后台进程持续
  • 如何在Redis中只保存一个数据库?

    我是 Redis 新手 有一个与备份相关的问题 目前 我有一个实例在 Windows 服务器上运行 在这个实例中 我当前有一项 工作 将数据存储在一个数据库中 我不想备份这些数据 我必须创造一份新工作 我的第一个想法是将数据存储在另一个数据
  • Amazon Elasticache Redis 集群 - 无法获取端点

    我需要获取 Amazon Elasticache 中 Redis 集群的终端节点 以下代码适用于 Memcached 集群 但不适用于 Redis import com amazonaws auth AWSCredentials impor
  • 超出 Redis 连接/缓冲区大小限制

    在对我们的应用程序服务器进行压力测试时 我们从 Redis 中得到以下异常 ServiceStack Redis RedisException 无法连接到 redis host 6379 处的 redis 实例 gt System Net
  • Redis 中存储整数和字符串的区别

    这两个命令有什么区别吗 LPUSH myset 123 LPUSH myset 123 我想存储大约 500 万个整数 并且我想以最有效的方式做到这一点 不 没有什么区别 两者都存储为字符串 从redis io http redis io
  • 集合成员的 TTL

    Redis 是否可以不为特定键而是为集合的成员设置 TTL 生存时间 我正在使用 Redis 文档提出的标签结构 数据是简单的键值对 标签是包含与每个标签对应的键的集合 例如 gt SETEX id id 1 100 Lorem ipsum
  • 为什么我们需要 Redis 来运行 CKAN?

    我想知道为什么我们需要 Redis 服务器来运行 CKAN 如果需要 为什么 我如何使用 CKAN 配置它 附注 我正在 RHEL7 中运行我的 ckan 实例 Update Redis 已成为一项要求从CKAN 2 7开始 https d
  • 在 Rails 应用程序上将 HASH 保存到 Redis

    我刚刚开始使用 Redis 和 Rails 所以这可能是一个愚蠢的问题 我试图将哈希值保存到 Redis 服务器 但是当我检索它时 它只是一个字符串 IE hash field gt value field2 gt value2 redis
  • redis能完全取代mysql吗?

    简单的问题 我是否可以使用 redis 而不是 mysql 来处理各种 Web 应用程序 社交网络 地理位置服务等 IT 领域没有什么是不可能的 但有些事情可能会变得极其复杂 将键值存储用于全文搜索之类的事情可能会非常痛苦 另外 据我所知
  • 在 Redis 中存储 IP 范围

    我有很多不同提供商的 IP 范围 例如 P1 192 168 1 10 192 168 1 50 192 168 2 16 192 168 2 49 P2 17 36 15 34 17 36 15 255 P3 我将此 IP 转换为 int
  • Redis - 错误:值不是有效的浮点数

    我在 Redis 中有一个排序集 我试图通过在Python代码中使用zincrby来更新特定元素的计数器值 例如 conn zincrby usersSet float 1 user1 但它显示错误为 错误 值不是有效的浮点数 我在 cli
  • 执行 SET {Key} 超时,inst: 0,mgr: Inactive,queue: 2, qu=1, qs=1, qc=0, wr=1/1, in=0/0

    我正在尝试使用 StackExchange Redis 客户端将 90 KB pdf 文件保存到 Azure Redis 缓存中 我已将该文件转换为字节数组并尝试使用 stringSet 方法保存它并收到错误 Code byte bytes
  • Redis如何存储关联数组?设置、散列还是列表?

    我对 Redis 的所有可用存储选项有点困惑 我想做一些简单的事情 并且不想过度设计它 我正在与phpredis and Redis v2 8 6 我有一个需要存储的简单关联数组 我还需要能够通过其键检索项目并循环遍历所有项目 a arra

随机推荐

  • 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第一种集群模式 主从集群模式 二 配置说明