redis哨兵模式----一主两从三哨兵模式(详细版)

redis哨兵模式docker-compose搭建一主两从三哨兵模式

1.我们先准备服务器10.4.2.13

2.我们然后在/root下创建目录

3.创建挂载目录

[root@node1 redis-sentinel]# mkdir -p  ./master/conf
[root@node1 redis-sentinel]# mkdir -p  ./master/data
[root@node1 redis-sentinel]# 
[root@node1 redis-sentinel]# mkdir -p ./slave1/conf
[root@node1 redis-sentinel]# mkdir -p  ./slave1/data
[root@node1 redis-sentinel]# mkdir -p  ./slave2/conf
[root@node1 redis-sentinel]# mkdir -p  ./slave2/data
[root@node1 redis-sentinel]# mkdir -p  ./sentinel1/conf
[root@node1 redis-sentinel]# mkdir -p  ./sentinel2/conf
[root@node1 redis-sentinel]# mkdir -p  ./sentinel3/conf

4.创建挂载文件 (ip自行根据自己的替换)

master:

vim  master/conf/redis.conf

bind 0.0.0.0
masterauth "FjockDaLAq"
requirepass "FjockDaLAq"
dir "/data"
replica-announce-ip "10.4.2.13"
replica-announce-port 6382
 

slave1  

vim   slave1/conf/redis.conf

replica-read-only yes
replicaof 10.4.2.13  6382
masterauth "FjockDaLAq"
requirepass "FjockDaLAq"
dir "/data"
slave-announce-ip  10.4.2.13
slave-announce-port 6380

slave2

vim   slave2/conf/redis.conf

replica-read-only yes
replicaof   10.4.2.13 6382
masterauth "FjockDaLAq"
requirepass "FjockDaLAq"
dir "/data"
slave-announce-ip  10.4.2.13
slave-announce-port 6381

sentinel1

/sentinel1/conf/sentinel.conf

vim  sentinel.conf

port 26379
dir "/data"

sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 10.4.2.13 6382 2
sentinel down-after-milliseconds mymaster 2000
sentinel failover-timeout mymaster 5000
requirepass "FjockDaLAq"
sentinel auth-pass mymaster FjockDaLAq
sentinel config-epoch mymaster 6
sentinel leader-epoch mymaster 70
sentinel announce-ip "10.4.2.13"
sentinel announce-port 26379
# Generated by CONFIG REWRITE
user default on #db059fe5c615826121937429d355e3aef078595000181bd8b8c0db44be94c970 ~* &* +@all
sentinel myid c2cb92d165c055405b11134ee02cc5ddb4bf5e14
sentinel current-epoch 6
sentinel known-replica mymaster 10.4.2.13 6381
sentinel known-replica mymaster 10.4.2.13 6380
sentinel known-sentinel mymaster 10.4.2.13 26381 84231902ad587b77e94781f42f7c2736e34abd92
sentinel known-sentinel mymaster 10.4.2.13 26380 68b75d986db92c0f9eb314379ab7b208325b1379
 

sentinel2

/sentinel2/conf/sentinel.conf

vim  sentinel.conf


port 26379
dir "/data"

sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 10.4.2.13 6382 2
sentinel down-after-milliseconds mymaster 2000
sentinel failover-timeout mymaster 5000
sentinel auth-pass mymaster FjockDaLAq
requirepass "FjockDaLAq"
sentinel announce-ip "10.4.2.13"
sentinel announce-port 26380
# Generated by CONFIG REWRITE
user default on #db059fe5c615826121937429d355e3aef078595000181bd8b8c0db44be94c970 ~* &* +@all
sentinel myid 68b75d986db92c0f9eb314379ab7b208325b1379
sentinel config-epoch mymaster 6
sentinel leader-epoch mymaster 0
sentinel current-epoch 6
sentinel known-replica mymaster 10.4.2.13 6380
sentinel known-replica mymaster 10.4.2.13 6381
sentinel known-sentinel mymaster 10.4.2.13 26381 84231902ad587b77e94781f42f7c2736e34abd92
sentinel known-sentinel mymaster 10.4.2.13 26379 c2cb92d165c055405b11134ee02cc5ddb4bf5e14
 

sentinel3

