Redis(四)Redis的高可用方案【主从】

一、主从架构

架构图

构建步骤

1、创建一个新的目录,模拟用【从根目录开始演示】
cd zhTools/redis-5.0.3
mkdir zhRedisDemo #创建目录
cd zhRedisDemo
mkdir slave #创建主从模式的目录
cd slave
mkdir 6380 #用于存放6380端口的数据【主】
mkdir 6381 #用于存放6381端口的数据【从】

2、把redis的配置文件复制2份分别放到对应的目录下【从根目录开始演示】
cd zhTools/redis-5.0.3
cp redis.conf zhRedisDemo/slave/6380
cp redis.conf zhRedisDemo/slave/6381

3、进入6380目录,并修改redis.conf【主】
port 6380 #端口
pidfile /var/run/redis_6380.pid #把pid进程号写入pidfile配置的文件
logfile "6380.log" #日志文件存放在当前目录
bind 0.0.0.0 #开放访问
dir /root/zhTools/redis-5.0.3/zhRedisDemo/slave/6380/data # 指定数据存放目录

4、进入6381目录,并修改redis.conf【从】
port 6381 #端口
pidfile /var/run/redis_6381.pid #把pid进程号写入pidfile配置的文件
logfile "6381.log" #日志文件存放在当前目录
bind 0.0.0.0 #开放访问
dir /root/zhTools/redis-5.0.3/zhRedisDemo/slave/6381/data # 指定数据存放目录
replicaof 120.24.58.161 6380 # 从本机6380的redis实例复制数据,Redis 5.0之前使用slaveof
replica‐read‐only yes #配置从节点只读
masterauth xxxxxxxxx #配置主节点密码【若主节点设置了密码则需要这个配置项】

5、分别使用刚才6380、6381的配置文件启动主节点、从节点

6、链接客户端开始测试

 

 

二、Redis主从工作原理

  主从同步流程:

  • 1、当我们为master配置了一个slave,管这个slave是否是第一次连接上Master,它都会发送一个PSYNC命令给master请求复制数据
  • 2、master收到PSYNC命令后,会在后台进行数据持久化通过bgsave生成最新的rdb快照文件
  • 3、持久化期间,master会继续接收客户端的请求,它会把这些可能修改数据集的请求缓存在内存中
  • 4、当持久化进行完毕以后,master会把这份rdb文件数据集发送给slave,slave会把接收到的数据进行持久化生成rdb,然后再加载到内存中
  • 5、master再将之前缓存在内存中的命令发送给slave

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

  PS:SYNC使用的是全量复制PSYNC使用的是增量复制

  PS:主从结构一般会设置成:主节点负责写入从节点负责备份和读取

全量同步

  PS:主从同步与开不开启持久化无关,是redis服务端做的事情。至于为什么用rdb文件来同步也是因为rdb是二进制形式的数据,同步起来比aof更快。

增量同步、断点续传

三、Redis主从复制风暴的解决方案

  刚听到这个名词觉得相当高大上,这里解释一下:

  主从复制风暴:多个从节点同时复制主节点导致主节点压力过大

  解决方案:让部分从节点向另一些从节点同步数据PS:这里被同步的从节点要持续与主节点进行同步。

  PS:主节点一般配置不超过10个G因为太大了会影响同步时的效率

 

posted @ 2021-08-03 10:59  有梦想的肥宅  阅读(197)  评论(0编辑  收藏  举报