Redis的复制(Master/Slave)

2023-05-16

一、Master/Slave Replication(主从复制)
  主机数据更新后,根据配置和策略,自动同步到从(备)机的master/slave机制,Master以写为主,Slave以读为主。
  作用:读写分离;容灾恢复。
二、应用
  2.1、配从(库)不配主(库)
  2.2、从库配置:slaveof 主库IP 主库端口
    每次与master(主库)断开之后,都需要重新连接,除非配置到redis.conf文件中;
    使用命令 Info replication 查看主从库信息。
  2.3、修改配置文件细节操作
    通过Redis镜像创建三个容器,如下所示:
  2.4、常用master/slave配置
    a、一主二仆:
      Init:初始化,配置两个从库; 一个master两个slave
      日志查看:1)主机日志;2)备机日志;3)info replication查看主从库配置信息;
      主从问题演示:
      1)切入点问题?slave1、slave2是从头开始复制还是从切入点开始复制?
      2)从机是否可以写?是否可以set?
      3)主机shutdown后从机是上位为主机还是原地待命(仍然为从机)?
      4)主机回来(重启)后,主机新增记录(数据),从机还能否顺利复制?
      5)其中一台从机down后情况如何?依照原有,它还能连上原先的主机吗?
    b、薪火相传
      1)上一个slave可以是下一个slave的master,slave同样可以接受其它slaves的连接和同步请       求,那么该slave作为了链条中下一个master,可以有效减轻master的写压力;
      2)中途变更转向:会清除之前的数据,但是重新建立后会拷贝罪行的数据;
      3)配置主机命令:Slaveof 新主库IP 新主库端口;
    c、反客为主
      1)执行命令SLAVEOF no one :使当前数据库停止与其他数据库的同步,转成主数据库
三、复制原理
  slave启动成功连接到master后会发送一个sync命令,Master接到命令启动后台的存盘进程,同时收集所有接收到的用于修改数据集的命令,在后台进程执行完毕之后,master将传送整个数据文件到slave,以完成一次完全同步。
  全量复制:slave服务在接收到数据库文件数据后,将其存盘并加载到内存中;
  增量复制:master继续将新的所有收集到的修改命令依次传给slave,完成同步,但是只要重新连接master,一次完全同步(全量复制)将自动执行。
四、哨兵模式(Sentinel)
  哨兵模式是“反客为主”的自动版本,不需要手动执行 SLAVEOF no one ,哨兵模式能够在后台监控主机是否发生故障,一旦发现主机发生了故障,将根据投票数自动将某一个从库转换为主库。
  4.1、使用步骤
  1)创建三个redis容器,端口分别为6379、6380、6381,6379为主库,80、81为从库
  2)配置哨兵,填写内容:sentinel monitor 被监控数据库名字(自己起名字) 127.0.0.1 6379 1
    最后一个数字1,表示主机挂掉后,slave投票看让谁接替成为主机,得票数多者成为主机。
  3) 启动哨兵:Redis-sentinel /myredis/sentinel.conf (根据实际情况配置,目录有所不同)
  4)正常主从演示
  5)原有的master挂了
  6)从库投票新选主库
  7)重新主从继续开工,info replication查看主从库信息
  8)如果之前的master重启回来后,会不会双master冲突?
    不会。重启回来后的前主机将以从机的身份挂载到新主机上。
  9)一个sentinel能够同时监控多个master。
五、复制的缺点
  复制延时:由于所有的写操作都是现在master上操作,然后同步更新到slave上,所以从master同步到slave机器有一定的延迟,当系统很繁忙的时候,延迟问题会更加严重,slave机器数量的增加也会使这个问题更加严重。
备注:等有时间了再实操一遍,把截图放上来。

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

