redis主从复制和哨兵模式

2023-11-07

主从复制概扩及原理

Redis主从复制是指将一个Redis实例(即主库)的数据复制到其他Redis实例(即从库)的过程。主节点负责写入数据,从节点负责读取数据,从而实现数据的高可用性和负载均衡。
原理: 主从复制的原理如下:

  1. 从节点连接主节点并发送SYNC命令,请求复制主节点的数据。

  2. 主节点接收到SYNC命令后,开始执行BGSAVE命令,将当前内存中的数据持久化到磁盘上,并将生成的RDB文件发送给从节点。

  3. 从节点接收到RDB文件后,将其加载到内存中,并向主节点发送PSYNC命令,请求继续复制主节点的数据。

  4. 主节点接收到PSYNC命令后,开始将内存中的数据发送给从节点,并记录从节点接收到的最后一个数据的偏移量。

  5. 从节点接收到数据后,将其存储到自己的内存中,并向主节点发送ACK命令,表示已经接收到数据。

  6. 主节点接收到ACK命令后,继续向从节点发送数据,直到从节点和主节点的数据完全一致。

  7. 从节点定期向主节点发送PING命令,以检测主节点是否宕机或网络是否异常。

  8. 如果主节点宕机或网络异常,从节点会重新连接主节点或者连接其他从节点,成为新的主节点。

通过主从复制,可以实现Redis的高可用性和负载均衡,同时也可以提高Redis的读取性能。

在这里插入图片描述

redisi主从复制模式

准备环境 3台虚拟机
192.168.1.10master主库
192.168.1.9slave1从库
192.168.1.8slave2从库
1.三个都按照redis

yum -y install redis

2.编辑master主库

vim /etc/redis.conf
bind 0.0.0.0
daemonize yes
port 6379 
pidfile /var/run/redis_6379.pid

启动服务

systemctl start redis

3.编辑slave1、slave2从库(配置一致)

vim /etc/redis.conf
bind 0.0.0.0
daemonize yes
port 6379 
pidfile /var/run/redis_6379.pid
slaveof 192.168.1.10 6379

启动服务

systemctl start redis

主库测试
在这里插入图片描述
从库测试
在这里插入图片描述在这里插入图片描述

redis哨兵原理

Redis哨兵是一种特殊的Redis进程,它的主要作用是监控Redis主从节点的状态,并在主节点出现故障时自动将从节点升级为主节点,从而保证Redis集群的高可用性。
原理:

  1. 哨兵通过向主节点和从节点发送PING命令来监控它们的状态,如果哨兵在指定的时间内没有收到节点的回复,则认为该节点已经失效。

  2. 当哨兵检测到主节点失效时,它会向其他哨兵发送通知,请求进行故障转移操作。

  3. 哨兵集群中的所有哨兵会进行投票,选出一个哨兵作为领导者,负责执行故障转移操作。

  4. 领导者哨兵会向所有从节点发送SLAVEOF命令,将它们升级为主节点,并将新的主节点的信息广播给其他哨兵和客户端。

  5. 客户端会根据哨兵广播的信息,重新连接到新的主节点上,从而实现Redis集群的高可用性。

总之,Redis哨兵通过监控节点状态、自动切换主从节点、广播新主节点信息等方式,保证了Redis集群的高可用性和数据一致性。

在这里插入图片描述

redis哨兵模式

在主从复制的基础环境下通过编辑 redis-sentinel.conf 完成
1.master主库、slave1、slave2从库编辑

 vim /etc/redis-sentinel.conf 

protected-mode no
port 26379
daemonize yes
sentinel monitor mymaster 192.168.1.10 6379 2

3台虚拟机重启服务,并开启哨兵模式

systemctl restart redis
systemctl restart redis-sentinel

目前主库、slave1、slave2从库状况

在这里插入图片描述在这里插入图片描述在这里插入图片描述当主库宕机时,slave1、slave2从库的状况

systemctl stop redis

slave1状况
在这里插入图片描述并且主配置文件也发生了一些变化

