当前位置: 首页 > news >正文

Redis学习(十四)主从复制的工作原理、集群搭建(一主二从)

目录

    • 一、Redis的主从复制简介
      • 1.1 什么是主从复制?
      • 1.2 主从复制的优缺点
      • 1.3 主从复制场景应用
    • 二、Redis的主从复制工作原理
      • 2.1 全量复制
      • 2.2 增量复制
    • 三、主从复制搭建(主从复制引入)
      • 3.1 搭建步骤
      • 3.2 测试主从复制

Redis一共有三大集群模式:主从复制模式(Master-Slave)哨兵模式(Sentinel)Cluster模式,这里我们主要介绍主从复制模式的工作原理和搭建。

一、Redis的主从复制简介

1.1 什么是主从复制?

主从模式(Master-Slave) 是 Redis 的一种基本集群模式,它通过将一个Redis节点(主节点)的数据复制到一个或多个其他Redis节点(从节点)来实现数据的冗余和备份。

  • 主节点 负责处理客户端的写操作;
  • 从节点 会实时同步主节点的数据,客户端可以从从节点读取数据,实现读写分离,提高系统性能。

1.2 主从复制的优缺点

优点:

  1. 配置简单,易于实现。
  2. 实现数据冗余,提高数据可靠性。
  3. 读写分离,提高系统性能。

缺点:

  1. 主节点故障时,需要手动切换到从节点,故障恢复时间较长。
  2. 主节点承担所有写操作,可能成为性能瓶颈。
  3. 无法实现数据分片,受单节点内存限制。

1.3 主从复制场景应用

主从复制模式适用于以下场景:

  1. 数据备份和容灾恢复: 通过从节点备份主节点的数据,实现数据冗余。
  2. 读写分离: 将读操作分发到从节点,减轻主节点压力,提高系统性能。
  3. 在线升级和扩展: 在不影响主节点的情况下,通过增加从节点来扩展系统的读取能力。

总结:主从复制模式适合数据备份、读写分离和在线升级等场景,但在主节点故障时需要手动切换,不能自动实现故障转移。如果对高可用性要求较高,可以考虑使用哨兵模式或Cluster模式。


二、Redis的主从复制工作原理

Redis 的主从复制可以根据是否全量分为:全量复制增量复制

2.1 全量复制

主从复制 是指将一台 Redis 服务器的数据,复制到其他的 Redis 服务器。前者称为 主节点(master),后者称为 从节点(slave)

注意:数据的复制是单向的,只能由主节点到从节点。

Redis 的全量复制发生在 Slave(从节点)初始化阶段,即 从库第一次连接到主库时,此时 slave 需要将 master 主机上的所有数据都复制一份。

全量复制的具体过程如下:

在这里插入图片描述

  1. 从库跟主库建立 socket 连接,发送 SYNC 同步命令。
  2. 主库收到 SYNC 同步命令后,开始执行 BGSAVE 命令生成 .rdb 文件,并使用缓冲区记录此后的所有写命令。
  3. 主库 BGSAVE 执行完成之后,向所有从库发送快照,并在发送快照期间继续记录被执行的写命令。
  4. 从库收到快照文件后,丢弃所有的旧数据,载入收到的快照。
  5. 主库快照发送完毕之后开始向从库发送缓冲区中的写命令。
  6. 从库完成对快照的载入,开始接收命令请求,并执行来自主库缓冲区的写命令。

2.2 增量复制

增量复制 是指 Redis 的 slave(从节点)初始化后开始正常工作后,主库每执行一个写命令就会向从库发送一个相同的写命令,从库接收并执行收到的写命令的过程。对应主从复制中的第7步:

  1. 主库通过 socket 长连接持续把写命令发送给从库,保证主从数据一致性。

注意:增量复制和全量复制都是单向的,只能由主节点到从节点。


三、主从复制搭建(主从复制引入)

3.1 搭建步骤

开始搭建集群!6379 为主节点,63806381 为从节点。

搭建集权的完整步骤如下:

  1. 拷贝 redis.conf 配置文件,我们一共需要三台 redis-server,所以拷贝三份即可。
cp redis.conf redis6379.conf
cp redis.conf redis6380.conf
cp redis.conf redis6381.conf
  1. 修改配置文件,因为每个 redis-server 都是不同的实例,所以需要修改配置文件。

    修改内容如下:

  • 修改 port 端口;
  • 修改 pidfile 文件名;
  • 后台启动服务配置;
  • 修改 RDB 或 AOF 文件存放位置(具体看你用的持久化是 RDB 还是 AOF);
  • 修改 logfile 文件存放位置;
  • 修改 replication 中的配置 replicaof masterip masterport(配置文件是永久有效的,命令是临时有效:slaveof masterip masterport);

如下为修改后的具体配置信息:

主节点:redis6379.conf

