Redis | 哨兵模式

Redis | 哨兵模式

1. 简介

Redis Sentinel(哨兵)是Redis提供的一种高可用性解决方案。它是一个独立的进程,用于监控和管理Redis主从模式的节点,并在主节点故障时自动进行故障转移。哨兵模式可以确保Redis集群的高可用性和数据一致性。

在哨兵模式中,有一个主节点(Master)和多个从节点(Slave),以及一个或多个哨兵(Sentinel)。主节点负责接收写操作和复制数据到从节点,而从节点负责复制主节点的数据。哨兵负责监控主节点和从节点的状态,并在主节点故障时自动将一个从节点提升为新的主节点。

以下是Redis哨兵模式的一些特点和工作原理:

  1. 哨兵选举:在启动时,每个哨兵都会对主节点进行投票选举,选出一个领头哨兵(Leader Sentinel)。领头哨兵负责协调故障转移过程。
  2. 监控:哨兵会定期检查Redis节点的健康状态,包括主节点和从节点的状态。如果发现主节点不可用,哨兵会触发故障转移。
  3. 故障转移:当主节点不可用时,领头哨兵会选出新的主节点,并通知其他哨兵和从节点进行切换。在故障转移期间,客户端的请求会被暂时拒绝,直到新的主节点选举完成。
  4. 数据一致性:在进行故障转移时,哨兵会确保新的主节点和从节点与旧的主节点数据保持一致。因此,即使主节点故障,数据不会丢失。

2. 配置

  1. 配置Redis主节点:

    在主节点的配置文件(redis.conf)中,设置requirepass选项为主节点的密码。例如:

    复制代码
    requirepass your_redis_password
  2. 配置Redis从节点:

    在从节点的配置文件(redis.conf)中,设置masterauth选项为主节点的密码,并使用replicaof选项将从节点连接到主节点。例如:

    复制代码
    masterauth your_redis_password
    replicaof <master-ip> <master-port>

    <master-ip><master-port>分别是主节点的IP地址和端口号。

  3. 配置Redis Sentinel:

    创建一个名为sentinel.conf的新文件,其中指定以下选项:

    复制代码
    bind *
    sentinel resolve-hostnames yes
    sentinel monitor mymaster <master-ip> <master-port> <quorum>
    sentinel down-after-milliseconds mymaster 5000
    sentinel failover-timeout mymaster 10000
    sentinel auth-pass mymaster <master-password>

    sentinel monitor中,mymaster是Redis实例的名称,<master-ip> <master-port>是主节点的IP地址和端口号,<quorum>是哨兵执行故障转移所需的最少哨兵数目。

    sentinel auth-pass配置了连接到主节点的密码,以便哨兵能够正确连接到Redis主节点。

  4. 启动Redis服务器和哨兵:

    首先,启动带密码的Redis主节点和从节点。然后,分别启动哨兵进程,并使用配置文件启动:

    复制代码
    redis-sentinel /path/to/sentinel.conf

3. 演示

注意:因为每启动redis都会修改sentinel.conf,如果之前测试过想重新开始测试,要将sentinel.conf内容恢复。

下面以1个主节点,2个从节点,1个哨兵节点演示。

文件树

复制代码
hello-redis
├── docker-compose.yaml
└── sentinel
    └── sentinel.conf

文件

sentinel.conf

复制代码
bind 127.0.0.1
sentinel resolve-hostnames yes
sentinel monitor mymaster 192.168.200.2 6379 1
sentinel down-after-milliseconds mymaster 5000
sentinel failover-timeout mymaster 10000
sentinel auth-pass mymaster 123456

docker-compose.yaml

yaml 复制代码
version: "3.8"
networks:
  network:
    ipam:
      driver: default
      config:
        - subnet: '192.168.200.0/24'
services:
  master:
    container_name: master
    image: redis:7.0
    networks:
      network:
        ipv4_address: 192.168.200.2
    command:
      - redis-server
      - --replicaof no one
      - --requirepass 123456
      - --masterauth 123456
      - --bind * -::*
  replica1:
    container_name: replica1
    image: redis:7.0
    networks:
      network:
        ipv4_address: 192.168.200.3
    command:
      - redis-server
      - --requirepass 123456
      - --bind * -::*
      - --masterauth 123456
      - --replicaof 192.168.200.2 6379
    depends_on:
      - master
  replica2:
    container_name: replica2
    image: redis:7.0
    networks:
      network:
        ipv4_address: 192.168.200.4
    command:
      - redis-server
      - --requirepass 123456
      - --bind * -::*
      - --masterauth 123456
      - --replicaof 192.168.200.2 6379
    depends_on:
      - master
  sentinel1:
    container_name: sentinel1
    image: redis:7.0
    networks:
      network:
        ipv4_address: 192.168.200.5
    volumes:
      - ./sentinel:/root/sentinel
    command:
      - redis-sentinel
      - /root/sentinel/sentinel.conf
      - --sentinel
    depends_on:
      - master
  • 启动:在hello-go文件夹下输入docker compose up启动。
  • 测试故障转移:docker stop master停止主节点,等待5秒就能从控制台或sentinel.conf中看到主节点发生切换。
  • 恢复故障主节点:docker start master就能看到master节点又加入集群,并且以从节点身份。

4. 注意

  1. 在生产环境中,建议使用多个哨兵和Redis Cluster等高级解决方案来实现更可靠和自动化的高可用性。
  2. 主节点也要指定masterauth(主节点授权),防止主节点意外中止恢复正常后以无法以从节点身份连接到集群。
相关推荐
程序员老邢16 小时前
《技术底稿 43》今日踩坑复盘:Redis 乱码 + MySQL 配置注入失败
redis·技术底稿·redisson 序列化·mysql 配置·项目踩坑·微服务问题排查
Mr. zhihao19 小时前
Redis五大高级数据结构:原理-场景-底层-横向对比
数据结构·redis
YL200404261 天前
【Redis实战篇】秒杀实现方案(以优惠券秒杀为例)
数据库·redis
better_liang1 天前
每日Java面试场景题知识点之-如何设计分布式锁
java·redis·zookeeper·面试·分布式锁
自传.1 天前
Redis 高频考试面试知识点1
redis·aof·rdb·redis面试
小新同学^O^1 天前
Redis的简单总结
数据库·redis·学习
憧憬成为java架构高手的小白1 天前
黑马八股redis
数据库·redis·缓存
cfm_29141 天前
Redis高并发分布式锁了解
redis·分布式
西安邮电大学1 天前
Redis核心数据结构以及应用场景
java·redis·后端·其他·面试
L1624761 天前
原流程翻车?Redis 生产环境全场景安全升级操作手册(源码编译 + 包管理 + 热升级 + 回滚)
redis·安全·bootstrap