/sentinel3/conf/sentinel.conf

vim  sentinel.conf


port 26379
dir "/data"

sentinel deny-scripts-reconfig yes
sentinel monitor mymaster 10.4.2.13 6382 2
sentinel down-after-milliseconds mymaster 2000
sentinel failover-timeout mymaster 5000
sentinel auth-pass mymaster FjockDaLAq
#sentinel config-epoch mymaster 2
#sentinel leader-epoch mymaster 2
requirepass "FjockDaLAq"
sentinel announce-ip "10.4.2.13"
sentinel announce-port 26381
# Generated by CONFIG REWRITE
user default on #db059fe5c615826121937429d355e3aef078595000181bd8b8c0db44be94c970 ~* &* +@all
sentinel myid 84231902ad587b77e94781f42f7c2736e34abd92
sentinel config-epoch mymaster 6
sentinel leader-epoch mymaster 0
sentinel current-epoch 6
sentinel known-replica mymaster 10.4.2.13 6380
sentinel known-replica mymaster 10.4.2.13 6381
sentinel known-sentinel mymaster 10.4.2.13 26380 68b75d986db92c0f9eb314379ab7b208325b1379
sentinel known-sentinel mymaster 10.4.2.13 26379 c2cb92d165c055405b11134ee02cc5ddb4bf5e14
 

5.编辑docker-compose.yml

version: '3'
services:
  redis-master:
    image: redis:6.2.6
    container_name: redis_master  #master节点
    volumes:
      - ./master/conf/redis.conf:/etc/redis/redis.conf
      - ./master/data:/data
    command: /bin/bash -c "redis-server /etc/redis/redis.conf"
    environment:
      - TZ=Asia/Shanghai
      - LANG=en_US.UTF-8
    ports:
      - "6382:6379"
    networks:
    - midware_default

 
  redis-slave1:
    image: redis:6.2.6
    container_name: redis_slave_1   #slave1节点
    depends_on:
      - redis-master
    volumes:
      - ./slave1/conf/redis.conf:/etc/redis/redis.conf
      - ./slave1/data:/data
    command: /bin/bash -c "redis-server /etc/redis/redis.conf"
    environment:
      - TZ=Asia/Shanghai
      - LANG=en_US.UTF-8
    ports:
      - "6380:6379"
    networks:
    - midware_default

 
  redis-slave2:
    image: redis:6.2.6
    container_name: redis_slave_2   #slave2节点
    volumes:
      - ./slave2/conf/redis.conf:/etc/redis/redis.conf
      - ./slave2/data:/data
    command: /bin/bash -c "redis-server /etc/redis/redis.conf"
    depends_on:
      - redis-slave1
    environment:
      - TZ=Asia/Shanghai
      - LANG=en_US.UTF-8
    ports:
      - "6381:6379"
    networks:
    - midware_default

  
  redis-sentinel1:
    image: redis:6.2.6
    container_name: redis_sentinel_1  #sentinel1节点
    depends_on:
      - redis-slave2
    ports:
      - "26379:26379"
    volumes:
      - ./sentinel1/conf:/usr/local/etc/redis
    command: /bin/bash -c "redis-sentinel /usr/local/etc/redis/sentinel.conf"
    networks:
    - midware_default
 
  redis-sentinel2:
    image: redis:6.2.6
    container_name: redis_sentinel_2 #sentinel2节点
    ports:
      - "26380:26379"
    depends_on:
      - redis-sentinel1
    volumes:
      - ./sentinel2/conf:/usr/local/etc/redis
    command: /bin/bash -c "redis-sentinel /usr/local/etc/redis/sentinel.conf"

  redis-sentinel3:
    image: redis:6.2.6
    container_name: redis_sentinel_3 #sentinel3节点
    ports:
      - "26381:26379"
    depends_on:
      - redis-sentinel2
    volumes:
      - ./sentinel3/conf:/usr/local/etc/redis
    command: /bin/bash -c "redis-sentinel /usr/local/etc/redis/sentinel.conf"
    networks:
    - midware_default


networks:
  midware_default:
    driver: bridge

6.拉取镜像docker pull redis:6.2.6

7.启动docker-compose  up  -d 

8.查看服务  docker ps |grep redis

9.搭建完成!!!!

