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

目前已经更新到了:

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

章节内容

上节我们完成了:

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

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

高可用介绍

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

主从复制

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

一主一从

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

一主多从

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

传递复制

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

主从配置

主Redis

无需特殊的配置

从Redis

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

replicaof h121.wzk.icu 6379
  • 1.

主从作用

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

同步模式

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

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

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

心跳监测

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

replconf ack <replication_offset>
  • 1.

主要有如下的作用:

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

哨兵模式

哨兵介绍

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

部署方案

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

配置过程

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

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
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.