Redis的复制(Master/Slave) 的相关文章

  • 如何查看我的 Redis 数据库 current_size?

    我知道 redis cli 以及 info 和 config 命令 但是 他们没有任何说明当前数据库大小的信息 我怎样才能弄清楚这一点 使用INFO命令 完整详细信息在这里 http redis io commands info http
  • StackExchange.Redis 简单 C# 示例

    我正在寻找一个非常简单的 C 入门应用程序来使用 StackExchange Redis 我在网上搜索并发现StackExchange Redis https github com StackExchange StackExchange R
  • Redis CLI 未通过 Laravel 显示最近存储的密钥

    我正在尝试使用缓存我的结果redis in Laravel通过做这个 result Cache remember orders cache 10 function use orders return orders return result
  • ruby redis 客户端扫描与密钥

    我正在寻找一些有关 redis 的 ruby 客户端的文档 但没有成功 我正在使用密钥 但我听说它们在生产 redis 中的性能很糟糕 redis Redis new host Settings redis host port Settin
  • django:redis:CommandError: 您尚未设置运行服务器所需的 ASGI_APPLICATION

    我正在尝试在 django 中创建套接字 我按照这个安装了asgi redislink https realpython com getting started with django channels 当我运行命令 python mana
  • ServiceStack:手动调用服务时恢复管道?

    作为后续这个问题 https stackoverflow com questions 64560997 servicestack messaging api can it make a broadcast 我想了解如何改进我对服务的手动调用
  • 如何清理redis中不活跃的玩家?

    我正在制作一个使用 redis 来存储游戏状态的游戏 它可以很好地跟踪位置和玩家 但我没有一个好的方法来清理不活跃的玩家 每当玩家移动时 这是一个半慢速移动游戏 想想每秒 1 5 帧 我就会用新位置更新哈希并删除旧位置键 跟踪活跃玩家的最佳
  • Docker&Celery - 错误:Pidfile (celerybeat.pid) 已存在

    应用程序包括 姜戈 雷迪斯 芹菜 码头工人 Postgres 在将项目合并到 docker 之前 一切都运行顺利且正常 但是一旦将其移入容器 就开始出现问题 起初它开始得很好 但过了一会儿我确实收到了以下错误 celery beat 1 E
  • Laravel - 缓存 Eloquent 并频繁更新

    是否可以对经常修改的对象使用缓存 例如 假设我们有一个 BlogPost 对象 并且有一个经常更改的 num of views 列 以及其他列 是否可以更新缓存和数据库中的 num of views 字段 而不破坏缓存对象并重新创建它 我可
  • Spring RedisTemplate:8次调用后方法键挂起

    我使用 Spring RedisTemplate spring data redis 1 7 1 与 Redis 进行通信 我需要通过正则表达式获取然后删除键 例如 context user1 我用的方法 RedisTemplate key
  • Node.js 上通过套接字连接 Redis

    由于共享托管 目标主机上的我的 redis 服务器不在端口上运行 而是在非常特定的套接字上运行 可以通过套接字文件连接到该套接字 只有我的用户可以访问 但是 我还没有找到如何通过套接字指定连接node redis and connect r
  • 如何在多个Lua State(多线程)之间传递数据?

    我在中启动Redis连接池redis lua 通过从 C 调用 我得到了redis lua state 此 Lua 状态全局启动一次 仅在其他线程中启动get从中 当有一个 HTTP 请求 工作线程 时 我需要从redis lua stat
  • 如何让客户端下载动态生成的非常大的文件

    我有一个导出功能 可以读取整个数据库并创建一个包含所有记录的 xls 文件 然后文件被发送到客户端 当然 导出完整数据库的时间需要大量时间 并且请求很快就会以超时错误结束 处理这种情况的最佳解决方案是什么 例如 我听说过使用 Redis 创
  • Docker-compose Predis 不通过 PHP 连接

    我正在尝试使用 docker compose 将 PHP 与 redis 连接 docker compose yml version 2 services redis image redis 3 2 2 php image company
  • Spring Data Redis - Lettuce连接池设置

    尝试在 spring data redis 环境中设置 Lettuce 连接池 下面是代码 Bean LettuceConnectionFactory redisConnectionFactory GenericObjectPoolConf
  • Redis INCRBY 有限制

    我想知道是否有一种方法可以通过我的应用程序的单次往返在 Redis 中执行此操作 对于给定的键K 其可能值V是范围内的任意整数 A B 基本上 它有上限和下限 When an INCRBY or DECRBY发出命令 例如INCRBY ke
  • 从redis中检索大数据集

    一台服务器上的应用程序查询另一台服务器上运行的 Redis 查询的结果数据集约为 250kzrangebyscore objects locations inf inf这在应用程序服务器上似乎需要 40 秒 当使用命令执行时redis cl
  • 通过 StackExchange.Redis 连接到 Redis Servier

    我尝试使用以下方法制作一个测试项目Redis https redis io服务器 通过 Virtual Box 安装在 Linux Ubuntu 虚拟机上 Linux 机器通过 Virtual Box 的桥接适配器与本地网络连接 Virtu
  • 在 aws-elasticache 上使用 memcached 或 Redis

    我正在 AWS 上开发一个应用程序 并使用 AWS elasticache 进行缓存 我对使用 memcached 或 redis 感到困惑 我阅读了有关 redis 3 0 2 更新以及它现在如何等同于 memchached 的文章 ht
  • 在 Kubernetes/Openshift 中将客户端-服务器流量保持在同一区域的最佳方法?

    我们运行兼容 Kubernetes OKD 3 11 的本地 私有云集群 其中后端应用程序与用作缓存和 K V 存储的低延迟 Redis 数据库进行通信 新的架构设计将在两个地理上分布的数据中心 区域 之间平均划分工作节点 我们可以假设节点

随机推荐