client-output-buffer-limit normal 0 0 0表示普通客户端的输出缓冲区限制为0,即没有限制
client-output-buffer-limit slave 256mb 64mb
60表示从节点的输出缓冲区限制为256MB,当缓冲区使用率达到64MB时开始发送警告,警告时间为60秒
client-output-buffer-limit pubsub 32mb 8mb
60`:表示发布/订阅客户端的输出缓冲区限制为32MB,当缓冲区使用率达到8MB时开始发送警告,警告时间为60秒
这些命令可以帮助控制Redis客户端的输出缓冲区大小,防止客户端发送过多的数据导致Redis服务器的性能下降

在这里插入图片描述

slave2状况

总结:单master宕机后,slave1和slave2随机一个slave1接替master,另一个slave2成为新的master从库。Redis哨兵在Redis集群环境中发挥了重要的作用,它可以有效提高Redis服务器的可靠性和稳定性,帮助监控Redis服务器的工作状态,并自动完成高可用的故障转移操作。因此,许多Redis用户都会安装Redis哨兵,以保证自己的Redis服务器的安全可靠

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

redis主从复制和哨兵模式 的相关文章

  • 即使增加超时后,stackexchange.redis 也会抛出超时?

    尝试从缓存中删除时出现以下错误 Timeout performing DEL test com inst 0 mgr ExecuteSelect err never queue 0 qu 0 qs 0 qc 0 wr 0 wq 0 in 0
  • 带 Java 客户端的键值数据库

    我基本上想在磁盘上存储一个哈希表 以便以后可以查询它 我的程序是用Java 编写的 哈希表从字符串映射到列表 那里有很多键值存储 但经过大量研究 阅读后 尚不清楚哪一个最适合我的目的 以下是一些对我来说很重要的事情 简单的键值存储 允许您使
  • 在节点中使用redis获取hash key的所有字段和值

    红色是使用哈希 我需要存储具有多个字段和值的哈希键 我尝试如下 client hmset Table1 Id 9324324 ReqNo 23432 redis print client hmset Table1 Id 9324325 Re
  • 是否可以使用带有 FUSE 文件系统的 Linux VFS 缓存?

    默认情况下 Linux VFS 缓存似乎不适用于 FUSE 文件系统 例如 read 调用似乎被系统地转发到 FUSE 文件系统 我在 FUSE 特定的远程文件系统上工作 我需要一个非常积极的缓存 我需要实现自己的页面缓存吗 或者是否可以为
  • Redis多插入问题

    我尝试多次插入 但它给了我错误 http pastie org 7337421 http pastie org 7337421 cat mass insert txt 3 r n 3 r nSET r n 3 r nkey r n 5 r
  • 找不到模块“socket.io/node_modules/redis”

    当尝试做的时候 var redis require socket io node modules redis 我收到错误 找不到模块 socket io node modules redis 我不明白为什么 我正在运行 Windows 并运
  • 使用 EVAL、SCAN 和 DEL 的 Redis 通配符删除脚本返回“非确定性命令后不允许写入命令”

    因此 我正在寻求构建一个 lua 脚本 该脚本使用 SCAN 根据模式查找键并删除它们 原子地 我首先准备了以下脚本 local keys local done false local cursor 0 repeat local resul
  • 如何从 python 将无穷大传递给 redis?

    我正在使用 redis py 并希望将 inf 和 inf 与 ZRANGEBYSCORE 一起使用 我尝试使用 inf 的字符串和浮点来执行此操作 但它们返回一个空集 我怎样才能做到这一点 EDIT 我尝试执行以下命令 redis Str
  • 保护节点 Redis

    我正在尝试保护 Node Redis IPC 服务器以使用私钥 公钥 我已经关注了本教程 http bencane com 2014 02 18 sending redis traffic through an ssl tunnel wit
  • 我的 Redis 自动生成的密钥

    我不知道我的 Redis 版本 4 0 9 到底发生了什么 我正在运行一个应用程序并使用 Redis 来存储我的数据库 但是 然后 Redis 自动创建 3 个新键 Backup1 Backup2 Backup3 并删除我的所有数据 这是我
  • 仅当尚未设置时才进行原子设置

    仅当尚未在 Redis 中设置时 是否有办法执行原子设置 具体来说 我正在创建一个像 myapp user user email 这样的用户 并且希望 Redis 在 user email 已被占用时返回错误 而不是默默地替换旧值 比如声明
  • redis集群不断打印日志WSA_IO_PENDING

    当我启动redis集群的所有redis服务器时 所有这些服务器不断打印类似WSA IO PENDING clusterWriteDone的日志 9956 03 Feb 18 17 25 044 WSA IO PENDING writing
  • 如何设置 Celery 以通过 ssl 与 Azure Redis 实例对话

    使用 的伟大答案 如何在microsoft azure上的django项目中配置celery redis https stackoverflow com questions 39616701 how to configure celery
  • 库存管理系统的 SQL 与 NoSQL

    我正在开发一个基于 JAVA 的网络应用程序 主要目的是拥有在多个称为渠道的网站上销售的产品的库存 我们将担任所有这些渠道的管理者 我们需要的是 用于管理每个渠道的库存更新的队列 库存表 其中包含每个通道上分配的正确快照 将会话 ID 和其
  • Redis hash写入速度非常慢

    我面临一个非常奇怪的问题 使用 Redis 时 我的写入速度非常糟糕 在理想的情况下 写入速度应该接近 RAM 上的写入速度 这是我的基准 package redisbenchmark import redis clients jedis
  • 如何批量删除Redis中数十万个带有特殊字符的key

    我们有一个包含数十万个 Redis 键的列表 其中包含各种特殊字符 我们希望批量删除它们 对于这个问题上的类似问题 有一些很好的答案 如何使用 Redis 自动删除与模式匹配的键 https stackoverflow com questi
  • 在 aws-elasticache 上使用 memcached 或 Redis

    我正在 AWS 上开发一个应用程序 并使用 AWS elasticache 进行缓存 我对使用 memcached 或 redis 感到困惑 我阅读了有关 redis 3 0 2 更新以及它现在如何等同于 memchached 的文章 ht
  • socket.io 广播功能 & Redis pub/sub 架构

    如果有人能帮助我解决一个小疑问 我将不胜感激 使用socket io广播功能和在Redis上使用pub sub设计架构有什么区别 例如 在另一个示例中 node js 服务器正在侦听 socket io 针对 键 模型 todo 和值 数据
  • Redis、会话过期和反向查找

    我目前正在构建一个网络应用程序 并想使用 Redis 来存储会话 登录时 会话会使用相应的用户 ID 插入到 Redis 中 并且过期时间设置为 15 分钟 我现在想实现会话的反向查找 获取具有特定用户 ID 的会话 这里的问题是 由于我无
  • 2 个具有共享 Redis 依赖的 Helm Chart

    目前 我有 2 个 Helm Charts Chart A 和 Chart B Chart A 和 Chart B 对 Redis 实例具有相同的依赖关系 如Chart yaml file dependencies name redis v

随机推荐

  • float(“inf“)、float(“-inf“)

    一 python里如何表示正负无穷 正无穷 float inf 负无穷 float inf 二 用inf做简单加 乘算术运算会得到inf print 1 float inf inf print 2 float inf inf 三 除了inf
  • python线性表

    顺序表 顺序表 将元素顺序地存放在一块连续的存储区里 元素间的顺序关系由它们的存储顺序自然表示 数据元素本身连续存储 每个元素所占的存储单元大小固定相同 元素的下标是其逻辑地址 而元素存储的物理地址 实际内存地址 可以通过存储区的起始地址L
  • 山石网科国产化入侵防御系统,打造全生命周期的安全防护

    随着互联网的普及和网络安全的威胁日益增加 botnet感染成为了企业面临的重要问题之一 botnet是一种由分散的客户端 或肉鸡 组成的网络 这些客户端被植入了bot程序 受控于攻击者 攻击者通过这些客户端的bot程序 利用C C服务器对这
  • 指数分布的定义形式及应用

    转载请注明出处 http blog csdn net ningyaliuhebei article details 46409941 指数分布是连续型随机变量 指数分布具有无记忆性 指数分布是特殊的gamma分布 指数分布 Exponent
  • python主流web框架识别

    想学习web框架 又想熟悉python 问题来了 有没有极简的数据来支撑快速开发 特来研究 不能去研究几十个 没时间 研究主流的即可 Django Tornado Flask Twisted 所谓网络框架是指这样的一组Python包 它能够
  • 树组件根节点+叶节点渲染

    本人使用的是eleme的树组件进行的数据渲染 Element The world s most popular Vue UI frameworkElement 一套为开发者 设计师和产品经理准备的基于 Vue 2 0 的桌面端组件库http
  • 进阶题解:反转链表

    入门级题解 https blog csdn net m0 46663240 article details 122602996 一刷代码随想录 再次遇到这个反转链表 当时可是难到我了 现在做还是比较轻松的 思路及关键点 1 有两部分 一部分
  • ROS入门四 服务中的Server和Client

    服务中的Server和Client 简介 使用 spawn服务写一个客户端程序创建一只新海龟 服务模型 创建turtle spawn cpp 配置CMakeLists txt中的编译规则 编译并运行 总结流程 创建一个服务接受client消
  • 数学建模——仓内拣货优化问题

    仓内拣货优化问题 求解 某电商公司客户订单下达仓库后 商品开始下架出库 出库主要包含5 个流程如图1所示 定位 仓库有多个货架 每个货架有多个货格 商品摆放在货格中 且每个货格最多摆放一种商品 商品可以摆放在多个货格 订单下达仓库后 定位操
  • springboot有关type-aliases-package设置,xml别名爆红错误

    在application yaml中设置 mybatis mapperLocations classpath mapper xml type aliases package com chan springcloud entities 但xm
  • 【CSS】动态背景1

    效果 代码
  • 利用Vulnhub复现漏洞 - mini_httpd任意文件读取漏洞(CVE-2018-18778)

    mini httpd任意文件读取漏洞 CVE 2018 18778 Vulnhub官方复现教程 漏洞原理 复现过程 启动环境 端口设置 浏览器设置 BurpSuit设置 漏洞复现 Vulnhub官方复现教程 https vulhub org
  • 【目录贴】硕士实验室嵌入式学习路线参考清单

    下面是对我在硕士期间边学边实践所写的部分文章 挑选整理出一个 学习清单 其实我写到目前为止 如果你看进去了这些东西 可以说各种东西达到了熟悉 熟练的状态 可不敢说精通 面试官会出手 如果看到这篇路线总结 无论你是本科还是硕士 你也别太感觉东
  • TCP的半关闭状态以及tcp-keepalive

    文章目录 半关闭状态 实现方法 tcp keepalive 开启 tcp keepalive 方法1 Linux系统全局开启 方法2 setsockopt 设置 socket 半关闭状态 一次TCP四次挥手的过程如上图所示 设左侧为客户端
  • elasticsearch 去重查询并进行分页

    去重查询的俩种方式 在进行去重查询时 原来的目的是对于查询出的结果中一模一样的数据进行去重 但是各种百度发现都是对于单一字段的去重查询 最后索性新增了一个字段 将其他字段拼接了起来 从而根据拼接的字段进行去重查询 1 使用字段聚合 top
  • windows:windows10 下如何让程序被 Cortana搜索到

    参考 https blog csdn net qq 26462567 article details 101011871 总结 添加快捷方式到开始菜单目录
  • 测试框架pytest教程(5)运行失败用例-rerun failed tests

    content of test 50 py import pytest pytest mark parametrize i range 50 def test num i if i in 17 25 pytest fail bad luck
  • 八度音阶和频率的关

    八度音阶和频率的关系 Frequency in hertz semitones above or below middle C Octave Note 0 1 2 3 4 5 6 7 8 9 C 16 352 48 32 703 36 65
  • Qt 常用的字符转换,QString如何转换成const char类型, 转 PWCHAR wchar_t*

    常用的字符转换 日常记录 QString如何转换成const char类型 const char cmd data qstring toStdString c str qstring为待转换的qstring类型字符串 QString for
  • redis主从复制和哨兵模式

    redisi主从和哨兵模式 主从复制概扩及原理 redisi主从复制模式 redis哨兵原理 redis哨兵模式 主从复制概扩及原理 Redis主从复制是指将一个Redis实例 即主库 的数据复制到其他Redis实例 即从库 的过程 主节点