Redis 学习三 主从复制架构

2023-12-12  本文已影响0人  __Y_Q

前两次学习了 Redis 的基础知识和持久化方式, 今天开始学习 Redis 的主从复制架构.

先上图


基本的主从架构

上图就是一个最基本的主从架构.
Redis 的主从复制架构是一种常见的高可用性和性能提升方案. 在Redis 中, 主从复制允许将一个 Redis 服务器(主节点)的数据复制到一个或多个其他 Redis 服务器(从节点), 从而实现数据的备份, 读取负载均衡和故障恢复等功能.

1. 主从复制的基本原理

2. 主从复制的工作流程

主从复制又分为 全量复制部分复制
2.1 全量复制

注意: 当 master 与 slave 之间的连接由于某些原因而断开时, slave 能够自动重连 master, 如果 master 收到了多个 slave 并发的连接请求, 它只会进行一次持久化, 然后再把这一份持久化的数据发送给多个并发连接的 slave.

全量复制流程示意图

2.2 部分复制
masterslave 断开连接又重连后, 一般都会对整份数据进行复制, 但是从 Redis 2.8 版本开始, Redis 改用可以支持部分数据复制命令 psyncmaster 同步数据, slavemaster 能够在网络连接断开重连后, 只进行部分数据的复制. 流程如下

master 会在内存中创建一个复制数据用的缓存队列, 缓存最近一段时间的数据, master 和它所有的 slave 都维护了复制的数据下标 offset 和 master 的进程 ID, 因此当网络断开后, slave 会请求 master继续进行未完成的复制, 从所记录的数据下标开始.
如果 master 的进程 ID 变化了, 或者从节点数据下标 offset 太旧, 已经不在 master 的缓存队列里了, 那么将会进行一次全量数据的复制.


3. 主从复制的搭建配置

搭建主从架构一般都是配置从节点.

  1. 复制一份 redis.conf 文件到从节点.

  2. 修改相关配置, 假设 192.168.1.1 123 是主节点, 192.168.1.2 456 是从节点.

port 456
pidfile  /var/run/redis_456pid.pid #pid进程号写入pidfile, 456为从节点的端口号
logfile "456.log" #456 为从节点的端口号
dir /usr/local/redis/data/456 #指定数据存放目录., 456为从节点的端口号
# 需要注释掉bind 
# bind 127.0.0.1(bind绑定的是自己机器网卡的ip,如果有多块网卡可以配多个ip,代表允许客户端通 过机器的哪些网卡ip去访问,内网一般可以不配置bind,注释掉即可)
  1. 配置主从复制
replicaof 192.168.1.1 123  #配置从节点向 123 的redis实例复制数据, 
replica-read-only yes #配置从节点只读
  1. 启动从节点
redis-server redis.conf
  1. 连接从节点
Redis-cli -p 456
  1. 测试在123实例上写数据, 456实例是否能及时同步新修改的数据.

4. 主从复制风暴

什么是复制风暴:当有多个从节点, 同时从主节点复制数据, 就会导致直接点压力过大.

为了解决复制风暴问题, 可以从架构上调整, 让部分从节点与从节点同步数据, 类似阶梯式.


image.png
上一篇 下一篇

猜你喜欢

热点阅读