Redis主从复制

13 篇文章 0 订阅

2、 主从复制

2.1、背景

随着业务的扩展以及数据呈现几何式的增长,之前只是用单个redis已经明显达不到要求了,所以打算采用主从复制,从而降低主服务器的压力

2.2、主从复制介绍

redis主从复制,是一种常见的数据复制机制,根据配置和策略,自动将数据同步到从机,从而实现数据在不同Redis服务器之间的同步和备份,降低主服务器的压力。

在Redis中,主从复制的是指一个主节点(Master)将自己的数据复制到一个或多个从节点(Slave),从而实现数据的备份和读写分离。主节点负责处理客户端的写操作,而从节点则负责复制主节点的数据并处理客户端的读请求。

一个主节点(Master)下面可以呦一个或者多个从节点(slave),但是一个从节点(slave)只能属于一个主节点(Master)

需要注意的是,主从复制是异步的,即主节点将数据发送给从节点后,不会等待从节点的确认。因此,在某些极端情况下,主从节点之间可能会存在数据的不一致性。为了避免数据丢失的情况,可以采用Redis的持久化机制,将数据写入磁盘

2.3、主从复制的特点

  1. 读写分离

    在redis主从复制机制中,主机(Master)负责写操作,从机(Slave)负责读操作,从而减轻主节点读的压力。

  2. 数据同步

    主节点会将自己的数据异步地复制到从节点,确保数据的一致性。

  3. 容灾快速恢复

    当主节点挂了之后,从机会根据配置的策略,自动转化为主机

  4. 扩展性好

    通过增加从节点,可以实现更好的可扩展性和负载均衡,提高系统吞吐量。

2.4、主从复制原理

Redis主从复制的原理如下:

  1. 首次同步:当从节点要进行主从复制时,它会发送一个SYNC命令给主节点。主节点收到SYNC命令后,会执行BGSAVE命令来生成RDB快照文件,并在生成期间使用缓冲区记录所有写操作。

  2. 快照传输:当主节点完成BGSAVE命令并且快照文件准备好后,将快照文件传输给从节点。主节点将快照文件发送给从节点,并且在发送过程中,主节点会继续将新的写操作缓冲到内存中。

  3. 追赶复制:当从节点收到快照文件后,会加载快照文件并应用到自己的数据集中。一旦快照文件被加载,从节点会向主节点发送一个PSYNC命令,以便获取缓冲区中未发送的写操作。

  4. 增量复制:主节点收到PSYNC命令后,会将缓冲区中未发送的写操作发送给从节点,从节点会执行这些写操作,保证与主节点的数据一致性。此时,从节点已经追赶上了主节点的状态。

  5. 同步:从节点会继续监听主节点的命令,并及时执行主节点的写操作,以保持与主节点的数据同步。主节点会定期将自己的操作发送给从节点,以便从节点保持最新的数据状态.

    注意:当slave首次同步或者宕机后恢复时,会全盘加载,以追赶上大部队,即全量复制

在这里插入图片描述

2.5、搭建主从复制

采取主从复制经典模式:一主两从

三台服务器配置如下:

现实中需要三台服务器,由于资源有限,就在同一台服务器上演示,生产环境中切记不可以这么做,最好放在三台服务器中,否则万一服务器挂了,那就彻底成事故了。

角色地址端口
Master(主机)192.168.12.96379
Slave(从机)192.168.12.96380
Slave(从机)192.168.12.96381

在这里插入图片描述

2.5.1、配置主从复制

1.为了方便统一管理,建议新建一个目录,把配置文件都放在同一个文件夹下面

mkdir master-slave
chmod 777 master-slave
# 方便演示,停止所有的redis
ps -ef | grep redis | awk -F" " '{print $2;}' | xargs kill -9 

2.复制原始的redis.conf配置文件到刚才创建的目录下

cp /opt/redis-6.2.12/redis.conf   /opt/redis-6.2.12/master-slave/

3.创建msater的配置文件

在/opt/redis-6.2.12/master-slave/目录下创建master的配置文件 redis-6379.conf

#复用原始的配置文件
include /opt/redis-6.2.12/master-slave/redis.conf
#后台运行
daemonize yes
#IP地址
bind 127.0.0.1
#配置密码
requirepass 123456
dir /opt/redis-6.2.12/master-slave/
logfile /opt/redis-6.2.12/master-slave/6379.log
##端口
port 6379
##rdb文件
dbfilename dump_6379.rdb
#pid文件
pidfile /var/run/redis_6379.pid

4.创建slave1的配置文件

在/opt/redis-6.2.12/master-slave/目录下创建slave1的配置文件 redis-6380.conf