# 改动内容如下:
bind 0.0.0.0 # 我这里是为了允许任意远程登录
protected-mode no # 关闭保护模式
port 6379  # 服务启动端口
daemonize yes # 后台启动
pidfile /var/run/redis_6379.pid # 指定pidfile文件
logfile "/myredis/redis6379.log" # 指定Logfile文件
dbfilename dump6379.rdb # 指定rdb文件名
dir /myredis/ # 指定工作目录
requirepass 123456 # 设定redis服务器的密码

从节点1:redis6380.conf

注意:Redis 从 2.8.0 版本开始正式支持 replicaof 命令,在此之前使用的是 slaveof 命令,功能相同但名称不同。

# 改动内容如下:
bind 0.0.0.0 # 我这里是为了允许任意远程登录
protected-mode no # 关闭保护模式
port 6380  # 服务启动端口
daemonize yes # 后台启动
pidfile /var/run/redis_6380.pid # 指定pidfile文件
logfile "/myredis/redis6380.log" # 指定Logfile文件
dbfilename dump6380.rdb # 指定rdb文件名
dir /myredis/ # 指定工作目录
replicaof 127.0.0.1 6379 # 指定从机的主机
masterauth 123456 # 从机的主机的密码验证requirepass 123456 # 设定redis服务器的密码

从节点2:redis6381.conf

# 改动内容如下:
bind 0.0.0.0 # 我这里是为了允许任意远程登录
protected-mode no # 关闭保护模式
port 6381  # 服务启动端口
daemonize yes # 后台启动
pidfile /var/run/redis_6381.pid # 指定pidfile文件
logfile "/myredis/redis6381.log" # 指定Logfile文件
dbfilename dump6381.rdb # 指定rdb文件名
dir /myredis/ # 指定工作目录
replicaof 127.0.0.1 6379 # 指定从机的主机
masterauth 123456 # 从机的主机的密码验证requirepass 123456 # 设定redis服务器的密码
  1. 启动每个服务,并且查看不同 redis-server 的配置信息 info replication

    执行命令如下:

# 命令格式:redis-server 配置文件路径
redis-server redis6379.conf
redis-server redis6380.conf
redis-server redis6381.conf

启动后,rdb 文件和 log 文件如下所示:

在这里插入图片描述

使用 ps -ef | grep redis 查看一下进程:

(Windows下使用 tasklist | findstr redis

登录到三台服务器上观察下:

主节点:6379端口

redis-cli -a 123456 -p 6379

从节点1:6380端口

redis-cli -a 123456 -p 6380

从节点2:6381端口

redis-cli -a 123456 -p 6381

3.2 测试主从复制

集群搭建好之后,我们测试一下基础的操作:

# 查看所有key
keys *
# 主节点写操作测试
set k1 v1
set k2 v2
# 主/从节点读操作测试
get k1
get k2
# 从节点写操作测试
set k3 v3

测试结果如下,可以发现:主节点用于读写数据,从节点用于读数据,不能写数据

在这里插入图片描述

至此,一主二从的主从复制模式已经搭建完毕了,但是正常业务中,并不是这么简单的。

整理完毕,完结撒花~🌻





参考地址:

1.Redis的主从复制和哨兵模式,https://developer.aliyun.com/article/1614267

2.彻底搞懂Redis主从复制原理及实战,https://www.cnblogs.com/cooffeeli/p/redis_master_slave.html

3.详解Redis三大集群模式,轻松实现高可用! https://www.cnblogs.com/yidengjiagou/p/17345831.html

相关文章:

  • 132.在 Vue3 中使用 OpenLayers 实现地图剪切与遮罩效果
  • Mysql学习笔记之事务
  • 碰一碰系统源码搭建==saas系统
  • 【GlobalMapper精品教程】095:如何获取无人机照片的拍摄方位角
  • 62、【OS】【Nuttx】编码规范解读(十)
  • VC++和python从哪一年开始支持split(字符串)非单个字符
  • 消防应急装备管理:打造消防营区智能仓储
  • 钩子函数的作用(register_hook)
  • 2025-05-28 Python深度学习8——优化器
  • 破能所,入不二
  • GNU AS汇编器的.align对齐
  • 端午节互动网站
  • 力扣 215 .数组中的第K个最大元素
  • AMBA-AHB总线是怎么不依赖三态总线的?
  • 11.14 LangGraph检查点系统实战:AI Agent会话恢复率提升287%的企业级方案
  • 【网络编程】十八、Reactor模式
  • 2025年05月28日Github流行趋势
  • 农业光合参数反演专栏
  • kubernate解决 “cni0“ already has an IP address different from 10.244.0.1/24问题
  • Caddy如何在测试环境中使用IP地址配置HTTPS服务
  • 销售网站/石家庄关键词优化平台
  • 宜家有做自己的网站吗/网站建设百度推广
  • 黄岐建网站/网络快速排名优化方法
  • 织梦网站怎样做锚文本/游戏加盟
  • 男女做那个网站/建立网站用什么软件
  • 我的电脑做网站服务器/厦门百度seo排名