大数据-51 Redis 高可用方案CAP-AP 主从复制 一主一从 全量和增量同步 哨兵模式 docker-compose测试

avatar
作者
猴君
阅读量:0

点一下关注吧!!!非常感谢!!持续更新!!!

目前已经更新到了:

  • Hadoop(已更完)
  • HDFS(已更完)
  • MapReduce(已更完)
  • Hive(已更完)
  • Flume(已更完)
  • Sqoop(已更完)
  • Zookeeper(已更完)
  • HBase(已更完)
  • Redis (正在更新…)

章节内容

上节我们完成了:

  • Redis分布式锁
  • Redis SETNX
  • Redis Redisson
  • 分布式锁对比
  • Java的部分实现

在这里插入图片描述

高可用介绍

高可用(High Availability)通常用来描述一个系统经过专门的设计,从而减少停工时间,而保持其服务的高度可用性。
CAP中的AP模型。

主从复制

Redis支持主从复制功能,可以通过 slaveof(Redis5以后修改为replicaof)或者在配置文件中设置来开启该功能。

一主一从

在这里插入图片描述

一主多从

在这里插入图片描述

传递复制

在这里插入图片描述

主从配置

主Redis

无需特殊的配置

从Redis

我们需要修改 redis.conf 文件,来实现。
比如我的主Redis是h121机器,当前我当前在h122上,计划变为h121的从服务器,那你需要如下的配置:

replicaof h121.wzk.icu 6379 

主从作用

  • 读写分离:一主多从,主从同步,主写从读。
  • 数据容灾:从是主的备份。

同步模式

全量同步

  • 同步快照阶段:Master创建并发送RDB给Slave,Slave载入并解析快照,Master同时将此阶段所产生的新的写命令存储到缓冲区。
  • 同步写缓冲阶段:Master向Slave同步存储在缓冲区的写操作命令
  • 同步增量阶段:Master向Slave同步写操作命令。

在这里插入图片描述

增量同步

  • Redis增量同步主要是Slave完成初始化正常工作后,Master的写操作同步到Slave
  • 通常情况下, Master每次执行一个写命令就会向Slave发送相同的写命令,然后Slave执行。

心跳监测

在命令阶段,从服务器默认会以每秒一次的频率向主服务器发送命令:

replconf ack <replication_offset> 

主要有如下的作用:

  • 检测主从的连接状态
  • 辅助实现min-slaves
  • 检测命令丢失

哨兵模式

哨兵介绍

哨兵(Sentinel)是Redis高可用的解决方案,由一个或者多个sentinel集群监视一个或者多个服务器。
当主服务器下线时,sentinel可以将某一从服务器升级为主服务。

部署方案

在这里插入图片描述

配置过程

由于需要启动很多,所以直接使用容器的方式部署。

version: '3'  services:   redis-master:     image: redis:6.2     container_name: redis-master     command: redis-server --appendonly yes     ports:       - 6379:6379     volumes:       - ./data/redis-master:/data    redis-slave1:     image: redis:6.2     container_name: redis-slave1     command: redis-server --slaveof redis-master 6379     ports:       - 6380:6379     volumes:       - ./data/redis-slave1:/data     depends_on:       - redis-master    redis-slave2:     image: redis:6.2     container_name: redis-slave2     command: redis-server --slaveof redis-master 6379     ports:       - 6381:6379     volumes:       - ./data/redis-slave2:/data     depends_on:       - redis-master    sentinel1:     image: redis:6.2     container_name: sentinel1     command: >       sh -c "echo 'port 26379' > /data/sentinel.conf &&              echo 'sentinel monitor mymaster redis-master 6379 2' >> /data/sentinel.conf &&              echo 'sentinel down-after-milliseconds mymaster 5000' >> /data/sentinel.conf &&              echo 'sentinel failover-timeout mymaster 10000' >> /data/sentinel.conf &&              echo 'sentinel parallel-syncs mymaster 1' >> /data/sentinel.conf &&              redis-sentinel /data/sentinel.conf"     ports:       - 26379:26379     depends_on:       - redis-master       - redis-slave1       - redis-slave2    sentinel2:     image: redis:6.2     container_name: sentinel2     command: >       sh -c "echo 'port 26380' > /data/sentinel.conf &&              echo 'sentinel monitor mymaster redis-master 6379 2' >> /data/sentinel.conf &&              echo 'sentinel down-after-milliseconds mymaster 5000' >> /data/sentinel.conf &&              echo 'sentinel failover-timeout mymaster 10000' >> /data/sentinel.conf &&              echo 'sentinel parallel-syncs mymaster 1' >> /data/sentinel.conf &&              redis-sentinel /data/sentinel.conf"     ports:       - 26380:26380     depends_on:       - redis-master       - redis-slave1       - redis-slave2    sentinel3:     image: redis:6.2     container_name: sentinel3     command: >       sh -c "echo 'port 26381' > /data/sentinel.conf &&              echo 'sentinel monitor mymaster redis-master 6379 2' >> /data/sentinel.conf &&              echo 'sentinel down-after-milliseconds mymaster 5000' >> /data/sentinel.conf &&              echo 'sentinel failover-timeout mymaster 10000' >> /data/sentinel.conf &&              echo 'sentinel parallel-syncs mymaster 1' >> /data/sentinel.conf &&              redis-sentinel /data/sentinel.conf"     ports:       - 26381:26381     depends_on:       - redis-master       - redis-slave1       - redis-slave2 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!