美文网首页PHP开发PHP经验分享
Redis 主从复制的用法

Redis 主从复制的用法

作者: phpworkerman | 来源:发表于2020-12-28 22:39 被阅读0次
介绍

Redis 可以通过设置主服务器和从服务器的方式,来实现数据从主服务器复制到从服务器的操作。主从复制不但可以起到备份数据的作用,也可以通过从服务器对数据的操作减轻主服务器的请求压力。

工作原理

1、从服务器 slave 通过配置文件连接主服务器 master 后,通过向 master 发送 PSYNC 命令启动复制流,master 可以有多个 slave,slave 也可以连接到其它 slave
2、PSYNC 会携带 master 的 replication ID 和 已接受的偏移量,master 可以根据这两个数据部分同步最新的数据,如果 master 中找不到 replication ID 或缓冲区中没有要同步的命令,将使用全量同步 master 中的数据

replication ID:每个 master 都会产生一个随机数组成的数据集标识,master 数据向 slave 同步时会携带这个参数,当 slave 向 master 发送 PSYNC 命令时又会携带上,如果 slave 发送的 replication ID 和 master 当前的不一致,则判定数据片段不一致,无法使用部分同步,将使用全量同步
偏移量:master 向 slave 发送的多少个字节的数据就会产生多少偏移量,即使在没有 slave 时,master 也会产生偏移量,其数量代表的是新命令的字节数,命令执行后会被暂存在复制积压缓冲区,这个区域是一个队列,遵循先进先出原则,超出存储空间时早期命令会弹出,如果 slave 请求的偏移量已经不存在队列中,将使用全量同步

  • 部分同步
    部分同步是为了解决当数据量很大时,使用全局同步效率低的问题。它的执行需要依赖 replication ID 和偏移量的判断条件成立
  • 全量同步
    以下是全量同步的运行过程:
    1、全量同步开始执行时,会在 master 后台开启一个保存进程,生成 RDB 文件
    2、缓冲区开始接收客户端新写入的命令
    3、当 master 保存进程执行完成后,会将 RDB 文件发送给 slave,slave 将文件保存到磁盘,再加载到内存中
    4、master 将缓冲区的命令发送给 slave

3、master 执行 bgsave 在后台开启 RDB 同步,master 全程保持异步,slave 复制过程大部分是也是异步的,但是在加载新数据集的时候主进程仍是会产生阻塞

配置 redis 服务器

从服务器的配置文件设置主服务器的 IP 地址、端口就可以开启了,文档中记录的是本地测试环境配置,实际项目需替换 IP 地址和端口

replicaof 127.0.0.1 6379

设置从服务器的只读属性,从服务器建议不开启写属性,会让主从数据一致性的维护变得很复杂

replica-read-only yes

查看 master 和 slave 的服务器信息,主从复制信息

info
Redis 设置 master 访问验证

master 可以设置密码验证,slave 连接 master 时需要输入密码才能访问,也可以通过在配置文件中填入密码,省去每次的验证操作

#master 设置密码
requirepass 123456
#slave 设置访问master密码
masterauth 123456
Redis 复制如何处理 KEY 的过期

master 设置 KEY 的过期时间,slave 会同步过来,slave 不会让 KEY 过期,它需要等待 master 传入 del key 的命令删除 KEY,当 master 无法及时提供 del 命令时,slave 内部的逻辑时钟也会正确判断 KEY 的过期时间,从而对客户端的查询返回正确的结果。如果 slave 提升为 master ,它将可以独立地处理 KEY ,不需要依赖原有的 master。

#master
PEXPIREAT
$4
name
$13
1609152465506
*2
$6
SELECT
$1
0
*2
$3
DEL
$4
name

#slave
PEXPIREAT^M
$4^M
name^M
$13^M
1609152465519^M
Master 关闭持久化造成的复制安全问题

在使用主从复制时,强烈建议开启 master 的持久化,当 master 没有开启持久化,并且发生故障重启时,master 因为没有备份文件,所以数据会被清空,而 slave 因为开启了同步功能,会把 master 的状态同步过去,从而清除 slave 的备份,造成数据的丢失。哨兵监视因为会根据断线时间来判断 master 是否失效,所以当 master 重启速度很短时,是无法被哨兵捕捉到的。在网上一些教程中,master 持久化会被呼吁关闭,以此来减轻服务器的 I/0 压力,但是实际生产环境中,对数据的保护应该要加倍谨慎。

相关文章

  • Redis在项目上的常用操作【二】

    Redis的高级用法 redis集群 redis 主从复制 概念:持久化保证了即使redis服务重启也不会丢失数据...

  • Redis|主从复制与哨兵机制

    1. Redis主从复制 1.1 Redis主从复制 Redis主从复制主要有两个角色,主机(master)对外提...

  • 【Redis学习笔记】13 Redis 主从复制

    1. Redis 主从复制特性 2. Redis 主从复制流程 3. Redis 主从复制操作 IP地址端口角色1...

  • Redis主从复制

    Redis主从复制 一.主从复制介绍 1.Redis复制功能介绍 1)Redis 使用异步复制。从 Redis2....

  • Redis的高可用

    Redis主从复制 什么是主从复制 Redis有三种集群方案,主从复制,哨兵,cluster集群,主从复制是指将一...

  • redis(二)

    Redis用户认证 禁用危险命令 主从复制的过程 主从复制的部署 哨兵 Redis哨兵+主从+密码 Redis哨兵...

  • Redis 主从复制的用法

    介绍 Redis 可以通过设置主服务器和从服务器的方式,来实现数据从主服务器复制到从服务器的操作。主从复制不但可以...

  • Redis Sentinel 介绍与部署

    Redis Sentinel 介绍与部署 1. Sentinel介绍 1.1 主从复制的问题 Redis主从复制可...

  • 高可用的redis服务搭建

    Redis Sentinel 介绍与部署 1. Sentinel介绍 1.1 主从复制的问题 Redis主从复制可...

  • redis主从设置

    redis主从复制 Redis读取写入的速度都特别快,但是也会产生读压力特别大的场景。 Redis支持主从复制,主...

网友评论

    本文标题:Redis 主从复制的用法

    本文链接:https://www.haomeiwen.com/subject/xpzgnktx.html