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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不愿放下技术的小赵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值