10.redis一主两从的三哨兵模式有什么好处???

Redis 一主两从的三哨兵模式是一种在 Redis 高可用性部署中常用的架构,它包含一个主节点(Master)和两个从节点(Slave),以及三个哨兵(Sentinel)节点。这种模式具有以下几个好处:

高可用性:通过使用主从复制机制,当主节点发生故障时,其中一个从节点可以自动接管主节点的角色,成为新的主节点。哨兵节点负责监视主节点的状态,当主节点不可用时,它会自动发现并选举新的主节点,从而实现快速的故障切换和自动恢复,提高系统的可用性。

数据冗余:通过配置两个从节点,数据可以在多个节点上进行复制和存储。当主节点发生故障时,数据仍然可以从其中一个从节点获取,不会丢失。

负载均衡:在正常情况下,主节点负责处理写操作,从节点负责处理读操作。这样可以分担主节点的负载,提高系统的吞吐量和性能。

故障检测和自动恢复:哨兵节点负责监视主节点和从节点的状态,并在发现故障时采取相应的措施。它可以自动发现新的主节点,将从节点切换为主节点,并通知其他哨兵和客户端进行更新,从而实现故障检测和自动恢复的功能。

简化配置和管理:通过使用三个哨兵节点,可以简化 Redis 集群的配置和管理。哨兵节点负责监控和管理主从节点的状态,自动进行主节点的选举和故障切换,减少了手动干预的需求。

需要注意的是,哨兵模式并不能解决所有的故障场景,如多个节点同时发生故障或网络分区等情况。对于更高级别的高可用性需求,可以考虑使用 Redis 的集群模式(Redis Cluster)或其他分布式存储系统。

总之,Redis 一主两从的三哨兵模式通过主从复制和哨兵节点的监控、故障检测和自动恢复功能,提供了较高的可用性和数据冗余,同时简化了配置和管理。这种部署模式适用于对 Redis 数据的高可用性和读写性能有较高要求的场景。

11.Redis 一主两从的三哨兵模式原理

Redis 一主两从的三哨兵模式基于 Redis 的主从复制机制和 Sentinel 哨兵的监控和自动故障切换功能。以下是该模式的工作原理:

主从复制:在一主两从的配置中,主节点负责处理写操作,从节点负责处理读操作。主节点将写入的数据同步复制到从节点,从节点与主节点保持数据的一致性。主从复制使用全量复制和增量复制的方式,确保从节点与主节点的数据保持同步。

哨兵监控:三个 Sentinel 哨兵节点负责监控主节点和从节点的状态。哨兵节点通过发送心跳检测来监测节点的健康状态,包括主节点和从节点的故障、上线和下线等情况。哨兵节点之间通过消息通信来共享监控信息。

故障检测和切换:当哨兵节点检测到主节点不可用时,它会发起故障检测流程。首先,哨兵节点会对主节点进行选举,选择一个从节点作为新的主节点。然后,哨兵节点会通知其他哨兵和客户端,告知主节点切换的结果。客户端可以更新连接信息以连接到新的主节点。

自动故障切换:在故障切换过程中,哨兵节点会将从节点切换为新的主节点,并将其他从节点重新配置为复制新的主节点。这样一来,系统可以在主节点故障后继续提供读写服务。

哨兵选举:在哨兵节点进行主节点选举时,它们会通过投票和协商的方式决定新的主节点。哨兵节点之间使用 Raft 算法来保证选举的一致性和可靠性。

通过以上机制,一主两从的三哨兵模式可以实现 Redis 高可用性的部署。当主节点发生故障时,其中一个从节点会被选举为新的主节点,从而实现快速的故障切换和自动恢复。哨兵节点负责监控节点状态、发起选举和通知其他节点,确保整个系统的可用性和数据一致性。

需要注意的是,哨兵模式需要在客户端配置哨兵节点的信息,以便客户端能够获取到正确的主节点信息。哨兵节点也需要在配置文件中指定监控的主节点和从节点的信息。

总结起来,一主两从的三哨兵模式利用主从复制和哨兵的监控和故障切换功能,实现了 Redis 的高可用性和自动故障恢复。它是一种常见且可靠的 Redis 高可用性部署方案。

  • 19
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值