#复用原始的配置文件
include /opt/redis-6.2.12/master-slave/redis.conf
#后台运行
daemonize yes
#IP地址
bind 127.0.0.1
#配置密码
requirepass 123456
dir /opt/redis-6.2.12/master-slave/
logfile /opt/redis-6.2.12/master-slave/6380.log
##端口
port 6380
##rdb文件
dbfilename dump_6380.rdb
#pid文件
pidfile /var/run/redis_6380.pid

#绑定master
slaveof 127.0.0.1 6379
#master密码
masterauth 123456

3.创建slave2的配置文件

在/opt/redis-6.2.12/master-slave/目录下创建slave2的配置文件 redis-6381.conf

#复用原始的配置文件
include /opt/redis-6.2.12/master-slave/redis.conf
#后台运行
daemonize yes
#IP地址
bind 127.0.0.1
#配置密码
requirepass 123456
dir /opt/redis-6.2.12/master-slave/
logfile /opt/redis-6.2.12/master-slave/6381.log
##端口
port 6381
##rdb文件
dbfilename dump_6381.rdb
#pid文件
pidfile /var/run/redis_6381.pid
#绑定master
slaveof 127.0.0.1 6379
#master密码
masterauth 123456

5.分别启动master和salve1 slave2

#启动主机(master)
redis-server /opt/redis-6.2.12/master-slave/redis-6379.conf
#启动从机1(slave1)
redis-server /opt/redis-6.2.12/master-slave/redis-6380.conf
#启动从机2(slave2)
redis-server /opt/redis-6.2.12/master-slave/redis-6381.conf

启动成功后会在redis-server /opt/redis-6.2.12/master-slave/目录下生成3个对应的日志文件

在这里插入图片描述

6.查看主机信息

#登录主机(Master)
redis-cli -h 127.0.0.1 -p 6379

#查看主机信息
info replication

在这里插入图片描述

7.查看从机1信息

#登录从机(slave1)
redis-cli -h localhost -p 6380
#查看信息
info replication

在这里插入图片描述
8.查看从机2信息

#登录从机(slave2)
redis-cli -h localhost -p 6381
#查看信息
info replication

在这里插入图片描述

2.5.2、验证主从同步

1.主机(master)负责写,从机(slave)负责读,不可以写

在master中写入数据

set score 125

在这里插入图片描述

可以看出,在master节点上向redis数据库中是可以写数据的

在slave节点中向数据库中写入数据

set ss qq

在这里插入图片描述

可以看出,在slave节点上向redis数据库中是不可以写数据的,从机(slave)只负责读

2.主从同步

在master节点中向redis数据库中写入数据后,可以在slave节点中查看到

#master节点中写入数据
set score 125
#slave节点中可以得到从master节点中写入的数据
get score

在这里插入图片描述

3.slave节点挂了

当从节点slave挂了之后,又重新恢复,他是否自己会主动加入主节点的,取决于你的配置,当他加入主节点(Master)后,他会同步在他挂期间,主节点写入的数据

查看redis进程,并且把slave1(端口为6380)的从机关闭,即让他挂了

在这里插入图片描述

在slave1宕机期间,主机(master)想数据库中写入数据
在这里插入图片描述

可以看出slave2仍然可以读取主机(master)写入的数据

在这里插入图片描述

重启启动slave1(端口为6380)的从机

在这里插入图片描述

启动成功后,仍然可以得到在它宕机期间,主机写入的数据

在这里插入图片描述

2.5.3、主从复制解疑

1.主机宕机后情况,从机是尚未还是原地待命?

答:从机会原地待命,如果不想让从机原地待命可以使其变为主机,此时有两种方法:

在这里插入图片描述

可以看出此时主机(Master)已经宕机,从机(Slave)一直处于等待状态

  • 手动执行,是从机变为主机,重新组成主从复制机制,也叫作反客为主

在这里插入图片描述

#使slave2(端口:6381)作为主机
slaveof no one
#使slave1(端口:6380)的主机为slave2(端口:6381)
slaveof 127.0.0.1 6380

在这里插入图片描述

  • 哨兵模式(sentinel),当主机宕机后,根据配置的策略自动选取其中一个从机作为主机

2.主机写权限,从机读权限?

答:是的,从机只有读权限

当在从机中写入数据时,会报错

在这里插入图片描述

3.主机宕机恢复后,在宕机期间写入的数据,从机还可以复制?

答:是的,当主机恢复后,从机就会复制主机的数据

4.从机宕机恢复后,还可以跟上大部队?

答:是的,当从机宕机恢复后,他会全盘加载主机中的数据,确保数据的一致性

5.从机备份主机的内容是从什么时候开始?

答:从头开始备份

6.当主机和从机还没建立主从关系时,主机写入的数据,从机会备份?

答:是的,因为从机的备份是从头开始的全盘加载,故可以备份没建立主从关系之间主机写入的内容。

redis初始:初始之境
redis五中基本数据类型:筑基之境
redis发布与订阅:结丹之境

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值